《機器學習實戰》 K 近鄰演算法

2021-07-05 23:54:58 字數 2574 閱讀 7086

基本原理:通過計算新資料與給定的樣本資料之間的距離,來確定相似度排名;然後取前k個最相似的樣本,統計這k(一般不大於20)個樣本中出現最多的分類,設為新資料的分類。

新資料,訓練樣本集,樣本資料標籤(即分類),最近鄰(前k個最相似資料),最近鄰標籤

演算法實施:

首先提取要比較的特徵,確定各特徵的權重,進行「歸一化」,自動將數字特徵轉化為0-1之間——autonorm()函式。

其次準備好測試分類器。通常選用已有資料90%作為訓練樣本來訓練分類器,剩下10%去測試分類器。即已知測試資料的分類,再去拿分類器驗證,求出錯誤率。該函式應該自包含(可以在任何時候使用來測試分類效果)——classtest()函式。

然後演算法使用,使用歐氏距離公式,計算兩個向量點的距離。該向量就是資料中各個特徵值歸一化之後的數值組成的一維矩陣,可以用numpy進行運算;隨後將距離按照從小到大排序;再確定前k個距離最小元素坐在的主要分類,返回發生頻率最高的元素標籤——classify()函式。

knn演算法:

簡單案例,包含全部流程

#coding: utf-8

from numpy import *

import operator

def createdataset():

# 使用者自封閉測試的資料

group = array([[1.0,1.1],[1.0,1.0],[0.0,0.0],[0,0.1],[5,10],[10,5]])

labels = ['a','a','b','b','c','c']

return group,labels

def createdatatest():

tgroup = array([[1.1,1.0],[1.1,1.2],[0.1,0.0],[0.1,0.1],[5,9],[9.5,5]])

tlabels = ['a','a','b','b','c','c']

return tgroup,tlabels

def autonorm(dataset):

# 按行處理,歸一化

minx = dataset.min(0)

maxx = dataset.max(0)

ranges = maxx - minx

normdataset = zeros(shape(dataset))

m = dataset.shape[0]

normdataset = (dataset - tile(minx, (m,1)))/tile(ranges, (m,1))

return normdataset

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

#用於輸入的向量inx,輸入訓練樣本集dataset,標籤響亮labels,鄰居數k

datasetsize = dataset.shape[0] # shape函式獲取第一維度的長度

sqdiffmat = (tile(inx, (datasetsize, 1)) - dataset)**2 # 取差的平方

distances = (sqdiffmat.sum(axis = 1)) ** 0.5 # inx與不同資料之間距離

sortd = distances.argsort() # 排序,返回索引值

classcount = {}

for i in range(k):

votelabel = labels[sortd[i]]

classcount[votelabel] = classcount.get(votelabel,0)+1 #計數加1

classsort = sorted(classcount.items(), \

key = operator.itemgetter(1), reverse=true) # 標籤統計數從大到小排

return classsort[0][0]

def classtest(dataset,labels,tdataset, tlabels):

errorcount = 0.0

m = dataset.shape[0]

for i in range(m):

result = classify(tdataset[i], dataset,labels,6)

if(result != tlabels[i]): errorcount += 1

print("the total error rate is: %f"%(errorcount/float(m)))

group, labels = createdataset()

# group = autonorm(group)

label = classify([0,0], group, labels, 3)

print(label)

# 錯誤率測試

tgroup, tlabels = createdatatest()

# tgroup = autonorm(tgroup)

classtest(group,labels,tgroup, tlabels)

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

簡單的說,k 近鄰演算法採用測量不同特徵值之間的距離辦法進行分類.收集資料 可以使用任何方法。準備資料 距離計算所需要的數值,最好是結構化的資料格式。分析資料 可以使用任何方法。訓練演算法 此步驟不適用於k 近鄰演算法。測試演算法 計算錯誤率。使用演算法 首先需要輸入樣本資料和結構化的輸出結果,然後...

機器學習實戰 k 近鄰演算法

本系列是基於 機器學習實戰 這本書做的讀書筆記,原書採用python2作為工具,我則將原書 改為用python3編寫並記錄在此系列中。我將把書中對這些機器學習演算法的定義謄上,然後寫下自己對該演算法的通俗理解,之後貼出書中演算法清單中的 本書講解的第乙個機器學習演算法是k 近鄰演算法 knn 它的工...

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

coding utf 8 from numpy import import operator import matplotlib import matplotlib.pyplot as plt defcreatdataset group array 1.0,1.1 1.0,1.0 0,0 0,0.1...