knn原理及實踐
1 演算法介紹
總的來說,機器學習入門的第乙個演算法是k-近鄰演算法(knn),它的工作原理是:存在乙個樣本資料集合,也稱作訓練樣本集,並且樣本集中每個資料都存在標籤,即我們知道樣本集中每一資料與所屬分類的對應關係。輸入沒有標籤的新資料後,將新資料的每個特徵與樣本集中資料對應的特徵進行比較,然後演算法提取樣本集中特徵最相似資料(最近鄰)的分類標籤。一般來說,我們只選擇樣本資料集中前k個最相似的資料,這就是k-近鄰演算法中k的出處,通常k是不大於20的整數。最後,選擇k個最相似資料中出現次數最多的分類,作為新資料的分類。
很多初學者,對大資料的概念都是模糊不清的,大資料是什麼,能做什麼,學的時候,該按照什麼線路去學習,學完往哪方面發展,想深入了解,想學習的同學歡迎加入大資料學習qq群:957205962,有大量乾貨(零基礎以及高階的經典實戰)分享給大家,並且有清華大學畢業的資深大資料講師給大家免費授課,給大家分享目前國內最完整的大資料高階實戰實用學習流程體系2 演算法流程
k-近鄰演算法的偽**如下:
對未知類別屬性的資料集中的每個點依次執行以下操作:
(1) 計算已知類別資料集中的點與當前點之間的距離;3 案例實踐——使用 k-近鄰演算法改進約會**的配對效果(2) 按照距離遞增次序排序;
(3) 選取與當前點距離最小的k個點;
(4) 確定前k個點所在類別的出現頻率;
(5) 返回前k個點出現頻率最高的類別作為當前點的**分類。
4 **
"""
created on dec 10, 2017
knn: k nearest neighbors
input: inx: vector to compare to existing dataset (1xn)
dataset: size m data set of known vectors (nxm)
labels: data set labels (1xm vector)
k: number of neighbors to use for comparison
output: the most popular class label
"""import numpy as np
def file2matrix(filename):
# 整理資料集
fr = open(filename)
arraylines = fr.readlines() # 以列表的形式返回
numberlines = len(arraylines)
returnmat = np.zeros((numberlines, 3), dtype=float)
classtable =
classcol = np.zeros((numberlines, 1), dtype=int)
index = 0
for line in arraylines:
line = line.strip('\n')
everyline = line.split('\t')
returnmat[index, :] = everyline[0:3]
if classtable[index] == 'smalldoses':
classcol[index] = 2
elif classtable[index] == 'largedoses':
classcol[index] = 3
else:
classcol[index] = 1
index = index + 1
return returnmat, classcol
def norm(features):
# 歸一化特徵向量
normarray = np.zeros((features.shape[0], features.shape[1]))
for i in range(features.shape[1]):
maxvals = np.max(features[:, i])
minvals = np.min(features[:, i])
dist = maxvals-minvals
normarray[:, i] = (features[:, i]-minvals)/dist
return normarray
def classify(features, datatest, classlable, k):
# knn演算法實踐
normtrain = norm(features)
normtest = norm(datatest)
a = features.shape[0]
b = features.shape[1]
c = datatest.shape[0]
votelable =
group = {}
testlable = np.zeros((c, 1))
diffmat = np.zeros((a, b))
totaldist = np.zeros((a, 1))
for i in range(c):
for j in range(b):
diffmat[:, j] = (normtest[i, j] - normtrain[:, j])**2
totaldist[:, 0] = np.sqrt(np.sum(diffmat, axis=1))
sortdist = np.argsort(totaldist, axis=0)
for n in range(k):
voteset = set(votelable)
for item in voteset:
group[item] = votelable.count(item)
lastclass = max(zip(group.values(), group.keys()))
print(group)
testlable[i] = lastclass[1]
votelable =
group = {}
return testlable
if __name__ == '__main__':
filepath = 'e:\機器學習\機器學習實戰資料\chapter2\machinelearninginaction\ch02\datingtestset.txt'
returnmat, classcol = file2matrix(filepath)
normarray = norm(returnmat)
features, datatest = normarray[0:900, :], normarray[900:1000, :]
testlable = classify(features, datatest, classcol[0:900], 10)
# 計算正確率
e = 0
for y in range(100):
if testlable[y] == classcol[900+y]:
e = e+1
print(e/100)
# 模型正確率為91%
機器學習之KNN演算法
在幾位志同道合的小夥伴的帶領下,開始了機器學習的路程,然而一切並不是想象的那麼簡單,因此本文記錄了自己的學習路程,希望還能堅持做好這件事。knn演算法是機器學習中屬於比較簡單的演算法,容易理解和閱讀。1.knn的應用 客戶流失 欺詐偵測等 更適合於稀有事件的分類問題 2.優缺點 優點 這是乙個簡單有...
機器學習演算法之KNN
物以類聚 人以群分,乙個例項與它周圍的例項屬於同一類的概率較大。給定乙個訓練資料集,對新輸入的例項,在訓練資料集中找到與該例項最鄰近的k個例項,這k個例項的多數屬於某個類,就把該輸入例項分為這個類。這裡,選用了歐氏距離,k的預設值為3,使用了sklearn提供的digits資料集來進行測試。inpu...
機器學習之KNN演算法
如果乙個樣本在特徵空間中的k個最相似 即特徵空間中最鄰近 的樣本中的大多數屬於某乙個類別,則該樣本也屬於這個類別。knn是一種非常古老而且簡單的分類方法 a a1,a2,a3 b b1,b2,b3 兩點的歐式距離是 因為計算的特徵值的平方,所以計算前需要先進行特徵處理 sklearn.neighbo...