knn演算法是機器學習中入門級演算法,屬於監督性學習演算法。supervisedlearning.
通過plinko遊戲來介紹該演算法。
就是隨機在上面投球,然後球進下面的哪個地方就得多少分。
然後在規定得投次數得到最高得分數,應該怎麼投?
然後**每次投能得到多少分?
首先應該通過訓練資料集,看看在每個位置投得點,能得到多少分,然後**點距離每次點得距離,然後排序,那麼**點周圍出現次數最多得就是大概率得到得分數。
1,通過訓練得資料集,提取特徵值和標籤,特徵值就是距離左側得距離。標籤就是投下去得到得分數。
2,選擇**點,和k個距離近得數。計算每個點得距離。
3.排序,前k個點得出現最多次標籤得就是得分得大概率值。
#knn演算法是尋找k個距離最近的鄰居,然後根據已知的鄰居label,出現次數最多的,推斷出測試點的類別。**結果:# polinko 模擬
import numpy as np
import collections as c
def knn(k,predictpoint,feature,label):
# 先求出**點與周圍點的距離,然後排序,找出距離最近的k個點,出現最多的次數,就是**結果。
# map內建函式(func,iterable)
distance = list(map(lambda x: abs(200 - x), feature))
# np.sort()是直接排序,而我們需要feature和labell聯絡一起
# print(np.sort(distance))
# 所以應該使用np.argsort()可以得到排序的後的index,可以與label關聯
sort_index = np.argsort(distance)
# 通過切片找出k個最鄰近的點
return c.counter(label[sort_index][:k]).most_common(1)[0][0] # 返回的是(4,2),表示在k的最鄰近元素,4出現最多次數為2
if __name__ == '__main__':
data = np.array([
[120, 3],
[140, 3],
[160, 3],
[40, 2],
[70, 2],
[200, 4],
[250, 4],
[100, 3]
])feature = data[:,0]
label = data[:,-1]
k = 5
predictpoint = 170
print(knn(k,predictpoint,feature,label))
3**中給出的資料集是隨機寫的,不一定準。
現在選擇真實的資料集,通過numpy中loadtext()讀取csv文字資料集。
np.loadtxt("data01.csv",delimiter=",")這個第乙個引數檔名稱,第二個delimiter是資料分割符.缺點:對於資料量很大得訓練集合,耗費記憶體。對硬體要求較高。然後就和後面一樣,提取特徵值和標籤值,計算k個局裡近的距離。
但是和真實的還有有差距,這個是怎麼回事。
所以造成結果不正確的原因有這些:
還需要1.調整引數,簡稱調參。
2.可能還有其他維度特徵會影響結果,但是現在只給了一種特徵值。
機器學習之KNN(K近鄰演算法)
knn k nearest neighbor 演算法利用的數學思想極少 思想 對於乙個新來的點,根據判斷k個最近的點,來判斷新來的點的類別。過程 1 先計算新來的點與樣本中每乙個點的距離 尤拉距離 2 找到最近的k個點 可以用np.argsort 3 找到k個點中類別最多的點的類 所以k鄰近演算法可...
KNN K最近鄰演算法 例項應用
knn演算法是尋找最近的k個資料,推測新資料的分類 通用步驟 計算距離 常用有歐幾里得距離 馬氏距離 公升序排序 取前k個 加權平均 k的選取 資料分析與預處理 m 惡性 b 良性 其他資料為判斷良性 惡性的依據 劃分資料集 取資料的1 3作為測試集,2 3作為訓練集 import random i...
機器學習之KNN K近鄰演算法(二 演算法案例)
目錄 一 knn的簡單實現案例 二 sklearn的knn應用 鳶尾花資料分類 三 sklearn中knn的重要引數 假設我們有兩類樣本 a和b,均為二維資料,a類包括 2,8 2.5,10 2,9 b類包括 4,2 4,1 4.5,3 測試樣本點為 3,9 首先匯入資料,資料分布如下圖 impor...