#python #numpy #scikit-learn #regression #non-linear-regression
Вопрос:
Я пытаюсь реализовать регрессию ядра с нуля, у меня возникла проблема с реализацией функции kernel_regression_fitting, в которой рассчитывается оптимизированный вес.
Это мой реализованный код.
############## Simulate a 1-dimensional dataset ###########
import numpy as np
np.random.seed(100)
### Step 1: Simulate a simple 1D data ###
xTrain = np.expand_dims(np.linspace(-5, 5, 100), 1) # 100*1
yTrain = np.sin(xTrain) 0.5*np.random.uniform(-1, 1, size=xTrain.shape) ## 100 *1
#################### Kernel function ###############
from scipy.spatial import distance
"""
calcuating kernel matrix between X and Xp
"""
def rbf_kernel(X, Xp, h):
# X: n*1 matrix
# Xp: m*1 matrix
# h: scalar value
K = np.exp(-1 * (np.square(distance.cdist(X, Xp))) / (2 * (np.square(h))))
return K #n*m
### output is a 2X3 matrix
# [[0.60653066 1. 0.60653066]
# [0.13533528 0.60653066 1. ]]
k_test = rbf_kernel(np.array([[2],[1]]), np.array([[3],[2],[1]]), 1)
print(k_test)
############# The median trick for bandwidth ##########
def median_distance(X):
# X: n*1 matrix
np.fill_diagonal(X, 0)
h = np.median(distance.pdist(X))
return h
### Test your functions
#answer should be [2.0]
h_test = median_distance(np.array([[1],[2],[4]]))
print(h_test)
Этот код генерируется с использованием случайных данных, и позже я реализовал функцию fit.
################### Kernel Regression ########
def kernel_regression_fitting(xTrain, yTrain, h, beta=1):
# X: input data, numpy array, n*1
# Y: input labels, numpy array, n*1
# W is a n*1 matrix)
W = '????????'
return W
### W shape should be (100, 1)
h = median_distance(xTrain)
W_test = kernel_regression_fitting(xTrain, yTrain, h)
print(W_test.shape)