import matplotlib.pyplot as plt
import numpy as np
# 生成训练样本
n_dots = 400#训练样本点越多,预测的越准确
X_train= 5 * np.random.rand(n_dots, 1)#随机40个样本,1列的列向量
y_train = np.cos(X_train).ravel()#y=cos(X),np.ravel()是用来将多维的array 变成一维(按行)
# 训练模型
from sklearn.neighbors import KNeighborsRegressor#导入KNN回归器
k=5
knn=KNeighborsRegressor(k)#设计KNN回归器
knn.fit(X_train,y_train)#导入数据,并训练回归器
#生成足够密集的点并进行预测
X_test=np.random.rand(n_dots, 1)#数值范围0-5,数目500,并转置成列向量
y_test=np.cos(X_test).ravel()
y_predict=knn.predict(X_test)#X_test做测试集,预测出y值
#绘制测试结果和预测结果对比图
plt.plot(y_test[:100],'r',y_predict[:100],'b--')
plt.xlabel('Random Test Data')
plt.legend(['observed','predict'])#图中显示线色的指示
plt.show()#显示绘图
结果图:
n_dots = 40
n_dots = 400
n_dots = 4000
后面n_dots
再增加,预测的准确率也很难提高了。因为训练集X_train
和测试集X_test
的数值范围有差距造成的。