機械學習- 算法- k-近鄰算法 knn算法 -classify0函數(shù)詳解

我來自Android開發(fā)人員,剛剛接觸的機械學習绒瘦,整理了k-近鄰算法的classify0函數(shù)的具體意義,以及一步一步的步驟講解惰帽,望對大家有用。由于初寫券册,如有紕漏或者錯誤垂涯,歡迎指出航邢。

如膳殷,您覺得文章有用,可以分享給小伙伴們一起進步成長赚窃。需 附加原文地址
鏈接 http://www.reibang.com/p/551fb62a2b94 收藏點贊勒极,是對作者最大的支持,核動力的發(fā)動機

先上運行圖

如果把 # 零 初始化的數(shù)據(jù)代入次函數(shù)键痛,結果應該是'A'
數(shù)據(jù)來自于匾七,自己編寫的,用于學習測試用丁频,準確度與文章的理解程度邑贴,望大家提出我會積極改進。

運算結果

近鄰算法的 計算公式精髓胁勺,下方會 一步一步 講解哦独旷!

import numpy as np
#用于分類的輸入向量是inX寥裂,輸入的訓練樣本集為dataSet案疲,
#標簽向量為 labels 褐啡,最后的參數(shù) k 表示用于選擇最近鄰居的數(shù)目,其中標簽向量的元素數(shù)目和矩
#陣 dataSet 的行數(shù)相同备畦。
def classify0(inX,dataSet,labels,k):
    # 獲取 數(shù)組 形狀的 第一個 參數(shù) a=[[1,2],[1,2],[1,2]]  a.shape = [3,2] a.shape[0] = 3
# 一懂盐、
    dataSetSize = dataSet.shape[0]
    # tile 代表了inX,復制為dataSetSize行拌喉,1列的數(shù)組
# 二俐银、
    diffMat = np.tile(inX,(dataSetSize,1))-dataSet
    # 平方
    sqDiffMat = diffMat**2
    # axis 等于 1 是將 矩陣的每一行 相加
    sqDistances = sqDiffMat.sum(axis=1)
    # 開方
    distances = sqDistances**0.5
# 三、
    # 從小到大 排列
    sortedDistances = distances.argsort()
    classCount = {}
# 四田藐、求出來 最低距離 的 labels結果售躁,存放在classCount 中
    for i in range(k):
        voteIlabel =labels[sortedDistances[i]]
        classCount[voteIlabel] = classCount.get(voteIlabel,0)+1
    sortedClassCount = sorted(classCount.items(),key=operator.itemgetter(1),reverse=True)
    return sortedClassCount[0][0]
# 零   初始化 clasify0  中所需的數(shù)據(jù)
inX = [2,3]
# 限度 2,2為中介,距離小于 為不喜歡A回窘,大于為喜歡B
dataSet = np.array([[1,2],
          [3,5],
          [1.5,2.5],
          [2.5,3.5]])
labels = ['A','B','A','B']
k=3
# 一市袖、 求出 dataSet 訓練數(shù)據(jù)的 行向量
dataSetSize = dataSet.shape[0] = 4
1.1
二苍碟、 復制 輸入inX 行向量  與dataSet 的 行大小一致 ,由上方1.1圖可知舷丹,向量兩點的最短距離為 1.0= (inX 行向量 - dataSet 的行向量)
diffMat  = np.tile(inX,(dataSetSize,1))  - dataSet= 
[[2,3],   - [1,2],     =  [1,1]
[2,3],  - [3,5],       =  [-1,-2]
[2,3],  - [1.5,2.5],   =   [0.5,0.5]
[2,3]] - [2.5,3.5]]    =  [-0.5,-0.5]
# 1.1 = 將 差集 平方 雖有  下一步 行向量相加
sqDiffMat = diffMat**2 
# 1.2 = 行向量相加
sqDistances  = sqDiffMat.sum(axis=1) (行向量相加)
[(1^2 + 1^2),
...]
# 1.3 = 所得和集  再 開方(**0.5 相當于開方)蜓肆, 即  求出來了最短距離是多少谋币、 即上方1.1 圖的 d
distances  = sqDistances**0.5 = 
[((2)**0.5)   ≈  1.41421
((5)**0.5)    ≈  2.23606
((0.5)**0.5)  ≈  0.707106
((0.5)**0.5)  ≈  0.707106 
...]
# 三症概、
# argsort : 將distacnces中的元素從小到大排列彼城,提取其對應的index(索引),然后輸出到sortedDistances 
# 即 sortedDistances[0] = distacnces[2] = 0.707106
sortedDistances = distacnces.argsort() = 
[2,3,0,1] 
# 四
# 假設 k=3 i = 0 第一層循環(huán) 的結果為
voteIlabel =labels[sortedDistances[i]] = 'A'
classCount[voteIlabel] = classCount.get(voteIlabel,0)+1 = 1 (classCount索引為'A')
# 將遍歷存儲的 classCount = [('A', 1)]  排序调炬,按照
sortedClassCount = sorted(classCount.items(),key=operator.itemgetter(1),reverse=True)
#   返回第一個 最相近的 值司抱,作為結果, 即最相近的近鄰算法
return sortedClassCount[0][0]

PS:上方算法內容來自于 機器學習實站 一書,對于一些難理解或者一些知識點的記錄照棋,并附加上自己的見解,注釋解釋等溶锭。如符隙,更想快速的學習,可以直接閱讀本書

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市丽蝎,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌红省,老刑警劉巖国觉,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件麻诀,死亡現(xiàn)場離奇詭異缸逃,居然都是意外死亡厂抽,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進店門昭殉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來挪丢,“玉大人卢厂,你說我怎么就攤上這事∩骱悖” “怎么了融柬?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長越除。 經(jīng)常有香客問我外盯,道長,這世上最難降的妖魔是什么孩擂? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任肋殴,我火速辦了婚禮坦弟,結果婚禮上,老公的妹妹穿的比我還像新娘酿傍。我一直安慰自己,他們只是感情好氯析,可當我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布掩缓。 她就那樣靜靜地躺著,像睡著了一般你辣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上宴凉,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天弥锄,我揣著相機與錄音蟆沫,去河邊找鬼。 笑死图仓,一個胖子當著我的面吹牛但绕,可吹牛的內容都是我干的惶看。 我是一名探鬼主播捏顺,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼纬黎!你這毒婦竟也來了幅骄?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤本今,失蹤者是張志新(化名)和其女友劉穎拆座,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體冠息,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡挪凑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了逛艰。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片躏碳。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡散怖,死狀恐怖菇绵,靈堂內的尸體忽然破棺而出肄渗,到底是詐尸還是另有隱情,我是刑警寧澤咬最,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布翎嫡,位于F島的核電站,受9級特大地震影響永乌,放射性物質發(fā)生泄漏惑申。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一铆遭、第九天 我趴在偏房一處隱蔽的房頂上張望硝桩。 院中可真熱鬧,春花似錦枚荣、人聲如沸碗脊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽衙伶。三九已至,卻和暖如春害碾,著一層夾襖步出監(jiān)牢的瞬間矢劲,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工慌随, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留芬沉,地道東北人。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓阁猜,卻偏偏與公主長得像丸逸,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子剃袍,可洞房花燭夜當晚...
    茶點故事閱讀 45,573評論 2 359

推薦閱讀更多精彩內容