機器學習手記 6 KNN演算法

2021-06-26 07:18:11 字數 1282 閱讀 5219

knn演算法,是監督學習,

已知一組訓練資料,知道多個特徵對應值和所屬類別,

然後新增測試資料,計算測試樣本在多特徵空間上到各類別訓練資料的歐式距離,

距離那個類別訓練資料集的距離小,就屬於那個類別。

需要指出這個對於訓練資料集的選擇很重要,如果某類樣本很多,另一類樣本較少,這會對分類結果有影響。

另外knn演算法需要計算到每個訓練資料的歐式距離然後疊加,計算量較大

# -*- coding: utf-8 -*-

from numpy import *

import operator

#建立訓練資料集,特徵陣列和對應類別

def createdataset():

point_set=array([[1.0,1.1],[1.0,1.0],[0,0],[0,0]])

label_set=array(['a','a','b','b'])

return point_set,label_set

#根據建立資料計算歐氏距離,進行分類

def knn_classify(check_point, point_set, label_set, m_top_pk):

point_count=point_set.shape[0] #計算訓練資料個數

#根據已有訓練資料規模計算乙個測試樣本的矩陣,方便後面整體運算

diffmat=tile(check_point, (point_count,1))-point_set

sumsquaremat=(diffmat**2).sum(axis=1) #qq

distmat=sumsquaremat**0.5 #求得到各訓練資料歐氏距離的矩陣

sortedindex=distmat.argsort()#按距離大小排序求得對應索引位置

pk_result={}

for i in range(m_top_pk):#以訓練資料集的前n個資料判定測試資料最終類別

label_result=label_set[sortedindex[i]]#距離第i近的資料對應的類別

pk_result[label_result]=pk_result.get(label_result,0)+1; #該類別的頻數+1

class_result=sorted(pk_result.iteritems(),key=operator.itemgetter(1),reverse=true) # dict->list, 按值排序, 反序輸出

return class_result[0][0] #輸出最大數量類別

機器學習筆記6 KNN介紹與案例

3.例子 k 近鄰演算法 k nearest neighbour algorithm 又稱為knn演算法,是機器學習中原理最簡單的演算法。給定乙個已知標籤類別的訓練資料集,輸入沒有標籤的新資料後,在訓練資料集中找到與新資料最鄰近的k個例項,如果這k個例項的多數屬於某個類別,那麼新資料就屬於這個類別。...

機器學習 演算法 KNN

參考 我感覺knn是最簡單的乙個機器學習演算法,實現很簡單,效果也一般般 就是算個euclideam distance,還有一些可以優化的地方,比如可以加權,第二篇文章提到了 python 如下 coding utf 8 created on aug 30,2013 author blacklaw ...

機器學習 KNN 演算法

一 主要目的 在樣本空間中,找到與待估計的樣本最臨近的k個鄰居,用這幾個鄰居的類別來估計待測樣本的類別 二 適用性 樣本容量比較大的類域的自動分類,而樣本容量較小的類域則容易誤分。尤其適用於樣本分類邊界不規則的情況 三 不足 1 當樣本不平衡時,比如乙個類的樣本容量很大,其他類的樣本容量很小,輸入乙...