【火炉炼AI】机器学习031-KNN回归器模型的构建
【火爐煉AI】機(jī)器學(xué)習(xí)031-KNN回歸器模型的構(gòu)建
(本文所使用的Python庫(kù)和版本號(hào): Python 3.6, Numpy 1.14, scikit-learn 0.19, matplotlib 2.2 )
在上一篇文章中我們學(xué)習(xí)了構(gòu)建KNN分類器模型,但是KNN不僅可以用于分類問(wèn)題,還可以用于回歸問(wèn)題,本章我們來(lái)學(xué)習(xí)KNN回歸模型的構(gòu)建和訓(xùn)練。
1. 準(zhǔn)備數(shù)據(jù)集
此處我們使用隨機(jī)函數(shù)構(gòu)建了序列型數(shù)據(jù)集,其產(chǎn)生方式是用函數(shù)np.sinc()來(lái)產(chǎn)生y值。
# 準(zhǔn)備數(shù)據(jù)集,此處用隨機(jī)的方式生成一些樣本數(shù)據(jù) 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將該數(shù)據(jù)集繪制到圖表中,可以看到如下結(jié)果。
2. KNN回歸模型的構(gòu)建和訓(xùn)練
構(gòu)建和訓(xùn)練KNN回歸器與KNN分類器一樣簡(jiǎn)單,如下代碼。
# 構(gòu)建KNN回歸模型 from sklearn.neighbors import KNeighborsRegressor K=8 KNN_regressor=KNeighborsRegressor(K,weights='distance') KNN_regressor.fit(dataset_X,dataset_y)雖然此處構(gòu)建了KNN回歸器并對(duì)該回歸器進(jìn)行了訓(xùn)練,可是怎么知道訓(xùn)練結(jié)果了?
如下我定義了一個(gè)繪圖函數(shù),可以用散點(diǎn)圖的方式來(lái)繪制原始的數(shù)據(jù)集和預(yù)測(cè)之后的數(shù)據(jù)集
# 將回歸器繪制到圖中 def plot_regressor(regressor, X, y):# 將數(shù)據(jù)集繪制到圖表中看看分布情況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()在本數(shù)據(jù)集上的表現(xiàn)可以從下圖中看出:
上面可以看出該KNN回歸器在訓(xùn)練集上的表現(xiàn)貌似還不錯(cuò),那么怎么用該訓(xùn)練完成的KNN回歸器來(lái)預(yù)測(cè)新數(shù)據(jù)集了?如下我們先構(gòu)建一序列新樣本數(shù)據(jù),然后將該樣本數(shù)據(jù)繪制到圖中,看看其分布是否符合原來(lái)的分布特性。
# 下面用本KNN回歸器來(lái)預(yù)測(cè)新樣本數(shù)據(jù),如下 # 構(gòu)建了10倍的新數(shù)據(jù),并且建立第二個(gè)軸,用于KNNregressor.predict new_samples=np.linspace(-0.5*amplitute, 0.5*amplitute, 10*num_points)[:, np.newaxis] new_predicted=KNN_regressor.predict(new_samples)# 把原始數(shù)據(jù)也畫上來(lái) 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()得到的結(jié)果圖貌似有非常嚴(yán)重的過(guò)擬合,如下圖:
########################小**********結(jié)###############################
1,KNN回歸器的構(gòu)建,訓(xùn)練,預(yù)測(cè)和KNN分類器基本一致。
2,我在使用KNN回歸器對(duì)訓(xùn)練集進(jìn)行預(yù)測(cè),得到的預(yù)測(cè)值竟然和訓(xùn)練集中的Y值完全一致,一模一樣,我反復(fù)檢查了好多遍,還是這個(gè)結(jié)果,剛開始以為是K值太小導(dǎo)致過(guò)擬合,但是修改K后仍然有這種情況,這個(gè)現(xiàn)象不知道其他人遇到?jīng)]有,我找了好久都沒找到原因所在。
#################################################################
注:本部分代碼已經(jīng)全部上傳到(我的github)上,歡迎下載。
參考資料:
1, Python機(jī)器學(xué)習(xí)經(jīng)典實(shí)例,Prateek Joshi著,陶俊杰,陳小莉譯
總結(jié)
以上是生活随笔為你收集整理的【火炉炼AI】机器学习031-KNN回归器模型的构建的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 我的世界服务器如何修复报错,我的世界18
- 下一篇: 【火炉炼AI】机器学习023-使用层次聚