【火炉炼AI】机器学习031-KNN回归器模型的构建
【火爐煉AI】機器學習031-KNN回歸器模型的構建
(本文所使用的Python庫和版本號: Python 3.6, Numpy 1.14, scikit-learn 0.19, matplotlib 2.2 )
在上一篇文章中我們學習了構建KNN分類器模型,但是KNN不僅可以用于分類問題,還可以用于回歸問題,本章我們來學習KNN回歸模型的構建和訓練。
1. 準備數據集
此處我們使用隨機函數構建了序列型數據集,其產生方式是用函數np.sinc()來產生y值。
# 準備數據集,此處用隨機的方式生成一些樣本數據 amplitute=10 num_points=100 dataset_X=amplitute*np.random.rand(num_points,1)-0.5*amplitute dataset_y=np.sinc(dataset_X).ravel() dataset_y+=0.2*(0.5-np.random.rand(dataset_y.size)) print(dataset_X.shape) print(dataset_y.shape)用plt將該數據集繪制到圖表中,可以看到如下結果。
2. KNN回歸模型的構建和訓練
構建和訓練KNN回歸器與KNN分類器一樣簡單,如下代碼。
# 構建KNN回歸模型 from sklearn.neighbors import KNeighborsRegressor K=8 KNN_regressor=KNeighborsRegressor(K,weights='distance') KNN_regressor.fit(dataset_X,dataset_y)雖然此處構建了KNN回歸器并對該回歸器進行了訓練,可是怎么知道訓練結果了?
如下我定義了一個繪圖函數,可以用散點圖的方式來繪制原始的數據集和預測之后的數據集
# 將回歸器繪制到圖中 def plot_regressor(regressor, X, y):# 將數據集繪制到圖表中看看分布情況plt.scatter(X,y,color='k',marker='o',label='dataset')predicted=regressor.predict(X)plt.scatter(dataset_X,predicted,color='blue',marker='*',label='predicted')plt.xlim(X.min() - 1, X.max() + 1)plt.ylim(y.min() - 0.2, y.max() + 0.2)plt.legend()plt.show()在本數據集上的表現可以從下圖中看出:
上面可以看出該KNN回歸器在訓練集上的表現貌似還不錯,那么怎么用該訓練完成的KNN回歸器來預測新數據集了?如下我們先構建一序列新樣本數據,然后將該樣本數據繪制到圖中,看看其分布是否符合原來的分布特性。
# 下面用本KNN回歸器來預測新樣本數據,如下 # 構建了10倍的新數據,并且建立第二個軸,用于KNNregressor.predict new_samples=np.linspace(-0.5*amplitute, 0.5*amplitute, 10*num_points)[:, np.newaxis] new_predicted=KNN_regressor.predict(new_samples)# 把原始數據也畫上來 plt.scatter(dataset_X,dataset_y,color='k',marker='o',label='dataset') plt.plot(new_samples,new_predicted,color='r',linestyle='-',label='new_samples') plt.legend()得到的結果圖貌似有非常嚴重的過擬合,如下圖:
########################小**********結###############################
1,KNN回歸器的構建,訓練,預測和KNN分類器基本一致。
2,我在使用KNN回歸器對訓練集進行預測,得到的預測值竟然和訓練集中的Y值完全一致,一模一樣,我反復檢查了好多遍,還是這個結果,剛開始以為是K值太小導致過擬合,但是修改K后仍然有這種情況,這個現象不知道其他人遇到沒有,我找了好久都沒找到原因所在。
#################################################################
注:本部分代碼已經全部上傳到(我的github)上,歡迎下載。
參考資料:
1, Python機器學習經典實例,Prateek Joshi著,陶俊杰,陳小莉譯
總結
以上是生活随笔為你收集整理的【火炉炼AI】机器学习031-KNN回归器模型的构建的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我的世界服务器如何修复报错,我的世界18
- 下一篇: FreeSWITCH的传真发送