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 當樣本不平衡時,比如乙個類的樣本容量很大,其他類的樣本容量很小,輸入乙...