knn 演算法
k-臨近演算法,最基本的機器學習演算法之一,簡單講就是已有標本資料,計算**的資料和每個標本資料的特徵距離(如歐氏距離),
距離近的標本資料型別作為**資料的型別。
原理:已有訓練樣本集,新的資料和訓練樣本特徵比較,訓練樣本集中取特徵最相似資料的標籤。一般來說先找前k個最相似的
資料,這就是k-鄰近演算法的出處,然後k個最相似資料取出現次數最多資料的分類作為結果。
實現:1、 找出與測試資料距離最近的k個資料,取其**現次數最多的資料分類
2、 歸一化資料:有時特徵範圍不一樣導致影響計算,把所有特徵轉化到0-1之間,newvalue=oldvalue/(max-min)
距離計算距離公式:
兩個向量(x1,y1)和(x2,y2)的距離
演算法特點:
優點:精度高,對異常值不敏感,無資料輸入假定
缺點:計算複雜度高、空間複雜度高
python **例子
如下函式儲存到knn.py
def classify0(inx, dataset, labels, k):
datasetsize = dataset.shape[0]
#先把inx構造成重複datasetsize次的陣列,(datasetsize, 1)意思是變成二維陣列,不是一維陣列裡重複。再減去dataset
diffmat = tile(inx, (datasetsize, 1)) - dataset
sqdiffmat = diffmat ** 2
sqdinstance = sqdiffmat.sum(axis=1)
distances = sqdinstance ** 0.5
sortdistindicies = distances.argsort()
classcount={}
for i in range(k):
voteilabel = labels[sortdistindicies[i]]
classcount[voteilabel] = classcount.get(voteilabel, 0) + 1
#print(classcount)
sortclasscount = sorted(classcount.iteritems(), key = operator.itemgetter(1), reverse = true)
#print(sortclasscount)
return sortclasscount[0][0]
測試**,儲存到classifytest.py
#!/usr/bin/env python
#-*- coding:utf-8 -*-
from numpy import *
import operator
import knn
def createdataset():
group = array([[1.0, 1.1], [1.0, 1.0], [0, 0], [0, 0.1]])
labels = ['a', 'a', 'b', 'b']
return group, labels
group, labels = createdataset()
#classres = classify0([0,0], group, labels, 3)
#print(classres)
def execute(inx):
group, labels = createdataset()
return knn.classify0(inx, group, labels, 3)
測試
>>> import classifytest
>>> classifytest.execute([0,0])
'b'
機器學習演算法之 KNN k鄰近演算法
k 鄰近演算法應該是機器學習中最簡單的演算法了,也很容易理解。場景 已知一組資料 點 並按照某些屬性對其進行了分類,比如 a,b,c,這就是資料的labels 對於新來的資料,已知其屬性,對其進行分類,加label。k近鄰對於如何分類的做法就是,根據屬性,1.求出未知點到已知所有點的距離 2.對所有...
機器學習 KNN K 最鄰近演算法
k 近鄰學習是一種常用的監督學習方法,比如 判斷乙個人的人品,只需要觀察與他來往最密切的幾個人的人品好壞就可以得出,即 近朱者赤,近墨者黑 理論 原理 物以類聚,人以群分 乙個對於knn演算法解釋最清楚的圖如下所示 藍方塊和紅三角均是已有分類資料,當前的任務是將綠色圓塊進行分類判斷,判斷是屬於藍方塊...
機器學習 KNN K 最鄰近演算法
knn分類演算法,是理論上比較成熟的方法,也是最簡單的機器學習演算法之一。該方法的思路是 如果乙個樣本在特徵空間中的k個最相似 即特徵空間中最鄰近 的樣本中的大多數屬於某乙個類別,則該樣本也屬於這個類別。knn演算法中,所選擇的鄰居都是已經正確分類的物件。該方法在定類決策上只依據最鄰近的乙個或者幾個...