knn同样可应用于回归问题:
找出一个样本的k个邻居,把邻居的属性的平均值赋给该样本。
缺点:
- 对具有很多特征(几百甚至上千)的数据集效果不好
- 对于特征中包含很多零的稀疏矩阵效果尤其不好
注意:
k值越大,对噪声越不敏感,但可能造成欠拟合;k值越小,容易造成过拟合
生成训练数据
生成0-5范围内的随机值,这里生成40个值
1 2
| n_dots=40 X=5*np.random.rand(n_dots,1)
|
余弦函数生成测试数据,使用ravel处理成一维数组
加入噪声
1
| Y+=0.2*np.random.rand(n_dots)-0.1
|
训练模型
1 2 3 4
| from sklearn.neighbors import KNeighborsRegressor k=5 knn=KNeighborsRegressor(n_neighbors=k) knn.fit(X,Y)
|
生成预测数据
均匀分布在0-5之间的包含500个数字的一维数组,对一维数组增加一个新的维度,变成二维数组,:在前面指的是为每个元素添加,:在后面指的是为所有元素添加
1
| T=np.linspace(0,5,500)[:,np.newaxis]
|
模型预测
计算模型在训练数据x和目标Y上的得分,得分越高,说明模型在训练数据上表现良好
定义画板
绘制预测结果,将预测结果数据连接起来,构成拟合曲线
1 2
| import matplotlib.pyplot as plt plt.figure(figsize=(10,6),dpi=144)
|
绘制训练数据散点图
scatter用于绘制散点图
1
| plt.scatter(X,Y,c='g',label='train_data' ,s=50)
|
绘制预测数据折线图
plot可以用来表示连续的数据关系,绘制折线、线图、柱状图等
1
| plt.plot(T,y_pred,c='r',label='prediction',linewidth=2)
|
展示画板
