Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import numpy as np
- import matplotlib.pyplot as plt
- from sklearn.neighbors import KernelDensity
- from scipy.interpolate import interp1d
- # Функция для генерации данных
- def generate_data(n_samples=100, noise_level=0.3):
- X = np.linspace(0, 10, n_samples)
- y = np.sin(X) + np.random.normal(0, noise_level, n_samples) # синусоида с шумом
- return X, y
- # Метод Надарая-Ватсона
- def nadaraya_watson(X, y, X_test, bandwidth=0.5):
- kde = KernelDensity(kernel='gaussian', bandwidth=bandwidth).fit(X[:, None], y)
- log_density = kde.score_samples(X_test[:, None])
- return np.exp(log_density)
- # Метод Лоулесса (метод локальных полиномов)
- def lowess(X, y, f=0.25, iter=3):
- n = len(X)
- r = int(np.ceil(f * n))
- y_est = np.zeros(n)
- delta = np.ones(n)
- for iteration in range(iter):
- for i in range(n):
- weights = delta * np.exp(-np.abs((X[i] - X) / X[r]) ** 2)
- b = np.array([np.sum(weights * y), np.sum(weights * y * X)])
- A = np.array([[np.sum(weights), np.sum(weights * X)],
- [np.sum(weights * X), np.sum(weights * X * X)]])
- theta = np.linalg.solve(A, b)
- y_est[i] = theta[0] + theta[1] * X[i]
- delta = np.abs(y - y_est)
- delta = delta / np.max(delta)
- return y_est
- # Генерируем данные
- X, y = generate_data()
- X_noise, y_noise = generate_data(noise_level=1)
- # Тестовые данные
- X_test = np.linspace(0, 10, 500)
- # Применение методов
- y_nw = nadaraya_watson(X[:, None], y, X_test[:, None])
- y_lowess = lowess(X, y)
- # Визуализация
- plt.figure(figsize=(12, 6))
- plt.subplot(1, 2, 1)
- plt.scatter(X, y, color='blue', label='Original Data')
- plt.plot(X_test, y_nw, color='red', label='Nadaraya-Watson')
- plt.title('Nadaraya-Watson Regression')
- plt.legend()
- plt.subplot(1, 2, 2)
- plt.scatter(X, y, color='blue', label='Original Data')
- plt.plot(X, y_lowess, color='green', label='Lowess')
- plt.title('Lowess Regression')
- plt.legend()
- plt.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement