Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import numpy as np
- import matplotlib.pyplot as plt
- # Генерация синтетических данных
- np.random.seed(0)
- X = np.sort(5 * np.random.rand(80, 1), axis=0) # Равномерно распределенные значения X
- y = np.sin(X).ravel() # Истинные значения y с применением функции sin
- y += 0.2 * np.random.randn(80) # Добавление нормально распределенного шума
- # Метод Надарая-Ватсона
- def nadaraya_watson(X_train, y_train, x, h):
- kernel = np.exp(-((X_train - x)**2) / (2 * h**2)) # Гауссово ядро
- weighted_sum = np.dot(kernel.T, y_train) # Взвешенная сумма
- sum_of_weights = np.sum(kernel)
- return weighted_sum / sum_of_weights if sum_of_weights != 0 else 0
- # Непараметрическая регрессия
- def nonparametric_regression(X_train, y_train, X_test, h):
- return np.array([nadaraya_watson(X_train, y_train, x, h) for x in X_test])
- # Визуализация
- X_test = np.linspace(0, 5, 500)[:, np.newaxis] # Тестовые точки для визуализации
- h_values = [0.1, 0.5, 1.0] # Различные значения параметра сглаживания
- plt.figure(figsize=(12, 8))
- for h in h_values:
- y_pred = nonparametric_regression(X, y, X_test, h)
- plt.plot(X_test, y_pred, label=f'h = {h}') # Результаты регрессии
- plt.scatter(X, y, color='k', label='Исходные данные')
- plt.xlabel('X')
- plt.ylabel('y')
- plt.title('Непараметрическая регрессия: Метод Надарая-Ватсона')
- plt.legend()
- plt.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement