機器學習演算法一 k 近鄰演算法(1)

2021-09-30 19:01:16 字數 3709 閱讀 8653

採用測量不同特徵值之間的距離方法進行分類。

knn工作原理:訓練樣本集中每個資料有乙個一一對應的所屬分類的標籤。需要分類的新資料沒有標籤,將新資料的每個特徵與樣本集中資料對應的特徵進行比較,然後將樣本集中與其特徵最相似(最近鄰)的資料標籤作為新資料的標籤。

一般來說,我們選擇樣本集中前k個最相似的資料(通常k<=20)中,出現次數最多的,作為新資料的分類。

使用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

#從文字檔案中解析資料

def classify0

(inx,dataset,labels,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=

#初始化classcount

for i in

range

(k): #選擇歐式距離最小的k個點

voteilabel = labels[sorteddistindicies[i]

] classcount[voteilabel]

= classcount.

get(voteilabel,0)

+1 sortedclasscount =

sorted

(classcount.

items()

, key=operator.

itemgetter(1

),reverse=true)

return sortedclasscount[0][0]

(1)tile()將inx二維陣列化,變成datasetsize行1列

(2)sum()函式

sum(axis=1)表示矩陣中行之間數的求和;

sum(axis=0)表示矩陣中對列求和

(3)argsort()函式

argsort()函式的具體功能如下:

import numpy as np

x = np.

array([

1,4,

3,-1

,6,9

])y = x.

argsort()

>>>y=

array([

3,0,

2,1,

4,5]

)

發現argsort()函式是將x中的元素從小到大排列,輸出其對應的index(索引)。

例如:x[3]=-1最小,所以y[0]=3;x[5]=9最大,所以y[5]=5。

(4)classcount.get()函式

檢測並生成新元素,0只做初始化作用,計數,遇到相同的加1

for i in

range

(k): #選擇歐式距離最小的k個點

voteilabel = labels[sorteddistindicies[i]

] classcount[voteilabel]

= classcount.

get(voteilabel,0)

+1

令k=3

假設labels = [『a』,『a』,『a』,『b』,『b』,『b』]

假設sorteddistindicies = [1,3,0]

那麼-------------------------、

當k=0,

voteilabel = labels[sorteddistindicies[0]] 

= labels[1] = 'a'

classcount['a'] = classcount.get('a',0) + 1

>>>classcount =

當k=1,

voteilabel = labels[sorteddistindicies[1]] 

= labels[3] = 'b'

classcount['b'] = classcount.get('b',0) + 1

>>>classcount =

當k=2,

voteilabel = labels[sorteddistindicies[2]] 

= labels[0] = 'a'

classcount['a'] = classcount.get('a',0) + 1

>>>classcount =

>>>classcount =
(5)sorted()函式sorted(iterable, key=none, reverse=false)

iterable為排序物件

key表示按什麼要素排序

reverse預設false表示公升序

sortedclasscount = sorted(classcount.items(),

key=operator.itemgetter(1),reverse=true)

classcount.items()返回的是dict_items,將classcount字典分解為元組列表

注意:python2的iteritems()轉為python3的items()

operator.itemgetter(1)表示對classcount的第2個域進行排序(即標籤頻次)

reverse=true表示是公升序排列

至此,分類器建成,測試結果如下

機器學習 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...

機器學習 K近鄰演算法

工作原理 存在乙個訓練樣本資料集合,每組資料對應乙個標籤及分類 比如下邊例子為前兩個資料都為a類 輸入測試樣本後通過計算求出測試樣本與訓練樣本的歐氏距離d,取前k個最小的值,這k組資料對應的標籤分類最多的那種,就是測試樣本的標籤。訓練樣本資料 1.0,1.1 1.0,1.0 0,0 0,0.1 歐氏...