Python代碼實(shí)現(xiàn)KNN算法
kNN算法是k-近鄰算法的簡(jiǎn)稱,主要用來(lái)進(jìn)行分類實(shí)踐,主要思路如下:
1.存在一個(gè)訓(xùn)練數(shù)據(jù)集,每個(gè)數(shù)據(jù)都有對(duì)應(yīng)的標(biāo)簽,也就是說(shuō),我們知道樣本集中每一數(shù)據(jù)和他對(duì)應(yīng)的類別。
2.當(dāng)輸入一個(gè)新數(shù)據(jù)進(jìn)行類別或標(biāo)簽判定時(shí),將新數(shù)據(jù)的每個(gè)特征值與訓(xùn)練數(shù)據(jù)集中的每個(gè)數(shù)據(jù)進(jìn)行比較,計(jì)算其到訓(xùn)練數(shù)據(jù)集中每個(gè)點(diǎn)的距離(下列代碼實(shí)現(xiàn)使用的是歐式距離)。
3.然后提取k個(gè)與新數(shù)據(jù)最接近的訓(xùn)練數(shù)據(jù)點(diǎn)所對(duì)應(yīng)的標(biāo)簽或類別。
4.出現(xiàn)次數(shù)最多的標(biāo)簽或類別,記為當(dāng)前預(yù)測(cè)新數(shù)據(jù)的標(biāo)簽或類別。
歐式距離公式為:
distance= sqrt((xA0-XB0)^2+(xA1-XB1)^2+...+(xAn-XBn)^2)(若數(shù)據(jù)有n個(gè)特征項(xiàng))
以下為代碼實(shí)現(xiàn):
#! /usr/bin/python #coding=utf-8 from numpy import * import operator def createDataSet(): group = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])#訓(xùn)練數(shù)據(jù)樣本集合 labels = ['A','A','B','B']#訓(xùn)練數(shù)據(jù)對(duì)應(yīng)的類別 return group,labels ''''' inX:用于分類的輸入向量 dataSet:訓(xùn)練樣本集合 labels:標(biāo)簽向量 k:k-近鄰算法中的k ''' def classify0(inX,dataSet,labels,k): dataSetSize = dataSet.shape[0] #獲取數(shù)組的維度,也就是獲取訓(xùn)練樣本的行數(shù)(樣本數(shù)),若獲取列數(shù),則為shape[1] diffMat = tile(inX,(dataSetSize,1)) - dataSet # tile 表示inX在重復(fù)dataSetSize行,重復(fù)1列。為輸入向量與各個(gè)樣本求取歐式距離做準(zhǔn)備。 sqDiddMat = diffMat**2 #diffMat是輸入向量與我們訓(xùn)練樣本每個(gè)點(diǎn)相減得到的,**2表示值的結(jié)果取平方。 sqDistances = sqDiddMat.sum(axis=1)#默認(rèn)為axis=0,axis=1以后就是將一個(gè)矩陣的每一行向量相加 distances = sqDistances**0.5 #對(duì)結(jié)果進(jìn)行開(kāi)平方,得到輸入向量與每個(gè)訓(xùn)練樣本中點(diǎn)的歐式距離 sorteDistIndicies = distances.argsort()#將距離結(jié)果按照從小到大排序獲得索引值 classcount={} #這是一個(gè)字典,key為類別,value為距離最小的前k個(gè)樣本點(diǎn)里面為該類別的個(gè)數(shù)。 for i in range(k): voteIlabel = labels[sorteDistIndicies[i]]#獲取距離最小的前k個(gè)樣本點(diǎn)對(duì)應(yīng)的label值 classcount[voteIlabel] = classcount.get(voteIlabel,0)+1 #如果之前的樣本點(diǎn)label值與與現(xiàn)在的相同,則累計(jì)加1,否則,此次加1 sorteClassCount = sorted(classcount.iteritems(),key=operator.itemgetter(1),reverse=True) #針對(duì)calsscount獲取對(duì)象的第1個(gè)域的值進(jìn)行降序排序。也就是說(shuō)根據(jù)類別的個(gè)數(shù)從大到小排序。 return sorteClassCount[0][0] #返回排序的字典的第一個(gè)元素的key,即分類后的類別 createDataSet() print classify0([0.9,0.9],group,labels,3)
結(jié)果為:A
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
python實(shí)現(xiàn)根據(jù)窗口標(biāo)題調(diào)用窗口的方法
這篇文章主要介紹了python實(shí)現(xiàn)根據(jù)窗口標(biāo)題調(diào)用窗口的方法,涉及Python操作窗口的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03python單例模式原理與創(chuàng)建方法實(shí)例分析
這篇文章主要介紹了python單例模式原理與創(chuàng)建方法,結(jié)合實(shí)例形式分析了Python單例模式的概念、原理、定義、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2019-10-10PyQt5使用mimeData實(shí)現(xiàn)拖拽事件教程示例解析上
這篇文章主要為大家介紹了PyQt中如何使用mimeData實(shí)現(xiàn)拖拽事件的示例解析過(guò)程,有需要的朋友可以借鑒參考下希望能夠有所幫助,祝大家多多進(jìn)步2021-10-10python實(shí)現(xiàn)復(fù)制大量文件功能
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)復(fù)制大量文件功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-08-08pyinstaller打包單個(gè)exe后無(wú)法執(zhí)行錯(cuò)誤的解決方法
今天小編就為大家分享一篇pyinstaller打包單個(gè)exe后無(wú)法執(zhí)行錯(cuò)誤的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-06-06舉例講解Python設(shè)計(jì)模式編程的代理模式與抽象工廠模式
這篇文章主要介紹了Python編程的代理模式與抽象工廠模式,文中舉了兩個(gè)簡(jiǎn)單的小例子來(lái)說(shuō)明這兩種設(shè)計(jì)模式的思路在Python編程中的體現(xiàn),需要的朋友可以參考下2016-01-01