機器學習筆記1 0 K 近鄰演算法(KNN)

2021-09-05 12:32:01 字數 2350 閱讀 9084

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。

分類函式偽**

對未知類別屬性的資料集中的每個點依次執行以下操作:

1.計算已知類別資料集中的點與當前點的距離;

2.按照距離遞增次序排序;

3.選取與當前點距離最小的k個點;

4.確定前k個點所在類別的出現頻率;

5.返回前k個點出現頻率最高的類別作為當前點的**分類。

python函式**實現:

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...