Advertisement
fevzi02

Untitled

Dec 12th, 2023
20
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.68 KB | None | 0 0
  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3.  
  4. # Генерация синтетических данных
  5. np.random.seed(0)
  6. X = np.sort(5 * np.random.rand(80, 1), axis=0) # Равномерно распределенные значения X
  7. y = np.sin(X).ravel() # Истинные значения y с применением функции sin
  8. y += 0.2 * np.random.randn(80) # Добавление нормально распределенного шума
  9.  
  10. # Метод Надарая-Ватсона
  11. def nadaraya_watson(X_train, y_train, x, h):
  12. kernel = np.exp(-((X_train - x)**2) / (2 * h**2)) # Гауссово ядро
  13. weighted_sum = np.dot(kernel.T, y_train) # Взвешенная сумма
  14. sum_of_weights = np.sum(kernel)
  15. return weighted_sum / sum_of_weights if sum_of_weights != 0 else 0
  16.  
  17. # Непараметрическая регрессия
  18. def nonparametric_regression(X_train, y_train, X_test, h):
  19. return np.array([nadaraya_watson(X_train, y_train, x, h) for x in X_test])
  20.  
  21. # Визуализация
  22. X_test = np.linspace(0, 5, 500)[:, np.newaxis] # Тестовые точки для визуализации
  23. h_values = [0.1, 0.5, 1.0] # Различные значения параметра сглаживания
  24.  
  25. plt.figure(figsize=(12, 8))
  26. for h in h_values:
  27. y_pred = nonparametric_regression(X, y, X_test, h)
  28. plt.plot(X_test, y_pred, label=f'h = {h}') # Результаты регрессии
  29.  
  30. plt.scatter(X, y, color='k', label='Исходные данные')
  31. plt.xlabel('X')
  32. plt.ylabel('y')
  33. plt.title('Непараметрическая регрессия: Метод Надарая-Ватсона')
  34. plt.legend()
  35. plt.show()
  36.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement