knn演算法的筆記1

2021-09-26 13:31:40 字數 2757 閱讀 8834

#機器學習實戰的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 準備資料 ...