KNN分類和回歸學習 sklearn

2022-08-30 15:42:14 字數 3527 閱讀 4587

參考文章:

《python大戰機器學習》(不好,就是官方文件的中文版再加上幾個簡單的例子)

資料探勘十大演算法–k近鄰演算法

機器學習筆記—knn演算法

常用樣本相似性和距離度量方法

輸入為例項的特徵向量,計算新資料與訓練資料之間的距離,選取k個距離最近的資料進行分類或回歸判斷

對於分類問題:輸出為例項的類別。分類時,對於新的例項,根據其k個最近鄰的訓練例項的類別,通過多數表決等方式進行**。

對於回歸問題:輸出為例項的值。回歸時,對於新的例項,取其k個最近鄰的訓練例項的平均值為**值。

neighbors-based (基於鄰居的) 監督學習分為兩種: classification (分類)針對的是具有離散標籤的資料,regression (回歸)針對的是具有連續標籤的資料。

不具有顯示的學習過程,只是利用訓練資料集對特徵向量空間的劃分,並作為其分類的模型

三要素:k如何選擇距離如何度量分類決策的規則

應用中,k值一般取乙個較小的數值。通常採用叉驗證法來選取最優的k值就是比較不同k值時的交叉驗證平均誤差率,選擇誤差率最小的那個大值。例如選擇k= 1,2.3.對每個k=i做若干次交叉驗證,計算出平均誤差,然後比較、選出最小的那個

距離lp分類:歐氏距離、曼哈頓距離、漢明距離等

一般,連續變數選擇歐式距離作為度量,像文字分類這種離散的使用漢明距離

資料探勘十大演算法–k近鄰演算法

機器學習筆記—knn演算法

常用樣本相似性和距離度量方法

通常使用多數表決(經驗風險最小化),也可使用基於距離遠近進行加權投票(距離越近權重越大)

import numpy as np

from sklearn.datasets import load_digits

from sklearn.neighbors import kneighborsclassifier

sklearn.neighbors.kneighborsclassifier(n_neighbors=5, weights='uniform', algorithm='auto', leaf_size=30, p=2, metric='minkowski', metric_params=none, n_jobs=1, **kwargs)
引數

leaf_size:int,指定balltree/kdtree葉節點規模,影響樹的構建和查詢速度

metric:指定距離度量,參考文件距離表示

p:指定在minkowski距離上的指數p,p=1 對應曼哈頓距離,p=2 對應歐式距離

方法:

from sklearn.model_selection import train_test_split

defload_classification_data()

: digits = load_digits(

) xtrain = digits.data

ytrain = digits.target

return train_test_split(xtrain,ytrain,test_size =

0.2,random_state=

0)

def

test_knc

(*data)

: xtrain, xtest, ytrain, ytest = data

knc = kneighborsclassifier(

) knc.fit(xtrain,ytrain)

print

('train score: '

,knc.score(xtrain,ytrain)

)print

('test score: '

,knc.score(xtest,ytest)

)

xtrain, xtest, ytrain, ytest = load_classification_data(

)test_knc(xtrain, xtest, ytrain, ytest)

train score:  0.9902574808629089

test score: 0.975

def

test_knc_params

(*data,weight,k)

: xtrain, xtest, ytrain, ytest = data

knc = kneighborsclassifier(n_neighbors=k,weights=weight)

knc.fit(xtrain,ytrain)

print

('train score: '

,knc.score(xtrain,ytrain)

)print

('test score: '

,knc.score(xtest,ytest)

)

xtrain, xtest, ytrain, ytest = load_classification_data(

)test_knc_params(xtrain, xtest, ytrain, ytest,k=

100,weight=

'distance'

)

train score:  1.0

test score: 0.9361111111111111

sklearn.neighbors.radiusneighborsregressor(radius=1.0, weights='uniform', algorithm='auto', leaf_size=30, p=2, metric='minkowski', metric_params=none, **kwargs)
引數、方法和分類一樣

from sklearn.neighbors import kneighborsregressor
def

test_knr

(*data)

: xtrain, xtest, ytrain, ytest = data

knc = kneighborsclassifier(

) knc.fit(xtrain,ytrain)

print

('train score: '

,knc.score(xtrain,ytrain)

)print

('test score: '

,knc.score(xtest,ytest)

)

機器學習 K NN分類 回歸

k近鄰 從字面上理解,就是 近朱者赤,近墨者黑。和誰離得近和誰歸為一類。1 演算法原理 1 計算測試資料與各個訓練資料之間的距離,方法 閔可夫斯基距離 2 按照距離的遞增順序排序 3 選取距離最小的k個點 4 確定前k個點所在類別的出現頻率 即為各個類別出現次數 5 返回前k個點所在類別的出現頻率,...

筆記 KNN演算法實現分類和回歸

class knn def init self,k 初始化 self.k k deffit self,x,y 訓練方法 x 類陣列型別 二維 待訓練的樣本特徵 屬性 y 一維 樣本的目標值 標籤 self.x np.asarray x 轉化為ndarray陣列型別 self.y np.asarray...

20191010 分類與回歸 KNN進行回歸問題

classification 和 regression 分類和回歸的問題 回歸是求topk和value的平均值 分類時topk 現最多的類別 np中有乙個廣播矩陣,可以進行向量的加減 import numpy as np feature np.array 121,47 121.2,46.5 122,...