K最近鄰(k-Nearest Neighbor) 淺析

K最近鄰(k-Nearest Neighbor,KNN)分類算法的核心思想是如果一個(gè)樣本在特征空間中的k個(gè)最相似(即特征空間中最鄰近)的樣本中的大多數(shù)屬于某一個(gè)類別比勉,則該樣本也屬于這個(gè)類別躬充。KNN算法可用于多分類突硝,KNN算法不僅可以用于分類,還可以用于回歸苛骨。通過找出一個(gè)樣本的k個(gè)最近鄰居稼钩,將這些鄰居的屬性的平均值賦給該樣本顾稀,作為預(yù)測值达罗。

一坝撑、kNN概念描述

kNN算法又稱為k最近鄰(k-nearest neighbor classification)分類算法。所謂的k最近鄰粮揉,就是指最接近的k個(gè)鄰居(數(shù)據(jù))巡李,即每個(gè)樣本都可以由它的K個(gè)鄰居來表達(dá)。
kNN算法的核心思想是扶认,在一個(gè)含未知樣本的空間侨拦,可以根據(jù)離這個(gè)樣本最鄰近的k個(gè)樣本的數(shù)據(jù)類型來確定樣本的數(shù)據(jù)類型。
該算法涉及3個(gè)主要因素:訓(xùn)練集辐宾、距離與相似的衡量狱从、k的大信蚵;主要考慮因素:距離與相似度季研;

二敞葛、舉例說明

右圖中,綠色圓要被決定賦予哪個(gè)類与涡,是紅色三角形還是藍(lán)色四方形惹谐?
KNN的算法過程是是這樣的:


最小的圈K=3,第二個(gè)圈K=5
從上圖中我們可以看到驼卖,圖中的數(shù)據(jù)集是良好的數(shù)據(jù)氨肌,即都打好了label,一類是藍(lán)色的正方形酌畜,一類是紅色的三角形怎囚,那個(gè)綠色的圓形是我們待分類的數(shù)據(jù)。
如果K=3檩奠,那么離綠色點(diǎn)最近的有2個(gè)紅色三角形和1個(gè)藍(lán)色的正方形桩了,這3個(gè)點(diǎn)投票,于是綠色的這個(gè)待分類點(diǎn)屬于紅色的三角形埠戳。
如果K=5井誉,那么離綠色點(diǎn)最近的有2個(gè)紅色三角形和3個(gè)藍(lán)色的正方形,這5個(gè)點(diǎn)投票整胃,于是綠色的這個(gè)待分類點(diǎn)屬于藍(lán)色的正方形颗圣。(參考 酷殼的 K Nearest Neighbor 算法 )
我們可以看到,KNN本質(zhì)是基于一種數(shù)據(jù)統(tǒng)計(jì)的方法屁使!其實(shí)很多機(jī)器學(xué)習(xí)算法也是基于數(shù)據(jù)統(tǒng)計(jì)的在岂。

三、kNN算法的特點(diǎn)

KNN算法不僅可以用于分類蛮寂,還可以用于過渡蔽午,比如在兩個(gè)色度之間取過渡色。
KNN算法當(dāng)前主要使用加權(quán)投票法酬蹋,即根據(jù)距離的遠(yuǎn)近及老,對近鄰的投票進(jìn)行加權(quán),距離越近則權(quán)重越大(權(quán)重為距離平方的倒數(shù))范抓。
優(yōu)點(diǎn):易于實(shí)現(xiàn)骄恶,無需估計(jì)參數(shù),無需訓(xùn)練匕垫,支持增量學(xué)習(xí)僧鲁,能對超多邊形的復(fù)雜決策空間建模;

KNN 算法的主要缺點(diǎn)是, 當(dāng)訓(xùn)練樣本數(shù)量很大時(shí)將導(dǎo)致很高的計(jì)算開銷。KNN 算法是懶散的分類算法, 對于分類所需的計(jì)算都推遲到分類時(shí)才進(jìn)行, 在其分類器中存儲有大量的樣本向量, 在未知類別樣本需要分類時(shí), 再計(jì)算和所有存儲樣本的距離, 對于高維文本向量或樣本集規(guī)模較大的情況, 其時(shí)間和空間復(fù)雜度較高寞秃。

四斟叼、sk-learn中的KNN

sklearn.neighbors可以處理 Numpy 數(shù)組或 scipy.sparse矩陣作為其輸入。 對于密集矩陣春寿,大多數(shù)可能的距離度量都是支持的犁柜。對于稀疏矩陣,支持搜索任意的 Minkowski 度量堂淡。
盡管它簡單馋缅,但最近鄰算法已經(jīng)成功地適用于很多的分類和回歸問題,例如手寫數(shù)字或衛(wèi)星圖像的場景绢淀。 作為一個(gè) non-parametric(非參數(shù)化)方法萤悴,它經(jīng)常成功地應(yīng)用于決策邊界非常不規(guī)則的分類情景下。

1皆的、為了完成找到兩組數(shù)據(jù)集中最近鄰點(diǎn)的簡單任務(wù), 可以使用 sklearn.neighbors 中的無監(jiān)督算法:
from sklearn.neighbors import NearestNeighbors
import numpy as np
#生成數(shù)組
X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
nbrs = NearestNeighbors(n_neighbors=2, algorithm='ball_tree').fit(X)
distances, indices = nbrs.kneighbors(X)
print(indices)
print(distances)
'''
輸出:
[[0 1]
 [1 0]
 [2 1]
 [3 4]
 [4 3]
 [5 4]]
[[0.         1.        ]
 [0.         1.        ]
 [0.         1.41421356]
 [0.         1.        ]
 [0.         1.        ]
 [0.         1.41421356]]
'''
2覆履、利用KNeighborsClassifier 分析鳶尾花的數(shù)據(jù)集
from sklearn import datasets
#導(dǎo)入內(nèi)置數(shù)據(jù)集模塊
from sklearn.neighbors import KNeighborsClassifier
#導(dǎo)入sklearn.neighbors模塊中KNN類
import numpy as np
iris=datasets.load_iris()
# print(iris)
#導(dǎo)入鳶尾花的數(shù)據(jù)集,iris是一個(gè)數(shù)據(jù)集费薄,內(nèi)部有樣本數(shù)據(jù)
iris_x=iris.data
iris_y=iris.target

