knn演算法應該是機器學習中最簡單的演算法,其演算法核心步驟如下:
對未知類別屬性的資料集中的每個樣本執行:
1.計算已知類別資料集中的點與當前點之間的距離
2.按照距離遞增次序排序
3.選取當前點距離最小的k個點
4.確定前k個點所在類別的出現頻率
5.返回前k個點出現頻率最高的類別作為當前點的**分類
紀錄一下核心**
#knn演算法實現
defclassify0
(inx, dataset, labels, k)
:#s測試向量 訓練向量,標籤, k值
datasetsize = dataset.shape[0]
diffmat = np.tile(inx,
(datasetsize,1)
)- dataset #tile()用於擴充套件矩陣 將測試向量y方向複製到與訓練資料一致
sqdiffmat = diffmat**
2 sqdistances = sqdiffmat.
sum(axis=1)
distances = sqdistances**
0.5#求得距離
sorteddistindicies = distances.argsort(
)#返回排序的下標,從小到大
classcount=
for i in
range
(k):
voteilabel = labels[sorteddistindicies[i]
]#找到測試最近的前3個資料
classcount[voteilabel]
= classcount.get(voteilabel,0)
+1#用字典計數
sortedclasscount =
sorted
(classcount.iteritems(
), key=operator.itemgetter(1)
, reverse=
true
)#對字典排序,基於值,從大到小(逆序,reverse=true)
return sortedclasscount[0]
[0]#匯入資料集
deffile2matrix
(filename)
: fr =
open
(filename)
numberoflines =
len(fr.readlines())
#get the number of lines in the file
returnmat = np.zeros(
(numberoflines,3)
)#prepare matrix to return
classlabelvector =
#prepare labels return
fr =
open
(filename)
index =
0for line in fr.readlines():
line = line.strip(
) listfromline = line.split(
'\t'
) returnmat[index,:]
= listfromline[0:
3]int(listfromline[-1
])) index +=
1return returnmat,classlabelvector
#數值歸一化
#newvalue=(oldvalue-min)/(max-min)
defautonorm
(dataset)
: minvals = dataset.
min(0)
#返回該矩陣中每一列的最小值
maxvals = dataset.
max(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))
#element wise divide
return normdataset, ranges, minvals
機器學習 演算法 KNN
參考 我感覺knn是最簡單的乙個機器學習演算法,實現很簡單,效果也一般般 就是算個euclideam distance,還有一些可以優化的地方,比如可以加權,第二篇文章提到了 python 如下 coding utf 8 created on aug 30,2013 author blacklaw ...
機器學習 KNN 演算法
一 主要目的 在樣本空間中,找到與待估計的樣本最臨近的k個鄰居,用這幾個鄰居的類別來估計待測樣本的類別 二 適用性 樣本容量比較大的類域的自動分類,而樣本容量較小的類域則容易誤分。尤其適用於樣本分類邊界不規則的情況 三 不足 1 當樣本不平衡時,比如乙個類的樣本容量很大,其他類的樣本容量很小,輸入乙...
機器學習 KNN演算法
一 近 鄰 算 法 knn 原理 工 作 原 理 是 存 在 一 個 樣 本 資料 集 合 也 稱 作 訓練 樣 本 集 並 且 樣 本 集 中 每 個 數 據 都 存 在 標 籤 即 我 們 知 道 樣 本 集 中 每 一 數 據與 所 屬 分 類 的 對 應關係 輸 人 沒 有 標 籤 的 新 ...