<機(jī)器學(xué)習(xí)實(shí)戰(zhàn)>筆記---k近鄰算法

本文所有代碼均可在Pycharm編譯運(yùn)行
Python版本:3.6.2
//kNN.py
from numpy import *
import operator

def createDataSet():
    group = array([[1.0, 1.1], [1.0, 1.0], [0, 0], [0, 0.1]])
    labels = ['A', 'A', 'B', 'B']
    return group, labels

def classify0(inX, dataSet, labels, k):
    dataSetSize = dataSet.shape[0]
    diffMat = tile(inX, (dataSetSize, 1)) - dataSet
    sqDiffMat = diffMat**2
    sqDistances = sqDiffMat.sum(axis=1)
    distances = sqDistances**0.5
    sortedDisIndicies = distances.argsort()    
    classCount = {}
    for i in range(k):
        voteIlabel = lables[sortedDisIndicies[i]]
        classCount[voteIlabel] = classCount.get(voteIlabel, 0) + 1
    sortedClassCount = sorted(classCount.items(), key=operator.itemgetter(1), reverse=True)
    return sortedClassCount[0][0]

以下是預(yù)測(cè)[0, 0]屬于哪個(gè)分類

//TestkNN.py
import kNN

group, labels = kNN.createDataSet()

result = kNN.classify0([0, 0], group, labels, 3)

print(result)

//輸出
B

詳細(xì)說(shuō)明:

createDataSet函數(shù)用來(lái)創(chuàng)建一個(gè)訓(xùn)練樣本集(group),以及標(biāo)簽向量(labels)。

classify0函數(shù)4個(gè)輸入?yún)?shù),從左到右分別是:①用于分類的輸入向量,②訓(xùn)練樣本集,③標(biāo)簽向量,④用于選擇最近鄰居的數(shù)目。

Numbers作圖

該算法的思想是
用于分類的輸入向量與訓(xùn)練樣本集的所有向量的距離進(jìn)行計(jì)算;
找出與輸入向量最近的k個(gè)近鄰;
統(tǒng)計(jì)這k個(gè)近鄰分別屬于哪一個(gè)分類,同時(shí)統(tǒng)計(jì)每個(gè)分類的數(shù)量,存放在字典中;
逆排序找出最多數(shù)量那個(gè)分類,邏輯上得出,輸入向量與這些近鄰?fù)悺?/p>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容