K-近邻算法之K值的选择(带案例)
三、K值的選擇
K值選擇問(wèn)題,李航博士的一書(shū)「統(tǒng)計(jì)學(xué)習(xí)方法」上所說(shuō):
選擇較小的K值,就相當(dāng)于用較小的領(lǐng)域中的訓(xùn)練實(shí)例進(jìn)行預(yù)測(cè),“學(xué)習(xí)”近似誤差會(huì)減小,只有與輸入實(shí)例較近或相似的訓(xùn)練實(shí)例才會(huì)對(duì)預(yù)測(cè)結(jié)果起作用,與此同時(shí)帶來(lái)的問(wèn)題是“學(xué)習(xí)”的估計(jì)誤差會(huì)增大,換句話說(shuō),K值的減小就意味著整體模型變得復(fù)雜,容易發(fā)生過(guò)擬合;
選擇較大的K值,就相當(dāng)于用較大領(lǐng)域中的訓(xùn)練實(shí)例進(jìn)行預(yù)測(cè),其優(yōu)點(diǎn)是可以減少學(xué)習(xí)的估計(jì)誤差,但缺點(diǎn)是學(xué)習(xí)的近似誤差會(huì)增大。這時(shí)候,與輸入實(shí)例較遠(yuǎn)(不相似的)訓(xùn)練實(shí)例也會(huì)對(duì)預(yù)測(cè)器作用,使預(yù)測(cè)發(fā)生錯(cuò)誤,且K值的增大就意味著整體的模型變得簡(jiǎn)單。
K=N(N為訓(xùn)練樣本個(gè)數(shù)),則完全不足取,因?yàn)榇藭r(shí)無(wú)論輸入實(shí)例是什么,都只是簡(jiǎn)單的預(yù)測(cè)它屬于在訓(xùn)練實(shí)例中最多的類,模型過(guò)于簡(jiǎn)單,忽略了訓(xùn)練實(shí)例中大量有用信息。
在實(shí)際應(yīng)用中,K值一般取一個(gè)比較小的數(shù)值,例如采用交叉驗(yàn)證法(簡(jiǎn)單來(lái)說(shuō),就是把訓(xùn)練數(shù)據(jù)在分成兩組:訓(xùn)練集和驗(yàn)證集)來(lái)選擇最優(yōu)的K值。
- 近似誤差:
- 對(duì)現(xiàn)有訓(xùn)練集的訓(xùn)練誤差,關(guān)注訓(xùn)練集,
- 如果近似誤差過(guò)小可能會(huì)出現(xiàn)過(guò)擬合的現(xiàn)象,對(duì)現(xiàn)有的訓(xùn)練集能有很好的預(yù)測(cè),但是對(duì)未知的測(cè)試樣本將會(huì)出現(xiàn)較大偏差的預(yù)測(cè)。
- 模型本身不是最接近最佳模型。
- 估計(jì)誤差:
- 可以理解為對(duì)測(cè)試集的測(cè)試誤差,關(guān)注測(cè)試集,
- 估計(jì)誤差小說(shuō)明對(duì)未知數(shù)據(jù)的預(yù)測(cè)能力好,
- 模型本身最接近最佳模型。
KNN中K值大小選擇對(duì)模型的影響
- k值過(guò)小:
- 容易受到異常點(diǎn)的影響
- 容易過(guò)擬合
- 模型過(guò)于復(fù)雜
- k值過(guò)大:
- 受到樣本均衡的問(wèn)題
- 容易欠擬合
- 模型過(guò)于簡(jiǎn)單
四、案例1:鳶尾花種類預(yù)測(cè)
1)scikit-learn數(shù)據(jù)集API介紹
- sklearn.datasets
- 加載獲取流行數(shù)據(jù)集
- datasets.load_*()
- 獲取小規(guī)模數(shù)據(jù)集,數(shù)據(jù)包含在datasets中
- datasets.fetch_*(data_home=None)
- 獲取大規(guī)模數(shù)據(jù),需要從網(wǎng)上下載,函數(shù)的第一個(gè)參數(shù)就是data-Home表示數(shù)據(jù)集的下載目錄。默認(rèn)是~/scikit_learn_data/
2)scikit-learn小數(shù)據(jù)集
-
sklearn.datasets.load_iris()
加載并返回鳶尾花數(shù)據(jù)集
3)scikit-learn大數(shù)據(jù)集
-
sklearn.datasets.fetch_20newsgroups(data_home=None,subset=‘train’)
- subset:“train"或者"test”,"all"可選,選擇需要加載的數(shù)據(jù)集
- 訓(xùn)練集的"訓(xùn)練",測(cè)試集的”測(cè)試“,兩者的"全部"
4)sklearn數(shù)據(jù)集返回值介紹
- load_fetch返回的數(shù)據(jù)類型都是datasets.base.Bunch(字段格式)
- data:特征數(shù)據(jù)數(shù)組
- target:標(biāo)簽數(shù)組
- DESCR:數(shù)據(jù)描述
- feature_names:特征名字
- target_names:標(biāo)簽名字
5)查看數(shù)據(jù)分布
- seaborn介紹
- Seaborn是基于Matplotlib核心庫(kù)對(duì)其進(jìn)行了更高級(jí)的API封裝,可以輕松畫(huà)出更漂亮的圖形。而Seabor的漂亮主要體現(xiàn)在配色更加舒服以及圖形元素的樣式更加細(xì)膩。
- 安裝pip3 install seaborn
- seaborn.Implot()是一個(gè)非常有用的方法,它在繪制二維散點(diǎn)圖的時(shí)候,自動(dòng)完成回歸擬合。
- sns.Implot(x,y): x,y分別代表橫縱坐標(biāo)的列名
- data 關(guān)聯(lián)的數(shù)據(jù)集
- hut 代表按照什么分類方式顯示
- fit_reg 是否進(jìn)行線性擬合
6)數(shù)據(jù)集的劃分
一般數(shù)據(jù)集劃分為兩個(gè)部分:
- 訓(xùn)練數(shù)據(jù):用于訓(xùn)練,構(gòu)建模型
- 測(cè)試數(shù)據(jù):用于模型檢驗(yàn),評(píng)估模型是否有效
劃分比例:
- 訓(xùn)練集:70%~80%
- 測(cè)試集:20%~30%
數(shù)據(jù)集劃分的API
- sklearn.model_selection.train_test_split(arrays,*options)
- 參數(shù):
- x 數(shù)據(jù)集的特征值
- y 數(shù)據(jù)集的標(biāo)簽值
- test_size 測(cè)試?yán)^的大小,一般為float
- random_state 隨機(jī)數(shù)種子。不同的種子會(huì)造成不同的隨機(jī)結(jié)果,相同的種子結(jié)果相同
- return
- x_train,x_test,y_train,y_test
- 參數(shù):
總結(jié)
以上是生活随笔為你收集整理的K-近邻算法之K值的选择(带案例)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: OPS
- 下一篇: amoled led 排列_为何AMOL