演算法概述
優點 精度高、對異常值不敏感、無資料輸入假定。
缺點 計算複雜度高、空間複雜度高。
試用資料範圍
數值型和標稱型
工作原理:將新資料的每個特徵與樣本集中資料對應特徵進行比較,計算之間的距離值,選取樣本資料集中前k個最相似的資料。
偽**
計算已知類別資料集中的點與當前點之間的距離
按照距離遞增次序排序
選取與當前點距離最小的k個點
確定前k個點所在類別的出現頻率
返回前k個點出現頻率最高的類別作為當前點的**分類
return group,labels ###上面createdataset函式建立學習資料
def classify0(inx, data, labels, k):
datasetsize = data.shape[0] ###datasetsize=4,為group的行數
diffmat = tile(inx,(datasetsize,1))-data #tile表示將[0,0]資料複製成4行,即,tile(inx,(datasetsize,1))=([[0, 0],[0, 0], [0, 0],[0, 0]]),在與data做減法
sqdiffmat=diffmat**2 ###計算上述**求差後的每個值的平方和
distances = sum(sqdiffmat,axis=1) ###sqdiffmat為四行兩列的資料,按照行求和,得到每行的和
sorteddistindicies = distances.argsort()
classcount={}
for i in range(k):
voteilabel=labels[sorteddistindicies[i]]
classcount[voteilabel]=classcount.get(voteilabel,0)+1
sortedclasscount=sorted(classcount.items(),
key=operator.itemgetter(1),reverse=true)
return sortedclasscount[0][0]
group,labels=createdataset()
t=classify0([0,0],group,labels,3)
print(t)
上述程式的執行過程資料如下所示:
輸入資料及第17行**的執行結果如下:
python tile函式的作用是將資料按照一定的規則進行複製
用法可參考:
18,19行**輸出如下:
20,21行**輸出如下:
argsort()函式按照列表索引排序,從小到大的排序,distances中第3個之最小,索引值為2,最大的值索引為0
具體用法可以參考:
23-25行的for迴圈是為了統計前k個sorteddistindicies中每個labels出現的次數,如本程式中k=3,即統計前3個sorteddistindicies索引對應的labes出現的次數。
程式中使用了字典的get()函式,該函式的作用是返回指定鍵的值,沒有返回預設值,用法可以參考:
統計結果如下:
程式中26,27行**執行的作用是將字典變成列表,然後按照運算子模組itemgetter方法,按照第二個元素的次序對元組進行排序,此處為逆序,即按照從最大到最小次序排序,最後返回發生頻率最高的元素標籤。
sorted()函式方法參考:
注意此處使用items()方法。
本人在學習機器學習過程中對程式的一點記錄,由於剛接觸python會有很多的不懂,如有錯誤,請指正,謝謝!
《機器學習實戰》 K 近鄰演算法
基本原理 通過計算新資料與給定的樣本資料之間的距離,來確定相似度排名 然後取前k個最相似的樣本,統計這k 一般不大於20 個樣本中出現最多的分類,設為新資料的分類。新資料,訓練樣本集,樣本資料標籤 即分類 最近鄰 前k個最相似資料 最近鄰標籤 演算法實施 首先提取要比較的特徵,確定各特徵的權重,進行...
機器學習實戰 K 近鄰演算法
簡單的說,k 近鄰演算法採用測量不同特徵值之間的距離辦法進行分類.收集資料 可以使用任何方法。準備資料 距離計算所需要的數值,最好是結構化的資料格式。分析資料 可以使用任何方法。訓練演算法 此步驟不適用於k 近鄰演算法。測試演算法 計算錯誤率。使用演算法 首先需要輸入樣本資料和結構化的輸出結果,然後...
機器學習實戰 k 近鄰演算法
本系列是基於 機器學習實戰 這本書做的讀書筆記,原書採用python2作為工具,我則將原書 改為用python3編寫並記錄在此系列中。我將把書中對這些機器學習演算法的定義謄上,然後寫下自己對該演算法的通俗理解,之後貼出書中演算法清單中的 本書講解的第乙個機器學習演算法是k 近鄰演算法 knn 它的工...