前面一篇文章说了用knn算法进行分类现在尝试用knn算法进行线性回归分析。不说了直接上代码。 使用knn实现简单的线性回归.sk中进行回归和分类的knn算法的API不一样这点需要注意一下。 import numpy as np; #from sklearn.neighbors import KNeighborsClassifier as knn; import matplotlib.pyplot as plt; from sklearn.neighbors import KNeighborsRegressor as knn ; xnp.random.rand(50,1); ynp.cos(x)*5-0.1 plt.figure(1); plt.scatter(x,y) clfknn(5) clf.fit(x,y) Tnp.linspace(0,1,500)[:,np.newaxis]; y_predclf.predict(T) plt.plot(T,y_pred); #用来评价拟合情况 print(clf.score(x,y)) #plt.plot(x,y) plt.show()运行结果0.9972780340153532很简单的一段代码下面我们尝试将阿里天池入门大赛的蒸汽量的预测来用knn算法尝试一下。看看效果。from sklearn.neighbors import KNeighborsRegressor; import numpy as np; import matplotlib.pyplot as plt; #加载训练数据集 def NumpyReadData1(filepath):#filepath是文件所在路径。 train_datanp.loadtxt(filepath,dtypestr) train_datatrain_data[1:] trainfloattrain_data.astype(np.float)#把字符串转为float类型 #把训练集为两部分x_train作为输入,y_train作为输出。 x_traintrainfloat[:,0:38]; y_traintrainfloat[:,38:]; return x_train,y_train; #加载测试数据集 def NumpyReadData2(filepath):#filepath是文件所在路径。 test_datanp.loadtxt(filepath,dtypestr) test_datatest_data[1:] trainfloattest_data.astype(np.float)#把字符串转为float类型 #把训练集为两部分x_train作为输入,y_train作为输出。 x_testtrainfloat[:,0:38]; return x_test; def KNN(x_train,y_train,x_test): knnKNeighborsRegressor(5) knn.fit(x_train,y_train) y_testknn.predict(x_test) knn.score(x_train,y_train) return y_test def Write_txt(y_test): prediction np.around(y_test, decimals3) pre prediction.astype(str).tolist(); plt.figure() x_datanp.arange(0,1925) # plt.scatter(x_data, y_date_train) plt.plot(x_data, prediction, r-) plt.show() f2 open(prediction.txt, r) for i in range(len(pre)): f2.write(.join(pre[i]) \n) f2.close() pass if __name__ __main__: x_trian,y_trianNumpyReadData1(./zhengqi/zhengqi_train.txt) x_testNumpyReadData2(./zhengqi/zhengqi_test.txt) y_precKNN(x_trian,y_trian,x_test); Write_txt(y_prec)运行结果数值结果保存在prediction.txt文件中由于现在没有对数据做任何预处理所以预测的准确率不高