【机器学习】分类算法-K-近邻算法
目標(biāo)
-
說明K-近鄰算法的距離公式
-
說明K-近鄰算法的超參數(shù)K值以及取值問題
-
說明K-近鄰算法的優(yōu)缺點(diǎn)
-
應(yīng)用KNeighborsClassifier實(shí)現(xiàn)分類
-
了解分類算法的評估標(biāo)準(zhǔn)準(zhǔn)確率
-
應(yīng)用:Facebook簽到位置預(yù)測
K-近鄰算法(KNN)
定義
如果一個樣本在特征空間中的k個最相似(即特征空間中最鄰近)的樣本中的大多數(shù)屬于某一個類別,則該樣本也屬于這個類別,即由你的“鄰居”來推斷出你的類別
來源:KNN算法最早是由Cover和Hart提出的一種分類算法
距離公式
兩個樣本的距離可以通過如下公式計(jì)算,又叫歐式距離
曼哈頓距離 絕對值距離
明可夫斯基距離
電影類型分析
假設(shè)我們有現(xiàn)在幾部電影
其中? 號電影不知道類別,如何去預(yù)測?我們可以利用K近鄰算法的思想
問題
如果取的最近的電影數(shù)量不一樣?會是什么結(jié)果?
k 值取值過大,樣本不均衡的影響
k 值取值過小,容易受到異常點(diǎn)影響
結(jié)合前面的約會對象數(shù)據(jù),分析k-近鄰算法需要做怎么樣的處理
無量綱化的處理
推薦 標(biāo)準(zhǔn)還
K-近鄰算法數(shù)據(jù)的特征工程處理
結(jié)合前面的約會對象數(shù)據(jù),分析K-近鄰算法需要做什么樣的處理
K-近鄰算法API
-
sklearn.neighbors.KNeighborsClassifier(n_neighbors=5,algorithm=‘a(chǎn)uto’)
-
n_neighbors:int,可選(默認(rèn)= 5),k_neighbors查詢默認(rèn)使用的鄰居數(shù)
-
algorithm:{‘a(chǎn)uto’,‘ball_tree’,‘kd_tree’,‘brute’},可選用于計(jì)算最近鄰居的算法:‘ball_tree’將會使用 BallTree,‘kd_tree’將使用 KDTree。‘a(chǎn)uto’將嘗試根據(jù)傳遞給fit方法的值來決定最合適的算法。 (不同實(shí)現(xiàn)方式影響效率)
-
案例1 鳶尾花種類預(yù)測
數(shù)據(jù)集介紹
Iris數(shù)據(jù)集是常用的分類實(shí)驗(yàn)數(shù)據(jù)集,由Fisher, 1936收集整理。Iris也稱鳶尾花卉數(shù)據(jù)集,是一類多重變量分析的數(shù)據(jù)集。關(guān)于數(shù)據(jù)集的具體介紹:
步驟
-
獲取數(shù)據(jù)
-
數(shù)據(jù)集劃分
-
特征工程
- 標(biāo)準(zhǔn)化
-
機(jī)器學(xué)習(xí)訓(xùn)練 KNN 預(yù)估器流程
-
模型評估
代碼
from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsClassifier from sklearn.preprocessing import StandardScalerdef knn_iris():# 1) 獲取數(shù)據(jù)iris = load_iris()# 2) 數(shù)據(jù)集劃分x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, random_state=22)# 3) 特征工程 標(biāo)準(zhǔn)化transfer = StandardScaler()# 訓(xùn)練集做標(biāo)準(zhǔn)化x_train = transfer.fit_transform(x_train)# 測試集 標(biāo)準(zhǔn)化 轉(zhuǎn)化x_test = transfer.transform(x_test)# 4) KNN 預(yù)估器流程estimator = KNeighborsClassifier(n_neighbors=3)estimator.fit(x_train, y_train)# 5) 模型評估# 方法一:直接比對真實(shí)值和預(yù)測值y_predict = estimator.predict(x_test)print("預(yù)測(y_predict):\n", y_predict)print("直接比對真實(shí)值和預(yù)測值:\n", y_test == y_predict)# 方法二:計(jì)算準(zhǔn)確率score = estimator.score(x_test, y_test)print("準(zhǔn)確率為:\n", score)return Noneif __name__ == '__main__':knn_iris()K-近鄰總結(jié)
優(yōu)點(diǎn)
簡單,易于理解,易于實(shí)現(xiàn),無需訓(xùn)練
缺點(diǎn)
-
懶惰算法,對測試樣本分類時(shí)的計(jì)算量大,內(nèi)存開銷大
-
必須指定K值,K值選擇不當(dāng)則分類精度不能保證
-
使用場景:小數(shù)據(jù)場景,幾千~幾萬樣本,具體場景具體業(yè)務(wù)去測試
總結(jié)
以上是生活随笔為你收集整理的【机器学习】分类算法-K-近邻算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【机器学习】分类算法-sklearn转换
- 下一篇: 【机器学习】K-近邻算法-模型选择与调优