#機器學習實戰的knn**
def classify0(inx, dataset, labels, 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()
classcount={}
for i in range(k):
voteilabel = labels[sorteddistindicies[i]]
classcount[voteilabel] = classcount.get(voteilabel,0) + 1
sortedclasscount = sorted(classcount.iteritems(), key=operator.itemgetter(1), reverse=true)
return sortedclasscount[0][0]
#自己修改後的**
import numpy as np
def createdataset():#建立資料集
group = np.array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])
labels = ['a','a','b','b']
return group, labels #labels包含的元素個數等於group矩陣個數
#先用中文注釋 以後用嘗試用英文進行注釋
#訓練集為mxn 的矩陣 (向量和數字為特殊的矩陣) mxn可以看成m個多維向量點 1xn則為乙個點
#測試集為1xn 的矩陣
def classify0(inx, dataset, labels, k): #該函式的作用:knn演算法的實現,將每組資料劃分到某個類中
datasetsize = dataset.shape[0] #記錄行數為 m
diffmat = np.tile(inx, (datasetsize,1)) - dataset # tile 瓷磚 拼貼 以inx為基本單元 構建成 mx1個inx 的矩陣 即 mxn的矩陣 與訓練集進行相減
sqdiffmat = diffmat**2 #對矩陣差的每個元素平方
sqdistances = sqdiffmat.sum(axis=1) #在行方向上進行求和
distances = sqdistances**0.5 #再開平方==>算出測試集的點與訓練集所有點之間的距離
sorteddistindicies = distances.argsort() #對距離大小進行從小到大的排序 argsort函式返回的是陣列值從小到大的索引值
k_labels =
for i in range(k):
voteilabel = labels[sorteddistindicies[i]] #每個點與該點對應的標籤是一一對應的
inx_label= max(k_labels, key=k_labels.count) #運用投票法(少數服從多數)對測試點進行分類**
#from collections import counter counter(k_labels).most_common(1)[0][0] 該方法也行
return inx_label
group, labels = createdataset()
inx_label = classify0([0,0], group, labels,3)
print(inx_label)
優化後的**:思路更加清晰,**量減少,可讀性略差,但方便自己理解。
#優化後的**
def classify0(inx, dataset, labels, k): #該函式的作用:knn演算法的實現,將每組資料劃分到某個類中
inx_dataset = np.tile(inx,(dataset.shape[0],1)) ##第一步:構造與資料集相同的型別 mxn矩陣
distances_arr = (((inx_dataset - dataset)**2).sum(1))**0.5 #第二步:算出測試集的點與訓練集所有點的歐式距離 對應數學上的矩陣運算
k_labels =
for i in range(k):
inx_label= max(k_labels, key=k_labels.count) #第四步:運用投票法(少數服從多數)對測試點進行分類**
return inx_label
knn演算法即k最近鄰演算法(近朱者赤近墨者黑)
工作原理是:對於給定的測試樣本,找出與其最近的k個訓練樣本,然後基於這k個訓練樣本的資訊進行**。
對於分類問題用投票法,對於回歸問題用平均法。
筆記 初探KNN演算法(1)
全稱是k nearest neighbors k近鄰演算法 其思想總的來說就是在多個樣本之間進行比較,越相似的話,新的樣本就有更高的概率屬於這個類別,一般用來解決分類問題,關於操作流程,簡單來說,就是乙個新樣本進入以後,我們需要k個鄰居 距離最近的樣本 來判斷猜測新樣本的符合的類別 對於兩個特徵點的...
KNN演算法筆記
knn k nearest neighbor algorithm 也就是k近鄰演算法,顧名思義,可以形象的理解為求k個最近的鄰居。當k 1時,knn 演算法就成了最近鄰演算法,即尋找最近的哪個鄰居。該演算法簡單的說就是給定乙個訓練資料集,對新輸入例項,在訓練資料集中找到屬於該例項最鄰近的k個例項,如...
1 KNN 學習筆記
k near neighbor 優點 缺點 計算複雜度高,空間複雜度高 一般演算法流程 1 收集 準備和分析資料 2 訓練資料 不適用 knn 演算法 3 測試資料 4 使用演算法 準備 createdataset knn 分類演算法的流程 5 classify0 file2matrix 準備資料 ...