KNN與交叉驗(yàn)證

KNN分類(lèi)算法

分類(lèi):將一個(gè)未知?dú)w類(lèi)的樣本歸屬到某一個(gè)已知的類(lèi)群中。
預(yù)測(cè):可以根據(jù)數(shù)據(jù)的規(guī)律計(jì)算出一個(gè)未知的數(shù)據(jù)旗芬。
概念:
??簡(jiǎn)單地說(shuō),K-近鄰算法采用測(cè)量不同特征值之間的距離方法進(jìn)行分類(lèi)(k-Nearest Neighbor,KNN)弯菊。
工作原理:
??設(shè)有一個(gè)集合,已知集合的數(shù)據(jù)及其所對(duì)應(yīng)的標(biāo)簽踱阿,輸入新的無(wú)標(biāo)簽數(shù)據(jù)管钳,將其與已知集合的數(shù)據(jù)特征進(jìn)行比較,選出最接近的K個(gè)數(shù)據(jù)特征的標(biāo)簽软舌,出現(xiàn)次數(shù)最多的標(biāo)簽即為無(wú)標(biāo)簽數(shù)據(jù)的標(biāo)簽才漆。
例子:

# 加載模塊
from sklearn.neighbors import KNeighborsClassifier
import sklearn.datasets as datasets
from sklearn.model_selection import train_test_split
# 加載數(shù)據(jù)
iris = datasets.load_iris()
# 取得特征
feature = iris.data
# 取得標(biāo)簽
target = iris.target
# 拆分出訓(xùn)練集的特征與標(biāo)簽和測(cè)試集的特征與標(biāo)簽
x_train,x_test,y_train,y_test = train_test_split(feature,target,test_size=0.2,random_state=2020)
# 將模型實(shí)例化
knn = KNeighborsClassifier(n_neighbors=9)
# 訓(xùn)練模型;特征形狀的維度必須為二維
knn.fit(x_train,y_train)
# 打印測(cè)試集的實(shí)際標(biāo)簽和預(yù)測(cè)標(biāo)簽
print('真實(shí)的分類(lèi)結(jié)果:',y_test)
print('模型分類(lèi)的結(jié)果:',knn.predict(x_test))
真實(shí)的分類(lèi)結(jié)果: [2 0 1 1 1 2 2 1 0 0 2 2 0 2 2 0 1 1 2 0 0 2 1 0 2 1 1 1 0 0]
模型分類(lèi)的結(jié)果: [2 0 1 1 1 2 2 1 0 0 2 1 0 2 2 0 1 1 2 0 0 2 2 0 2 1 1 1 0 0]
# 對(duì)模型的精度進(jìn)行打分
knn.score(x_test,y_test)
0.9333333333333333

模型的超參數(shù):
??如果算法模型類(lèi)的參數(shù)如果發(fā)生數(shù)值的變化佛点,直接會(huì)影響模型的精度栽烂,則該參數(shù)就叫做模型的超參數(shù)。

學(xué)習(xí)曲線(xiàn)尋找最優(yōu)的k值
??窮舉不同的k值

import numpy as np
ks = [] #保存模型使用過(guò)的k值
scores = [] #保存模型對(duì)應(yīng)k值的分值
for k in range(2,50,2):
    knn = KNeighborsClassifier(n_neighbors=k).fit(x_train,y_train)
    score = knn.score(x_test,y_test)
    ks.append(k)
    scores.append(score)
arr_ks = np.array(ks)
arr_scores = np.array(scores)
arr_ks,arr_scores
(array([ 2,  4,  6,  8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34,
        36, 38, 40, 42, 44, 46, 48]),
 array([0.93 , 0.945, 0.945, 0.95 , 0.95 , 0.95 , 0.955, 0.96 , 0.955,
        0.955, 0.955, 0.95 , 0.955, 0.955, 0.95 , 0.955, 0.955, 0.955,
        0.96 , 0.955, 0.955, 0.955, 0.96 , 0.96 ]))
np.argmax(arr_scores) #找出arr_scores數(shù)組中最大值對(duì)應(yīng)的下標(biāo)
arr_ks[np.argmax(arr_scores)]#找出最優(yōu)的模型參數(shù)的值

k的取值問(wèn)題:學(xué)習(xí)曲線(xiàn)與交叉驗(yàn)證選取K值

??①K值較小恋脚,則模型復(fù)雜度較高腺办,容易發(fā)生過(guò)擬合,學(xué)習(xí)的估計(jì)誤差會(huì)增大糟描,預(yù)測(cè)結(jié)果對(duì)近鄰的實(shí)例點(diǎn)非常敏感怀喉。
??②K值較大可以減少學(xué)習(xí)的估計(jì)誤差,但是學(xué)習(xí)的近似誤差會(huì)增大船响,與輸入實(shí)例較遠(yuǎn)的訓(xùn)練實(shí)例也會(huì)對(duì)預(yù)測(cè)起作用躬拢,使預(yù)測(cè)發(fā)生錯(cuò)誤,k值增大模型的復(fù)雜度會(huì)下降见间。
??③在應(yīng)用中聊闯,k值一般取一個(gè)比較小的值,通常采用交叉驗(yàn)證法來(lái)來(lái)選取最優(yōu)的K值米诉。

