參考文章:輸入為例項的特徵向量,計算新資料與訓練資料之間的距離,選取k個距離最近的資料進行分類或回歸判斷《python大戰機器學習》(不好,就是官方文件的中文版再加上幾個簡單的例子)
資料探勘十大演算法–k近鄰演算法
機器學習筆記—knn演算法
常用樣本相似性和距離度量方法
對於分類問題:輸出為例項的類別。分類時,對於新的例項,根據其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,...