- KNN用于回归的基本原理
- 在KNN回归中,对于一个新的输入样本点,算法会在训练集中找到与它距离最近的K个邻居。
- 然后,根据这K个邻居的目标值(输出值)来预测新样本点的目标值。通常采用的预测方法是取这K个邻居的目标值的平均值或者加权平均值作为新样本点的预测值。
- 距离度量和K值的选择
- 距离度量:与KNN分类算法类似,KNN回归也需要使用距离度量来确定样本之间的相似性。常用的距离度量方法包括欧式距离、曼哈顿距离等。欧式距离在连续特征空间中应用广泛。
- K值的选择:K值的选择对KNN回归的性能有很大影响。如果K值过小,模型容易受到噪声数据的影响,导致过拟合;如果K值过大,模型会过于平滑,可能会忽略数据中的局部特征,导致欠拟合。一般通过交叉验证等方法来选择合适的K值。
- 基础代码示例
import numpy as np
from sklearn.neighbors import KNeighborsRegressor
from sklearn.metrics import mean_squared_error
import matplotlib.pyplot as plt
np.random.seed(0)
X = np.sort(5 * np.random.rand(40, 1), axis = 0)
y = np.sin(X).ravel()
y[::5] += 1 * (0.5 - np.random.rand(8))
X_train, X_test = X[:30], X[30:]
y_train, y_test = y[:30], y[30:]
knn_reg = KNeighborsRegressor(n_neighbors = 3)
knn_reg.fit(X_train, y_train)
y_pred = knn_reg.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
print("均方误差:", mse)
plt.scatter(X_train, y_train, c = 'blue', label = 'Training data')
plt.scatter(X_test, y_test, c = 'red', label = 'Test data')
plt.plot(X_test, y_pred, c = 'green', linewidth = 2, label = 'Predictions')
plt.xlabel('X')
plt.ylabel('y')
plt.legend()
plt.show()
- 应用sklearn实现代码示例
data_X = [
[1.3,6],
[3.5,5],
[4.2,2],
[5,7.5],
[7.2,4],
[2,9],
[5,3.3],
[8.1,8],
[9,2.5]
]
data_y = [0.1,0.3,0.5,0.7,0.9,1.1,1.3,1.5,1.7]
X_train = np.array(data_X)
y_train = np.array(data_y)
data_new = np.array([4,5])
from sklearn.neighbors import KNeighborsRegressor
knn_reg = KNeighborsRegressor(n_neighbors=5)
knn_reg.fit(X_train,y_train)
predict_y = knn_reg.predict(data_new.reshape(1,-1))
predict_y