k 鄰近演算法學習

2021-07-28 11:45:33 字數 1768 閱讀 1139

#-*- 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','b','c','d']

return group,labels

def classify0(inx,dataset,labels,k):

#shape函式是numpy.core.fromnumeric中的函式,它的功能是讀取矩陣的長度,

#datasetsize是sataset的行數,用上面的舉例就是4行  

datasetsize = dataset.shape[0]

#前面用tile,把一行inx變成4行一模一樣的(tile有重複的功能,datasetsize是重複4遍,後面的1保證重複完了是4行,而不是一行裡有四個一樣的),然後再減去dataset,是為了求兩點的距離,先要座標相減,這個就是座標相減  

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

#用上面得到4組目標資料座標和4組inx座標的差值開平方,py裡面**是開平方,[(x1-x2)^2,(y1-y2)^2]

sqdiffmat = diffmat**2

#axis=1是列相加,,這樣得到了4組資料的[(x1-x2)^2+(y1-y2)^2]

sqdistances = sqdiffmat.sum(axis=1)

#開根號,得出距離

distances = sqdistances**0.5

#argsort是排序,將元素按照由小到大的順序返回下標,比如([3,1,2]),它返回的就是([1,2,3])  

sorteddistindicies = distances.argsort()

#建立分類字典

classcount={}

#遍歷k次(去前k個最近距離的演算法)

for i in range(k):

voteilabel = labels[sorteddistindicies[i]]

#get是取字典裡的元素,如果之前這個voteilabel是有的,那麼就返回字典裡這個voteilabel裡的值,如果沒有就返回0(後面寫的),這行**的意思就是算離目標點距離最近的k個點的類別,這個點是哪個類別哪個類別就加1  

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

#key=operator.itemgetter(1)的意思是按照字典裡的第乙個排序,,要按照第1個(ab是第0個),即『1』『2』排序。reverse=true是降序排序  

sortedclasscount = sorted(classcount.iteritems(),

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

#返回類別最多的類別

return sortedclasscount[0][0]

執行後:

ipython

import knn

in [2]: group,labels = knn.createdataset()

in [3]: knn.classify0([0,0],group,labels,3)

[ 1.48660687  1.41421356  0.          0.1       ]

[2 3 1 0]

out[3]: 'b'

k 鄰近演算法學習筆記

目錄 採用測量不同特徵值之間的距離進行分類。缺點 適用範圍 工作原理 usr bin env python coding utf 8 from numpy import import matplotlib import matplotlib.pyplot as plt k 近鄰演算法 defclas...

機器學習演算法 K鄰近演算法

coding utf 8 author whf from numpy import import operator def classify inx,dataset,labels,k 得到資料集的行數 shape方法用來得到矩陣或陣列的維數 datasetsize dataset.shape 0 t...

K 鄰近演算法

k 鄰近演算法 1.演算法描述 k 鄰近演算法 k nearest neighbor,knn 分類演算法,是最簡單的機器學習演算法。工作原理 存在乙個樣本資料集合,也稱作訓練樣本集,並且樣本集中每個資料都存在標籤,即我們知道樣本集中每乙個資料與所屬分類對應的關係。輸入沒有標籤的新資料後,將新資料的每...