indices = np.random.permutation(len(iris_x))
#permutation接收一個(gè)數(shù)作為參數(shù)(150),產(chǎn)生一個(gè)0-149一維數(shù)組硝全,只不過是隨機(jī)打亂的
iris_x_train = iris_x[indices[:-10]]
 #隨機(jī)選取140個(gè)樣本作為訓(xùn)練數(shù)據(jù)集
iris_y_train = iris_y[indices[:-10]]
# 并且選取這140個(gè)樣本的標(biāo)簽作為訓(xùn)練數(shù)據(jù)集的標(biāo)簽
iris_x_test = iris_x[indices[-10:]]
# 剩下的10個(gè)樣本作為測試數(shù)據(jù)集
iris_y_test = iris_y[indices[-10:]]
# 并且把剩下10個(gè)樣本對應(yīng)標(biāo)簽作為測試數(shù)據(jù)及的標(biāo)簽

knn = KNeighborsClassifier()
# 定義一個(gè)knn分類器對象
knn.fit(iris_x_train, iris_y_train)
# 調(diào)用該對象的訓(xùn)練方法,主要接收兩個(gè)參數(shù):訓(xùn)練數(shù)據(jù)集及其樣本標(biāo)簽
iris_y_predict = knn.predict(iris_x_test)
# 調(diào)用該對象的測試方法楞抡,主要接收一個(gè)參數(shù):測試數(shù)據(jù)集
score = knn.score(iris_x_test, iris_y_test, sample_weight=None)
# 調(diào)用該對象的打分方法伟众,計(jì)算出準(zhǔn)確率


print('iris_y_predict = ')
print(iris_y_predict)
# 輸出測試的結(jié)果
print('iris_y_test = ')
print(iris_y_test)
# 輸出原始測試數(shù)據(jù)集的正確標(biāo)簽,以方便對比
print('Accuracy:', score)
# 輸出準(zhǔn)確率計(jì)算結(jié)果</span>
'''
iris_y_predict = 
[2 0 2 2 2 0 0 1 2 0]
iris_y_test = 
[2 0 2 2 2 0 0 1 1 0]
Accuracy: 0.9
'''

end...

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末召廷,一起剝皮案震驚了整個(gè)濱河市凳厢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌竞慢,老刑警劉巖先紫,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異筹煮,居然都是意外死亡遮精,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門败潦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來本冲,“玉大人,你說我怎么就攤上這事变屁⊙劭。” “怎么了意狠?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵粟关,是天一觀的道長。 經(jīng)常有香客問我,道長闷板,這世上最難降的妖魔是什么澎灸? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮遮晚,結(jié)果婚禮上性昭,老公的妹妹穿的比我還像新娘。我一直安慰自己县遣,他們只是感情好糜颠,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著萧求,像睡著了一般其兴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上夸政,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天元旬,我揣著相機(jī)與錄音,去河邊找鬼守问。 笑死匀归,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的耗帕。 我是一名探鬼主播穆端,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼仿便!你這毒婦竟也來了徙赢?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤探越,失蹤者是張志新(化名)和其女友劉穎狡赐,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體钦幔,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡枕屉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了鲤氢。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片搀擂。...
    茶點(diǎn)故事閱讀 38,018評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖卷玉,靈堂內(nèi)的尸體忽然破棺而出哨颂,到底是詐尸還是另有隱情,我是刑警寧澤相种,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布威恼,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏箫措。R本人自食惡果不足惜腹备,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望斤蔓。 院中可真熱鬧植酥,春花似錦、人聲如沸弦牡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽驾锰。三九已至喊儡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間稻据,已是汗流浹背艾猜。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留捻悯,地道東北人匆赃。 一個(gè)月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子宝冕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 分類算法之K最近鄰算法(KNN)的Python實(shí)現(xiàn) KNN的定義 所謂K近鄰算法,即是給定一個(gè)訓(xùn)練數(shù)據(jù)集瞬项,對新的輸...
    盜夢者_(dá)56f2閱讀 3,270評論 0 2
  • 原文章為scikit-learn中"用戶指南"-->"監(jiān)督學(xué)習(xí)的第六節(jié):Nearest Neighbors"###...
    HabileBadger閱讀 7,108評論 0 7
  • 文言傳:《見pdf》元者,善之長也何荚;善 == 》孟子:可欲之謂善囱淋。柏拉圖:真善美同一。位格:能知餐塘,能有感情妥衣,能做選...
    用行舍藏閱讀 211評論 0 0
  • 需求:在某頁面add的cookie在另一個(gè)頁面卻獲取不到〗渖担——難道cookie只對當(dāng)前頁面有效税手?學(xué)習(xí)后發(fā)現(xiàn),coo...
    拾壹北閱讀 8,705評論 1 8
  • 今天早上,我親愛的不翩,老婆兵扬。 我要去工作了麻裳,我特別不想沒有錢的日子,所以我總是把錢帶在身上周霉,還有,我自己總是把生活亚皂,...
    lygly9閱讀 113評論 0 0