K值的交叉驗(yàn)證

目的:
??選出最為適合的模型超參數(shù)的取值菱蔬,然后將超參數(shù)的值作用到模型的創(chuàng)建中。
思想:
??將樣本的訓(xùn)練數(shù)據(jù)交叉的拆分出不同的訓(xùn)練集和驗(yàn)證集史侣,使用交叉拆分出不同的訓(xùn)練集和驗(yàn)證集測(cè)分別試模型的精準(zhǔn)度拴泌,然后求出的精準(zhǔn)度的均值就是此次交叉驗(yàn)證的結(jié)果。將交叉驗(yàn)證作用到不同的超參數(shù)中惊橱,選取出精準(zhǔn)度最高的超參數(shù)作為模型創(chuàng)建的超參數(shù)即可蚪腐。
實(shí)現(xiàn)思路:
??①將訓(xùn)練數(shù)據(jù)平均分割成K個(gè)等份
??②使用1份數(shù)據(jù)作為驗(yàn)證數(shù)據(jù),其余作為訓(xùn)練數(shù)據(jù)
??③計(jì)算驗(yàn)證準(zhǔn)確率
??④使用不同的測(cè)試集税朴,重復(fù)2回季、3步驟家制,直到所有等份都作為過(guò)訓(xùn)練數(shù)據(jù)
??⑤對(duì)準(zhǔn)確率做平均,作為對(duì)未知數(shù)據(jù)預(yù)測(cè)準(zhǔn)確率的估計(jì)

ks = []
scores = []
for k in range(2,50):
    knn = KNeighborsClassifier(n_neighbors=k)
    score = cross_val_score(knn,x_train,y_train,cv=5).mean() # cv表示五等分
    ks.append(k)
    scores.append(score)
arr_ks = np.array(ks)
arr_scores = np.array(scores)

與未使用交叉驗(yàn)證的學(xué)習(xí)曲線(xiàn)的代碼的區(qū)別為
knn = KNeighborsClassifier(n_neighbors=k)score = cross_val_score(knn,x_train,y_train,cv=5).mean()泡一。因?yàn)閒it函數(shù)會(huì)使模型完全符合訓(xùn)練數(shù)據(jù)慰丛,所以交叉驗(yàn)證并未使用fit函數(shù)。
交叉驗(yàn)證的cross_val_score函數(shù)(cv=5)相當(dāng)于進(jìn)行了5次用4/5的訓(xùn)練集數(shù)據(jù)進(jìn)行訓(xùn)練瘾杭,1/5的數(shù)據(jù)進(jìn)行測(cè)試诅病,最后給出5個(gè)精度。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末粥烁,一起剝皮案震驚了整個(gè)濱河市贤笆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌讨阻,老刑警劉巖芥永,帶你破解...
    沈念sama閱讀 221,198評(píng)論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異钝吮,居然都是意外死亡埋涧,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門(mén)奇瘦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)棘催,“玉大人,你說(shuō)我怎么就攤上這事耳标〈及樱” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,643評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵次坡,是天一觀(guān)的道長(zhǎng)呼猪。 經(jīng)常有香客問(wèn)我,道長(zhǎng)砸琅,這世上最難降的妖魔是什么宋距? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,495評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮症脂,結(jié)果婚禮上谚赎,老公的妹妹穿的比我還像新娘。我一直安慰自己摊腋,他們只是感情好沸版,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著兴蒸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪细办。 梳的紋絲不亂的頭發(fā)上橙凳,一...
    開(kāi)封第一講書(shū)人閱讀 52,156評(píng)論 1 308
  • 那天蕾殴,我揣著相機(jī)與錄音,去河邊找鬼岛啸。 笑死钓觉,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的坚踩。 我是一名探鬼主播荡灾,決...
    沈念sama閱讀 40,743評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼瞬铸!你這毒婦竟也來(lái)了批幌?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,659評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤嗓节,失蹤者是張志新(化名)和其女友劉穎荧缘,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體拦宣,經(jīng)...
    沈念sama閱讀 46,200評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡截粗,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了鸵隧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片绸罗。...
    茶點(diǎn)故事閱讀 40,424評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖豆瘫,靈堂內(nèi)的尸體忽然破棺而出从诲,到底是詐尸還是另有隱情,我是刑警寧澤靡羡,帶...
    沈念sama閱讀 36,107評(píng)論 5 349
  • 正文 年R本政府宣布系洛,位于F島的核電站,受9級(jí)特大地震影響略步,放射性物質(zhì)發(fā)生泄漏描扯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評(píng)論 3 333
  • 文/蒙蒙 一趟薄、第九天 我趴在偏房一處隱蔽的房頂上張望绽诚。 院中可真熱鬧,春花似錦杭煎、人聲如沸恩够。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,264評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蜂桶。三九已至,卻和暖如春也切,著一層夾襖步出監(jiān)牢的瞬間扑媚,已是汗流浹背腰湾。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,390評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留疆股,地道東北人费坊。 一個(gè)月前我還...
    沈念sama閱讀 48,798評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像旬痹,于是被迫代替她去往敵國(guó)和親附井。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評(píng)論 2 359