K 近鄰演算法學習

2022-08-19 01:45:08 字數 2984 閱讀 7448

# -- coding: utf-8 --

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):

print 'inx'

print inx

#獲取行數

datasetsize = dataset.shape[0]

print 'datasetsize:'

print datasetsize

#將用於分類的輸入向量重複訓練集樣本的行數-訓練集樣本

print 'tile(inx,(datasetsize,1))'

print tile(inx,(datasetsize,1))

diffmat = tile(inx,(datasetsize,1))-dataset

print 'diffmat'

print diffmat

#將差值做平方操作

sqdiffmat = diffmat**2

print 'sqdiffmat'

print sqdiffmat

#將矩陣按行相加

sqdistances = sqdiffmat.sum(axis=1)

print 'sqdistances'

print sqdistances

#相加後開根號

distances = sqdistances**0.5

print'distances'

print distances

#按從小到大大索引排序 假如[3,1,2],排序結果為[1,2.0],結果應該是訓練集的列數

sorteddistindicies = distances.argsort()

print 'sorteddistindicies'

print sorteddistindicies

classcount = {}

#遍歷for i in range(k):

#sorteddistindicies[i]獲取距離按照索引排序後的第i個值

#labels[sorteddistindicies[i]]獲取距離索引對應的label

print 'i='+str(i)

#獲取當前索引對應的標籤

voteilabel = labels[sorteddistindicies[i]]

print 'voteilabel='+voteilabel

print 'classcount.get(voteilabel,0)='+str(classcount.get(voteilabel,0))

#對標籤進行計數

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

print 'classcount'

print classcount

#對獲取的標籤通過數量進行逆序排序

sortedclasscount = sorted(classcount.iteritems(),key=operator.itemgetter(1),reverse=true)

print 'sortedclasscount'

print sortedclasscount

return sortedclasscount[0][0]

group,labels=knn.createdataset();

print group

print labels

print knn.classify0([0.1,0.2],group,labels,3)

最終的輸出結果為

[[ 1. 1.1]

[ 1. 1. ]

[ 0. 0. ]

[ 0. 0.1]]

['a', 'a', 'b', 'b']

inx[0.1, 0.2]

datasetsize:

4tile(inx,(datasetsize,1))

[[ 0.1 0.2]

[ 0.1 0.2]

[ 0.1 0.2]

[ 0.1 0.2]]

diffmat

[[-0.9 -0.9]

[-0.9 -0.8]

[ 0.1 0.2]

[ 0.1 0.1]]

sqdiffmat

[[ 0.81 0.81]

[ 0.81 0.64]

[ 0.01 0.04]

[ 0.01 0.01]]

sqdistances

[ 1.62 1.45 0.05 0.02]

distances

[ 1.27279221 1.20415946 0.2236068 0.14142136]

sorteddistindicies

[3 2 1 0]

i=0voteilabel=b

classcount.get(voteilabel,0)=0

i=1voteilabel=b

classcount.get(voteilabel,0)=1

i=2voteilabel=a

classcount.get(voteilabel,0)=0

classcount

sortedclasscount

[('b', 2), ('a', 1)]

b

(機器學習實戰)K 近鄰演算法學習過程

k 近鄰演算法,簡單地說,k 近鄰演算法採用測量不同特徵值之間的距離方法進行分類 k近鄰演算法特徵 詳細優點 精度高 對異常值不敏感 無資料輸入假定 缺點計算複雜度高 空間複雜度高 適用資料範圍 數值型和標稱型 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...