機器學習實戰筆記(k鄰近演算法)

2021-07-26 19:56:44 字數 3043 閱讀 4158

1.k鄰近演算法原理

k鄰近演算法通過計算不同特徵值間的距離進行分類

存在乙個樣本資料集合,也稱為訓練樣本集,樣本集中每個資料都存在標籤。輸入沒有標籤的新資料後,將輸入資料中的每個特徵值和訓練樣本集進行比較,然後選出特徵最相似的資料集的標籤作為輸入資料集標籤。一般來說我們選取訓練樣本集中前k個相似資料,然後選取k個相似資料中出現最多的標籤作為輸入資料標籤

2.python**實現

import numpy as np

import pylab as pl

import operator

#k鄰近演算法

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

m = dataset.shape[0]

diff = np.tile(inx,(m,1)) - dataset

sqdiff = diff ** 2

sqdistances = sqdiff.sum(axis=1)

distance = sqdistances ** 0.5

sorteddistindicies = distance.argsort()

classcount = {}

for i in range(k):

label = labels[sorteddistindicies[i]]

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

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

return sortedclasscount[0][0]

#將檔案轉化為陣列

def file2data(filename):

fr = open(filename)

lines = fr.readlines()

n = len(lines)

returndata = np.zeros((n,3))

labels =

index = 0

for line in lines:

line = line.strip()

listfromline = line.split('\t')

returndata[index,:] = listfromline[0:3]

index += 1

return returndata, labels

#將資料歸一化處理

def autonorm(dataset):

minvals = dataset.min(0)

maxvals = dataset.man(0)

ranges = maxvals - minvals

normdataset = np.zeros(np.shape(dataset))

m = dataset.shape[0]

normdataset = dataset - np.tile(minvals, (m,1))

normdataset = normdataset/np.tile(ranges,(m,1))

return normdataset, ranges, minvals

之後我們將k鄰近演算法用於手寫識別系統

我們的資料放在兩個目錄裡面,其中乙個為訓練資料,包含大約2000個樣本,乙個是測試資料報含大約為900個樣本,其中的每個樣本資料如上圖所示,由0和1組成,其中有32行和32列

#將圖轉化為陣列

def img2vector(filename):

vector = np.zeros((1,1024))

fr = open(filename)

for i in range(32):

line = fr.readline()

for j in range(32):

vector[0,32*i+j] = int(line[j])

return vector

#手寫字型的處理

def handwritingclasstest():

labels =

trainingfilelist = os.listdir('trainingdigits')

m = len(trainingfilelist)

traindata = np.zeros((m,1024))

for i in range(m):

filenamestr = trainingfilelist[i]

filename = filenamestr.split('.')[0]

classnum = int(filename.split('_')[0])

traindata[i,:] = img2vector('trainingdigits/%s'%filenamestr)

testfilelist = os.listdir('testdigits')

errorcount = 0.0

mtest = len(testfilelist)

for i in range(mtest):

filenamestr = testfilelist[i]

filename = filenamestr.split('.')[0]

classnum = int(filename.split('_')[0])

vectortest = img2vector('testdigits/%s'%filenamestr)

classresult = classify0(vectortest, traindata, labels, 3)

if (classresult != classnum) : errorcount += 1.0

print 'error rate is %f' %(errorcount/float(mtest))

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

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

機器學習 K 鄰近演算法 KNN

k 鄰近演算法 有監督演算法 演算法工作原理 存在乙個樣本資料集合,也稱作訓練樣本集,並且樣本集中每個資料都存在標籤,即我們知道樣本集中每乙個資料與所屬分類的對應關係。輸入沒有標籤的新資料後,將新資料的每乙個特徵與樣本集中資料對應的特徵進行比較,然後演算法提供樣本集中特徵最相似資料 最鄰近 的分類標...

機器學習 k鄰近演算法 KNN

title 機器學習 k鄰近演算法 knn date 2019 11 16 20 20 41 mathjax true categories 外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳 img ae8zaru7 1573908679258 1573907207887.png 現在我們...