KNN演算法總結

2021-09-29 08:21:03 字數 3388 閱讀 6995

【總體】 分類演算法:

​ 有目標值,離散型

乙個樣本在特徵空間中的k個最相似(即特徵空間中最鄰近)的樣本中的大多數屬於某乙個類別,則該樣本也屬於這個類別。

k:(本身取值對演算法有影響,又不能通過演算法訓練確定值的變數叫做超引數)

距離:scikit-learn:

機器學習工具

k近鄰的sklearn的實現:

sklearn.neighbors.kneighborsclassifier(n_neighbors=5)

.fit(x,y)    # 訓練資料集的特徵值和目標值

.predict(x) # 需要**的而資料集合的特徵值

距離度量的幾個方式:

1 歐式距離(euclidean distance):

2 曼哈頓距離(manhattan distance):

3 切比雪夫距離 (chebyshev distance):

4 閔可夫斯基距離(minkowski distance):

前四個距離公式小結:前面四個距離公式都是把單位相同看待了,所以計算過程不是很科學

k值過小:

容易受到異常點的影響 容易過擬合

k值過大:

受到樣本均衡的問題 容易欠擬合

超引數:例如,這裡的k值,對演算法有影響,但又不能直接通過演算法訓練得到的值

fit 儲存所有訓練資料

predict 步驟:

1 計算距離 2 排序 3 距離最小的前k個 4 **類別

kd樹,針對尋找topk問題的優化

本質是二叉樹,通過二分法對特徵空間進行劃分,同時生成一顆二叉樹

最近領域的搜尋:

在回溯過程中,需要用到乙個佇列,儲存需要回溯的點,在判斷其他子節點空間中是否有可能有距離查詢點更近的資料點時,做法是以查詢點為圓心,以當前的最近距離為半徑畫圓,這個圓稱為候選超球(candidate hypersphere),如果圓與回溯點的軸相交,則需要將軸另一邊的節點都放到回溯佇列裡面來

api:

sklearn.neighbors.kneighborsclassifier(n_neighbors=5,algorithm=『auto』)

algorithm:

​ 獲取資料

​ 基本資料處理

​ 特徵工程

​ 對資料集進行劃分(訓練資料集和測試資料集)

​ 找合適的演算法進行訓練

​ **

​ 評估

sklearn.datasets

load_*

fetch_*

iris = load_iris()

iris.data # 特徵值 ndarray 2d

.target # 目標值 ndarray 1d

.feature_names # 特徵值的名字

.target_names # 目標值的說明

.descr # 資料描述

資料集的劃分 預設 訓練集75% 測試集25%

sklearn.model_selection.train_test_split(arrays, *options)

x_train, x_test, y_train, y_test = train_test_split(x, y)

test_size=

train_size=

特徵預處理

量綱單位

數量級不一致(相差太大)

計算精度不容易達到,容易溢位

0.01

里程數 * k1 + 公升數 * k2 + 消耗時間比 * k3

1.3 特徵預處理api

sklearn.preprocessing

(x - x.min())/(x.max() - x.min()) * (mx - mi) + mi

歸一化:

sklearn.preprocessing.minmaxscaler(feature_range=(0,1)… )

.fit_transform(2darray) # .fit .transform

.fit(2darray) # 計算後需要轉換的時候需要用的引數

.transform(2darray) # 拿著引數對資料進行轉換

robust(魯棒性) 穩定性,穩健性

最大值與最小值非常容易受異常點影響,不robust

精確小資料場景

標準化:(以後用這個)

x』 = (x - mean)/std

std = sqrt

std/std = sqrt/std

1 = sqrt

1 = sqrt

1 = sqrt

1 = sqrt

1 = sqrt

sklearn.preprocessing.standardscaler(

).fit_transform(x)

.fit(x)

# mean std

.transform(x)

# (x-mean)/std

# 3、特徵工程:標準化

transfer = standardscaler(

)x_train = transfer.fit_transform(x_train)

x_test = transfer.transform(x_test)

# 細節:注意點 這裡 x_train 與 x_test 來自於同乙個資料集,因此,咱們只需要fit 一次,保證裡面資料的 std 與 mean 一致

優點:

​ 簡單有效

​ 重新訓練的代價低

​ 適合類域交叉樣本[ 像svm,就不太好區分,主要是 一堆紅色,一堆黃色,某處又一堆紅色,又一堆黃色,這樣svm難區分,而我們的knn則容易,因為knn方法主要靠周圍有限的鄰近的樣本,而不是靠判別類域(即有多少種的分類)的方法來確定所屬類別的,因此對於類域的交叉或重疊較多的待分樣本集來說,knn方法較其他方法更為適合。]

​ 適合大樣本自動分類 [只要咱們的記憶體能夠吃得消,就可以]

缺點:​ 惰性學習

​ 類別評分不是規格化

​ 輸出可解釋性不強(因為具體的按某一舉例評判,咱們是不知道距離的,距離判斷的好壞咱也不太清楚)

​ 對不均衡的樣本不擅長 (例如:二分類 乙個類別有乙個資料,另外乙個樣本含有99個資料,這樣的問題咱們knn去分類則不太容易)

​ 計算量較大【目前常用的解決方法是事先對已知樣本點進行剪輯,事先去除對分類作用不大的樣本】

K近鄰 KNN 演算法總結

knn演算法是選擇與輸入樣本在特徵空間內最近鄰的k個訓練樣本並根據一定的決策規則給出輸出結果。決策規則 分類任務 輸出結果為k個訓練樣本中佔大多數的類。回歸任務 輸出結果為k個訓練樣本值的平均值。如下圖的分類任務,輸出結果為w1類。k值的選擇 距離度量和分類決策規則是k近鄰演算法的三個基本要素。分類...

KNN演算法總結 python實現

k最近鄰 knn,k nearestneighbor 分類演算法 所謂k最近鄰,就是k個最近的鄰居的意思,說的是每個樣本都可以用它最接近的k個鄰居來代表。用的是近朱者赤近墨者黑的思想。knn沒有顯式的學習過程,也就是說沒有訓練階段,資料集事先已有了分類和特徵值,待收到新樣本後直接進行處理。思路是 如...

手推演算法 KNN總結

k近鄰演算法,即k nearest neighbor algorithm,簡稱knn演算法,可以根據字面意思理解為 k個最近的鄰居。因為k近鄰是分類演算法,找到最近的鄰居就能知道自己所在的類別。k近鄰用於解決分類問題。因為需要計算特徵之間的距離,所以需要將資料集中的特徵資料變成數值型和標稱型。1.計...