Построение Результата Регрессии Ядра

#python #numpy #matplotlib #machine-learning

Вопрос:

Я создал свою собственную функцию регрессии ядра, и это мой код.

 #given from scipy.spatial import distance from sklearn.linear_model import LinearRegression import numpy as np import matplotlib import matplotlib.pyplot as plt %matplotlib inline  #given np.random.seed(100) xTrain = np.expand_dims(np.linspace(-5, 5, 100), 1)  yTrain = np.sin(xTrain)   0.5*np.random.uniform(-1, 1, size=xTrain.shape)   def rbf_kernel(X, Xp, h):   dist = distance.cdist(X,Xp,'euclidean')  K = np.exp(-((dist)**2)/(2*((h)**2)))  return K  def median_distance(X):  dist = []  for i in range(len(X)):   for j in range(len(X)):  if i != j:   dist.append(abs(X[i]-X[j]))   h = np.median(dist)   return h  def kernel_regression_fitting(xTrain, yTrain, h, beta=1):   a = np.linalg.inv(rbf_kernel(xTrain,yTrain,h) (beta*np.identity(xTrain.shape[0])))  W = a.dot(yTrain)   return W  #given def kernel_regression_fit_and_predict(xTrain, yTrain, xTest, h, beta):  W = kernel_regression_fitting(xTrain, yTrain, h, beta)  K_xTrain_xTest = rbf_kernel(xTrain, xTest, h)  yPred = np.dot( K_xTrain_xTest.T, W)  return yPred  #given beta = 1. xTest = np.expand_dims(np.linspace(-6, 6, 200), 1) h_med = median_distance(xTrain)  yHatk = kernel_regression_fit_and_predict(xTrain, yTrain, xTest, h_med, beta)  #given lr = LinearRegression() lr.fit(xTrain, yTrain)  yHat = lr.predict(xTest)  #given plt.plot(xTrain, yTrain, '*') plt.plot(xTest, yHat, '*') plt.plot(xTest, yHatk, '-k') plt.show()   

Результат должен быть таким :

введите описание изображения здесь

Я говорю, что так и должно быть, потому что шаблон «синяя звезда» — это то, что вы получаете, когда строите только xtrain и ytrain, прежде чем я объявлю какую-либо функцию в своем коде.

Черная линия-это наше предсказание метки с использованием ядра. Поскольку это предсказание метки, то мы все знаем, что результат будет более менее похожим на наш график xtrain и ytrain

И, наконец, оранжевая линия-это наша линейная регрессия. Это очевидно, потому что это линейная линия, и направление линии должно следовать нашему шаблону.

#given означает, что код уже дан из исходного кода. Что я сделал, так это создал ядро rbf, медианное расстояние и функцию подгонки регрессии ядра для достижения правильного графика.

Но то, что я получаю, похоже на это :

введите описание изображения здесь

Почему мой результат отличается от того, каким он должен быть?

Комментарии:

1. Почему именно результаты должны быть такими, как вы показываете на 1-м графике? Пожалуйста, обновите свой пост, чтобы включить источник.

2. Готово, я отредактировал свой пост.