机器学习第9天:K-邻近算法模型(KNN)
文章目錄
- 一、前言
- 二、基本概念
- 三、代碼實現(xiàn)
- 1. 問題簡介
- 2.導(dǎo)入數(shù)據(jù)
- 3.將數(shù)據(jù)集分成訓(xùn)練集和測試集
- 4.K-鄰近算法模型
- 5.結(jié)果預(yù)測
- 6.模型評分
一、前言
- 語言環(huán)境:Python3.6.5
- 編譯器:jupyter notebook
- 代碼|數(shù)據(jù):微信公眾號(K同學(xué)啊)中回復(fù):第8天
二、基本概念
商業(yè)哲學(xué)家 Jim Rohn 說過一句話,“你,就是你最常接觸的五個人的平均。”那么,在分析一個人時,我們不妨觀察和他最親密的幾個人。同理的,在判定一個未知事物時,可以觀察離它最近的幾個樣本,這就是KNN(k最近鄰)的方法。
K-近鄰算法是一種基本分類和回歸方法。
K-近鄰算法,即是給定一個訓(xùn)練數(shù)據(jù)集,輸入一個新的實例,在訓(xùn)練數(shù)據(jù)集中找到與該實例最鄰近的K個實例,這K個實例主要是哪一類別,那么就把該實例分類到這個類中。引用維基百科上的一幅圖:
藍色方塊與紅色三角形為訓(xùn)練集中的實例,綠色小圓是新輸入的實例,現(xiàn)在在現(xiàn)有實例中取K個離小綠圓最近實例用于判斷其類別。
- 當K=3時,所取實例在實線圓內(nèi),紅三角占比最大,將新輸入實例歸為紅三角一類。
- 當K=5時,所取實例在虛線圓內(nèi),綠方塊占比最大,將新輸入實例歸為綠方塊一類。
在KNN中存在兩個重要問題,一個是K的取值問題,一個是距離計算問題,這里先不做討論,僅僅引入KNN這個概念,明白它是一個什么東西,在后面文章中我們再對這兩個問題進行深入討論。下文將通過sklearn包來實現(xiàn)KNN。
三、代碼實現(xiàn)
1. 問題簡介
背景: 海倫一直使用在線約會網(wǎng)站尋找適合自己的約會對象。盡管約會網(wǎng)站會推薦不同的人選,但她沒有從中找到喜歡的人。經(jīng)過一番總結(jié),她發(fā)現(xiàn)曾交往過三種類型的人:
- ①不喜歡的人;
- ②魅力一般的人;
- ③極具魅力的人。
她現(xiàn)在總結(jié)好的數(shù)據(jù)中(即訓(xùn)練集)包含三種特征:
- ①每年獲得的飛行常客里程數(shù)
- ②玩視頻游戲所耗時間百分比
- ③每周消費的冰淇淋公升數(shù)
她希望根據(jù)現(xiàn)有的數(shù)據(jù)來判斷一個陌生男人會被她歸到哪一類。
2.導(dǎo)入數(shù)據(jù)
import pandas as pd data=pd.read_table('../data/datingTestSet2.txt',sep='\t',header=None) data.head() """ 0:每年獲得的飛行??屠锍虜?shù) 1:玩視頻游戲所耗時間百分比 2:每周消費的冰淇淋公升數(shù) 3:人物類別(不喜歡的人、魅力一般的人、極具魅力的人) 輸出:0 1 2 3 0 40920 8.326976 0.953952 3 1 14488 7.153469 1.673904 2 2 26052 1.441871 0.805124 1 3 75136 13.147394 0.428964 1 4 38344 1.669788 0.134296 1 """ X = data.iloc[:,:3] y = data.iloc[:,3]3.將數(shù)據(jù)集分成訓(xùn)練集和測試集
from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=3)4.K-鄰近算法模型
from sklearn.neighbors import KNeighborsClassifier knc = KNeighborsClassifier() knc.fit(X_train, y_train)5.結(jié)果預(yù)測
data["預(yù)測結(jié)果"] = knc.predict(data.iloc[:,:3]) data.head(10) """ 輸出:0 1 2 3 預(yù)測結(jié)果 0 40920 8.326976 0.953952 3 3 1 14488 7.153469 1.673904 2 2 2 26052 1.441871 0.805124 1 3 3 75136 13.147394 0.428964 1 1 4 38344 1.669788 0.134296 1 3 5 72993 10.141740 1.032955 1 1 6 35948 6.830792 1.213192 3 3 7 42666 13.276369 0.543880 3 3 8 67497 8.631577 0.749278 1 1 9 35483 12.273169 1.508053 3 3 """6.模型評分
knc.score(X_test,y_test) """ 輸出:0.796 """參考文章:
1.https://zhuanlan.zhihu.com/p/25994179
2.維基百科
3.https://www.joinquant.com/view/community/detail/a98b7021e7391c62f6369207242700b2
總結(jié)
以上是生活随笔為你收集整理的机器学习第9天:K-邻近算法模型(KNN)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: K折交叉验证(StratifiedKFo
- 下一篇: CSDN博客图片居中问题解决方案