KNN-----Python程序学习(一)
什么是KNN?(概述)
K最近鄰(kNN,k-NearestNeighbor)分類算法是數據挖掘分類技術中最簡單的方法之一。所謂K最近鄰,就是k個最近的鄰居的意思,說的是每個樣本都可以用它最接近的k個鄰居來代表。Cover和Hart在1968年提出了最初的鄰近算法。
KNN是一種分類(classification)算法,它輸入基于實例的學習(instance-based learning),屬于懶惰學習(lazy learning)即KNN沒有顯式的學習過程,也就是說沒有訓練階段,數據集事先已有了分類和特征值,待收到新樣本后直接進行處理。與急切學習(eager learning)相對應。
簡單的說,k-近鄰算法采用測量不同特征值之間的距離方法進行分類。
思路是:如果一個樣本在特征空間中的k個最鄰近的樣本中的大多數屬于某一個類別,則該樣本也劃分為這個類別。KNN算法中,所選擇的鄰居都是已經正確分類的對象。該方法在定類決策上只依據最鄰近的一個或者幾個樣本的類別來決定待分樣本所屬的類別。
優(yōu)缺點以及適用數據范圍
優(yōu)點:
- 精度高
- 對異常值不敏感
- 無數據輸入設定
缺點:
- 計算復雜度高
- 空間復雜度高
適用數據范圍:
- 數值型和標稱型
工作原理
存在一個樣本數據集合, 也稱作訓練樣本集, 并且樣本集中每個數據都存在標簽,即我們知道樣本集中每一數據 與所屬分類的對應關系。 輸人沒有標簽的新數據后, 將新數據的每個特征與樣本集中數據對應的 特征進行比較,然后算法提取樣本集中特征最相似數據( 最近鄰) 的分類標簽。一般來說,我們 只選擇樣本數據集中前k個最相似的數據, 這就是k-近鄰算法中k的出處,通常k是不大于20的整數。 最后,選擇k個最相似數據中出現(xiàn)次數最多的分類,作為新數據的分類。
k-近鄰算法的一般流程
(1)收集數據:可以使用任何方法。
(2)準備數據:距離計算所需要的數值,最好是結構化的數據格式。
(3)分析數據:可以使用任何方法。
(4)訓練算法:此步驟不適用于k-近鄰算法。
(5)測試算法:計算錯誤率。
(6)使用算法:首先需要輸入樣本數據和結構化的輸出結果,然后運行女-近鄰算法判定輸 入數據分別屬于哪個分類,最后應用對計算出的分類執(zhí)行后續(xù)的處理。
一般代碼
from numpy import * import operator from os import listdirdef createDataSet():group = array([[1.0, 1.1], [1.0, 1.0], [0, 0], [0, 0.1]])labels = ['A', 'A', 'B', 'B']return group, labelsgroup, labels = createDataSet() # print(group) # print(labels)def classify0(inX, dataSet, labels, k):dataSetSize = dataSet.shape[0]diffMat = tile(inX, (dataSetSize, 1)) - dataSet sqDiffMat = diffMat**2sqDistances = sqDiffMat.sum(axis=1)distances = sqDistances ** 0.5# 距離采用歐氏距離,計算*xA*和*xB*之間的距離sortedDistIndicies = distances.argsort()classCount = {}for i in range(k):voteIlabel = labels[sortedDistIndicies[i]]classCount[voteIlabel] = classCount.get(voteIlabel, 0) + 1sortedClassCount = sorted(classCount.items(), key=operator.itemgetter(1), reverse=True)return sortedClassCount[0][0]# 可以輸入一個點[0,0]進行測試 a = classify0([0, 0], group, labels, 3) print(a) tile():重復inX的維度sorted(iterable, key=None, reverse=False) iterable -- 可迭代對象。 key -- 主要是用來進行比較的元素,只有一個參數,具體的函數的參數就是取自于可迭代對象中,指定可迭代對象中的一個元素來進行排序。 reverse -- 排序規(guī)則, reverse = True 降序, reverse = False 升序(默認)。歐式距離:
總結
以上是生活随笔為你收集整理的KNN-----Python程序学习(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: scatter() 散点图样式
- 下一篇: python自定义函数添加到路径