k鄰近(knn)演算法應該是機器學習演算法中最簡單的乙個吧。
knn(k nearest neighbors)演算法又叫k最臨近方法, 總體來說knn演算法是相對比較容易理解的演算法之一,假設每乙個類包含多個樣本資料,而且每個資料都有乙個唯一的類標記表示這些樣本是屬於哪乙個分類, knn就是計算每個樣本資料到待分類資料的距離,取和待分類資料最近的k各樣本資料,那麼這個k個樣本資料中哪個類別的樣本資料占多數,則待分類資料就屬於該類別。
不過knn的不足也很明顯,計算量大,每乙個判斷輸入都要掃一遍資料集,而且沒有訓練過程。
在uci
找到了一些資料集,資料算是非常簡單了
from numpy import *
import os
from collections import counter
def datapre(filepath):
fr = open(filepath)
filenumber = len(fr.readlines())
fr = open(filepath)
******line = fr.readline()
******line = ******line.strip()
colnumber = len(******line.split(',')) - 1
retmat = zeros((filenumber, colnumber))
classlabel =
index = 0
fr = open(filepath)
for line in fr.readlines():
line = line.strip()
cols = line.split(',')
retmat[index,:] = cols[0 : colnumber]
index += 1
return norm(retmat), classlabel
def norm(dataset):
minvals = dataset.min(0)
maxvals = dataset.max(0)
ranges = maxvals = minvals
normdataset = zeros(shape(dataset))
m = len(dataset)
normdataset = dataset - tile(minvals, (m, 1))
normdataset = normdataset / tile(ranges, (m, 1))
return normdataset
def classify(dataset, datasetlabel, input, k):
icols = input
print len(dataset[0])
if len(dataset[0]) != len(icols):
print 'input error'
return
diffmat = tile(icols, (len(dataset),1)) - dataset
sqdistancesmat = (diffmat**2).sum(axis=1)
distances = sqdistancesmat**0.5
sorteddistances = distances.argsort()
classcount =
for i in range(k):
predictlabel = datasetlabel[sorteddistances[i]]
frequent = counter(classcount)
return frequent.most_common(1)[0][0]
上面沒有測試資料,我自己做了一些資料測試,全中!bingo!
knn分類iris資料
題目 sklearn中的datasets方法匯入iris鳶尾花訓練樣本並用train test split產生測試樣本,用knn分類並輸出分類精度。data sklearn.datasets.iris.data label sklearn.datasets.iris.target 輸出 from s...
Python實現KNN演算法 iris資料集
在本文中,通過python實現knn演算法,而非簡單的呼叫sklearn庫,並通過iris鳶尾花資料集進行訓練和測試。詳情參見以下 if name main trainx,trainy,testx,testy loadsplitdataset prey knn testx evaluateknn 和...
KNN演算法 測試分類iris資料集
以iris資料集為例,簡單執行下knn的演算法 匯入常規要用的包 from sklearn.datasets import load iris from sklearn.neighbors import kneighborsclassifier from sklearn.model selectio...