#knn
演算法核心
defknnclassify0(inx, dataset, labels, k):##inx
待分類向量
dataset
樣本資料
labels
標籤類別k值
(前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()
#返回資料所在行標號,根據標號可以取到對應類別
labels
classcount={}
#classcount:
foriinrange
(k):
voteilabel = labels[sorteddistindicies[i]]
classcount[voteilabel] = classcount.get(voteilabel,
0) +
1
sortedclasscount =
sorted
(classcount.iteritems(),
key=operator.itemgetter(
1),
reverse
=true
)returnsortedclasscount[0][
0]
資料集轉換為矩陣
deffile2matrix(filename):#datingtestset2.txt
資料變為矩陣
file to matrix
fr =
open
(filename)
numberoflines =
len(fr.readlines())
#get the number of lines in the file
returnmat = zeros((numberoflines,
3))
#prepare matrix to return
屬性矩陣
classlabelvector =
#prepare labels return
類別標籤向量
fr =
open
(filename)
index =
0forlineinfr.readlines():
line = line.strip()
listfromline = line.split('\t')
returnmat[index,:] = listfromline[0:
3]int(listfromline[-
1]))
index +=
1returnreturnmat,classlabelvector
#資料集歸一化
defautonorm(dataset):
minvals = dataset.min(0)
maxvals = dataset.max(0)
ranges = maxvals - minvals
normdataset
= zeros(shape(dataset))
m = dataset.shape[0]
normdataset = dataset - tile(minvals, (m,1))
normdataset = normdataset/tile(ranges, (m,
1))
#element wise divide
returnnormdataset, ranges, minvals
Python機器學習演算法之K近鄰演算法
1.資料預處理 a.標準化 b.歸一化 2.計算歐式距離 3.3.演算法實現 import pandas as pd from sklearn.preprocessing import standardscaler from scipy.spatial import distance dc list...
機器學習python實戰 k近鄰演算法
前一周學習了一些理論的知識,雖然懂了原理,但感覺真要寫起 來還是摸不著頭腦,所以接下來的幾天都打算在 方面下一番功夫。由於接觸python不久,且能力有限,難免有些錯誤的或者理解不到位的地方,希望讀者不吝指正!k 近鄰演算法 k nn 的基本原理 存在乙個樣本資料集合,也叫訓練樣本集,並且樣本集中的...
機器學習演算法 K鄰近演算法
coding utf 8 author whf from numpy import import operator def classify inx,dataset,labels,k 得到資料集的行數 shape方法用來得到矩陣或陣列的維數 datasetsize dataset.shape 0 t...