k-近鄰演算法採用測量不同特徵值之間的距離方法進行分類
優點:精度高、對異常值不敏感、無資料輸入假定
缺點:計算複雜度高、空間複雜度高
適用資料型別:數值型和標稱型
工作原理:存在乙個樣本資料集,且樣本集中每個資料都存在標籤,即我們知道樣本集中每個資料對應的分類。輸入沒有標籤的新資料之後,將新資料的每個特徵與樣本集中資料對應的特徵進行比較,然後演算法提取樣本集中特徵最相似資料的分類標籤。通常只取前k個最相似的資料,k往往是不大於20的整數。最後選擇k個最相似資料中出現次數最多的分類作為新資料的分類。
建立名為knn.py的python模組,在檔案中新增下面的**:
from numpy import * #科學計算包
import operator #運算子模組
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
儲存檔案,改變當前路徑到儲存knn.py的位置。進入python互動式開發環境,輸入如下命令匯入剛編輯好的python模組。
import knn
然後輸入如下命令建立變數group和labels
group,labels=knn.createdataset()
此時可輸入變數名以檢驗是否正確的定義了變數。
開啟終端,找到剛儲存的knn.py檔案
為了簡單地實現資料視覺化,對於每個資料點通常只使用兩個特徵。向量labels包含了每個資料點的標籤資訊,labels包含的元素個數等於group矩陣行數。這裡我們將資料點(1,1.1)定義為類a,資料點(0,0.1)定義為類b。
分類函式偽**
對未知類別屬性的資料集中的每個點依次執行以下操作:python函式**實現:1.計算已知類別資料集中的點與當前點的距離;
2.按照距離遞增次序排序;
3.選取與當前點距離最小的k個點;
4.確定前k個點所在類別的出現頻率;
5.返回前k個點出現頻率最高的類別作為當前點的**分類。
def classify0(inx,dataset,labels,k): #k-近鄰演算法
datasetsize = dataset.shape[0]
diffmat = tile(inx,(datasetsize,1)) - dataset
sqdiffmat = diffmat**2
sqdistances = sqdiffmat.sum(axis=1)
distances = sqdistances**0.5 #計算距離
sorteddistindicies = distances.argsort()
classcount = {}
for i in range(k):
voteilabel = labels[sorteddistindicies[i]]
classcount[voteilabel] = classcount.get(voteilabel,0)+1 #選取距離最小的k個點
sortedclasscount = sorted(classcount.items(),
key = operator.itemgetter(1),reverse = true)
return sortedclasscount[0][0] #排序
該函式有四個輸入引數:用於分類的輸入向量是inx,輸入的訓練樣本集是dataset,標籤向量是labels,引數k表示用於選擇近鄰的數目,其中標籤向量的元素數目和矩陣dataset的行數相同。該函式中計算距離使用的是歐式距離,即
計算完所有點之間的距離後,對資料按照從小到大的次序排序,隨後確定前k個距離最小元素所在的分類,最後,將classcount字典分解成元組列表,使用運算子模組的itemgetter方法,按照第二個元素的次序對元組進行排序(逆序),最後返回頻率最高的元素標籤。
為**資料所在分類,在python提示符中輸入下列命令:
knn.classify0([0,0],group, labels,3)
輸出結果為b
分類器構造完成。
機器學習筆記之K近鄰演算法
今天學習的是機器學習中最為簡單的乙個演算法 k近鄰演算法,簡稱knn。由於學習主要參照 機器學習實戰 這本書進行,本系列文章中涉及到的概念與例項絕大部分 於此。本文主要從knn演算法概述,使用k 近鄰演算法改進約會網 的配對效果,手寫識別函式三個方面來展開,本文的主要用意在於闡釋 機器學習實戰 中源...
機器學習 k 近鄰演算法
一.k 近鄰演算法概述 簡單地說,k 近鄰演算法採用測量不同特徵值之間的距離方法進行分類。k 近鄰演算法 knn 它的工作原理是 存在乙個樣本資料集,也稱訓練樣本集,並且樣本集中每個資料都存在標籤,即我們知道樣本集中每一資料與所屬分類的對應關係。輸入沒有標籤的新資料後,將資料的每個特徵與樣本集合中資...
機器學習 K近鄰演算法
用例一 from sklearn.neighbors import nearestneighbors import numpy as np x np.array 1,1 2,1 3,2 1,1 2,1 3,2 nbrs nearestneighbors n neighbors 2,algorithm...