墾利縣建設(shè)局網(wǎng)站admin5站長(zhǎng)網(wǎng)
作者:王同學(xué) 來(lái)源:投稿
編輯:學(xué)姐
1. 基本概念
1.1 KNN
k近鄰法(k-nearest neighbor,k-NN)是一種基本分類與回歸方法。
k近鄰法的輸入為實(shí)例的特征向量對(duì)應(yīng)于特征空間的點(diǎn);輸出為實(shí)例的類別,可以取多類。
k近鄰法假設(shè)給定一個(gè)訓(xùn)練數(shù)據(jù)集,其中的實(shí)例類別已定。分類時(shí),對(duì)新的實(shí)例,根據(jù)其k個(gè)最近鄰的訓(xùn)練實(shí)例的類別,通過多數(shù)表決等方式進(jìn)行預(yù)測(cè)。因此,k近鄰法不具有顯式的學(xué)習(xí)過程。
k 近鄰法1968年由Cover和Hart提出。
1.2 K-means
K-means是一種聚類方法,聚類是針對(duì)給定的樣本,依據(jù)它們特征的相似度或距離,將其歸并到若干個(gè)“類”或“簇”的數(shù)據(jù)分析問題。
聚類的目的是通過得到的類或簇來(lái)發(fā)現(xiàn)數(shù)據(jù)的特點(diǎn)或?qū)?shù)據(jù)進(jìn)行處理。
聚類屬于無(wú)監(jiān)督學(xué)習(xí),因?yàn)橹皇歉鶕?jù)樣本的相似度或距離將其進(jìn)行歸類,而類或簇事先并不知道。
1.3 KNN 和 K-means對(duì)比
KNN
-
分類算法
-
監(jiān)督學(xué)習(xí)
-
數(shù)據(jù)集是帶Label的數(shù)據(jù)
-
沒有明顯的訓(xùn)練過程,基于Memory-based learning
-
K值含義 - 對(duì)于一個(gè)樣本X,要給它分類,首先從數(shù)據(jù)集中,在X附近找離它最近的K個(gè)數(shù)據(jù)點(diǎn),將它劃分為歸屬于類別最多的一類
K-means
-
聚類算法
-
非監(jiān)督學(xué)習(xí)
-
數(shù)據(jù)集是無(wú)Label,雜亂無(wú)章的數(shù)據(jù)
-
有明顯的訓(xùn)練過程
-
K值含義- K是事先設(shè)定的數(shù)字,將數(shù)據(jù)集分為K個(gè)簇,需要依靠人的先驗(yàn)知識(shí)
2. KNN原理、實(shí)現(xiàn)過程
2.1 KKN原理:
KNN算法最簡(jiǎn)單粗暴的就是將預(yù)測(cè)點(diǎn)與所有點(diǎn)距離進(jìn)行計(jì)算,然后保存并排序,選出前面K個(gè)值看看哪些類別比較多,則預(yù)測(cè)的點(diǎn)屬于哪類。
2 KNN過程:
對(duì)未知類別屬性的數(shù)據(jù)集中的每個(gè)點(diǎn)依次執(zhí)行以下操作:
(1) 計(jì)算已知類別數(shù)據(jù)集中的點(diǎn)與當(dāng)前點(diǎn)之間的距離;
(2) 按照距離遞增次序排序;
(3) 選取與當(dāng)前點(diǎn)距離最小的k個(gè)點(diǎn);
(4) 確定前k個(gè)點(diǎn)所在類別的出現(xiàn)頻率;
(5) 返回前k個(gè)點(diǎn)出現(xiàn)頻率最高的類別作為當(dāng)前點(diǎn)的預(yù)測(cè)分類
2.2.1 距離度量(1)
2.2.2 K值選擇(3)
2.2.2.1 K值選擇過小:
-
如果選擇較小的k值,就相當(dāng)于用較小的鄰域中的訓(xùn)練實(shí)例進(jìn)行預(yù)測(cè),“學(xué)習(xí)”的近似誤差(approximation error)會(huì)減小,只有與輸入實(shí)例較近的(相似的)訓(xùn)練實(shí)例才會(huì)對(duì)預(yù)測(cè)結(jié)果起作用。
-
但缺點(diǎn)是“學(xué)習(xí)”的估計(jì)誤差(estimation error)會(huì)增大,預(yù)測(cè)結(jié)果會(huì)對(duì)近鄰的實(shí)例點(diǎn)非常敏感。如果鄰近的實(shí)例點(diǎn)恰巧是噪聲,預(yù)測(cè)就會(huì)出錯(cuò)。
-
換句話說(shuō),k 值的減小就意味著整體模型變得復(fù)雜,容易發(fā)生過擬合。
2.2.2.2 K值選擇過大:
-
如果選擇較大的k值,就相當(dāng)于用較大鄰域中的訓(xùn)練實(shí)例進(jìn)行預(yù)測(cè)。
-
優(yōu)點(diǎn)是可以減少學(xué)習(xí)的估計(jì)誤差,但缺點(diǎn)是學(xué)習(xí)的近似誤差會(huì)增大。這時(shí)與輸入實(shí)例較遠(yuǎn)的(不相似的)訓(xùn)練實(shí)例也會(huì)對(duì)預(yù)測(cè)起作用,使預(yù)測(cè)發(fā)生錯(cuò)誤。
-
換句話說(shuō),k值的增大就意味著整體的模型變得簡(jiǎn)單。
如果k=N,那么無(wú)論輸入實(shí)例是什么,都將簡(jiǎn)單地預(yù)測(cè)它屬于在訓(xùn)練實(shí)例中最多的類。這時(shí),模型過于簡(jiǎn)單,完全忽略訓(xùn)練實(shí)例中的大量有用信息,是不可取的。
2.2.2.3 那么該如何確定K取多少值好呢?
答案是通過交叉驗(yàn)證(將樣本數(shù)據(jù)按照一定比例,拆分出訓(xùn)練用的數(shù)據(jù)和驗(yàn)證用的數(shù)據(jù),比如6:4拆分出部分訓(xùn)練數(shù)據(jù)和驗(yàn)證數(shù)據(jù)),從選取一個(gè)較小的K值開始,不斷增加K的值,然后計(jì)算驗(yàn)證集合的方差,最終找到一個(gè)比較合適的K值。
2.2.3 確定前k個(gè)點(diǎn)所在類別的出現(xiàn)頻率(4)
eg.當(dāng)K取4時(shí)候,包含3個(gè)紅點(diǎn)和1個(gè)藍(lán)點(diǎn)
2.2.4 返回前k個(gè)點(diǎn)出現(xiàn)頻率最高的類別作為當(dāng)前點(diǎn)的預(yù)測(cè)分類(5)
因?yàn)?/4>1/4,所以預(yù)測(cè)的點(diǎn)的類別屬于紅色,KNN完成。
3.K-means原理、實(shí)現(xiàn)過程
3.1 K-means原理:
K-Means算法的特點(diǎn)是類別的個(gè)數(shù)是人為給定的,如果讓機(jī)器自己去找類別的個(gè)數(shù),通過一次次重復(fù)這樣的選擇質(zhì)心計(jì)算距離后分類-再次選擇新質(zhì)心的流程,直到我們分組之后所有的數(shù)據(jù)都不會(huì)再變化了,也就得到了最終的聚合結(jié)果。
3.2K-means過程:
(1)隨機(jī)選取k個(gè)質(zhì)心(k值取決于你想聚成幾類)
(2)計(jì)算樣本到質(zhì)心的距離,距離質(zhì)心距離近的歸為一類,分為k類
(3)求出分類后的每類的新質(zhì)心
(4)再次計(jì)算計(jì)算樣本到新質(zhì)心的距離,距離質(zhì)心距離近的歸為一類
(5)判斷新舊聚類是否相同,如果相同就代表已經(jīng)聚類成功,如果沒有就循環(huán)2-4步驟直到相同
3.2.1 隨機(jī)選取k個(gè)質(zhì)心(k值取決于你想聚成幾類)
假設(shè)我想聚4類,那我們隨機(jī)選取四個(gè)五角星作為質(zhì)心(大哥)
3.2.2 計(jì)算樣本到質(zhì)心的距離,距離質(zhì)心距離近的歸為一類,分為k類
計(jì)算除質(zhì)心外的樣本的歐式距離,樣本離哪個(gè)質(zhì)心近,該樣本就跟哪個(gè)質(zhì)心
換句話說(shuō)就是,小圓點(diǎn)是小弟,五角星是大哥,小弟離哪個(gè)大哥近,那么這個(gè)小弟就跟哪個(gè)大哥混。
3.2.3 求出分類后的每類的新質(zhì)心
上面我們已經(jīng)分為4類了,這一步我們需要從4類中重新選出新的質(zhì)心(新的大哥)。
3.2.4 再次計(jì)算計(jì)算樣本到新質(zhì)心的距離,距離質(zhì)心距離近的歸為一類
同樣用上面方法計(jì)算樣本到質(zhì)心(新產(chǎn)生的大哥)的歐式距離,框起來(lái)的就是新大哥。
3.2.5 判斷新舊聚類是否相同
當(dāng)發(fā)現(xiàn)聚類情況并沒有變化,這就說(shuō)明我們的計(jì)算收斂已經(jīng)結(jié)束了,不需要繼續(xù)進(jìn)行分組了,最終數(shù)據(jù)成功按照相似性分成了4組。即紅、橙、綠、藍(lán),完成聚類。
4.總結(jié):
4.1KNN
-
k 近鄰法是基本且簡(jiǎn)單的分類與回歸方法。k 近鄰法的基本做法是∶ 對(duì)給定的訓(xùn)練實(shí)例點(diǎn)和輸入實(shí)例點(diǎn),首先確定輸入實(shí)例點(diǎn)的k個(gè)最近鄰訓(xùn)練實(shí)例點(diǎn),然后利用這k個(gè)訓(xùn)練實(shí)例點(diǎn)的類的多數(shù)來(lái)預(yù)測(cè)輸入實(shí)例點(diǎn)的類。
-
k 近鄰模型對(duì)應(yīng)于基于訓(xùn)練數(shù)據(jù)集對(duì)特征空間的一個(gè)劃分。k 近鄰法中,當(dāng)訓(xùn)練集、距離度量、k值及分類決策規(guī)則確定后,其結(jié)果唯一確定。
-
k 近鄰法三要素∶距離度量、k 值的選擇和分類決策規(guī)則。常用的距離度量是歐氏距離及更一般的L。距離。k值小時(shí),k 近鄰模型更復(fù)雜;k值大時(shí),k 近鄰模型更簡(jiǎn)單。 k 值的選擇反映了對(duì)近似誤差與估計(jì)誤差之間的權(quán)衡,通常由交叉驗(yàn)證選擇最優(yōu)的k。常用的分類決策規(guī)則是多數(shù)表決, 對(duì)應(yīng)于經(jīng)驗(yàn)風(fēng)險(xiǎn)最小化。
-
k 近鄰法的實(shí)現(xiàn)需要考慮如何快速搜索k個(gè)最近鄰點(diǎn)。kd樹是一種便于對(duì)k 維空間中的數(shù)據(jù)進(jìn)行快速檢索的數(shù)據(jù)結(jié)構(gòu)。kd樹是二叉樹,表示對(duì)k維空間的一個(gè)劃分,其每個(gè)結(jié)點(diǎn)對(duì)應(yīng)于k維空間劃分中的一個(gè)超矩形區(qū)域。利用kd樹可以省去對(duì)大部分?jǐn)?shù)據(jù)點(diǎn)的搜索,從而減少搜索的計(jì)算量。
4.2K-means
-
聚類是針對(duì)給定的樣本,依據(jù)它們屬性的相似度或距離,將其歸并到若干個(gè)“類”或“簇”的數(shù)據(jù)分析問題。一個(gè)類是樣本的一個(gè)子集。直觀上,相似的樣本聚集在同類,不相似的樣本分散在不同類。
-
距離或相似度度量在聚類中起著重要作用。 常用的距離度量有閔可夫斯基距離,包括歐氏距離、曼哈頓距離、切比雪夫距離以及馬哈拉諾比斯距離。常用的相似度度量有相關(guān)系數(shù)、夾角余弦。 用距離度量相似度時(shí),距離越小表示樣本越相似;用相關(guān)系數(shù)時(shí),相關(guān)系數(shù)越大表示樣本越相似。
-
k 均值聚類是常用的聚類算法,有以下特點(diǎn)?;趧澐值木垲惙椒?#xff1b;類別數(shù)k 事先指定;以歐氏距離平方表示樣本之間的距離或相似度,以中心或樣本的均值表示類別;以樣本和其所屬類的中心之間的距離的總和為優(yōu)化的目標(biāo)函數(shù);得到的類別是平坦的、非層次化的;算法是迭代算法,不能保證得到全局最優(yōu)。
-
k均值聚類算法,首先選擇k個(gè)類的中心,將樣本分到與中心最近的類中,得到一個(gè)聚類結(jié)果;然后計(jì)算每個(gè)類的樣本的均值,作為類的新的中心;重復(fù)以上步驟,直到收斂為止。
5.代碼實(shí)戰(zhàn):
5.1 KNN實(shí)戰(zhàn):
(1)首先自制一個(gè)數(shù)據(jù)集:
(2)導(dǎo)入工具包
import?pandas?as?pd
from?sklearn.neighbors?import?KNeighborsClassifier??
(3)讀取數(shù)據(jù)
data=pd.read_excel("knndata.xlsx")
data??#打印出來(lái)看一下?
(4)劃分?jǐn)?shù)據(jù)集
train_feature=data.iloc[0:9,1:4]#紅色部分
train_label=data.iloc[0:9,4:5]#藍(lán)色部分
test_feature=data.iloc[9:10,1:4]#綠色部分
(5)建模預(yù)測(cè)
knn=KNeighborsClassifier(n_neighbors=4)#n_neighbors=4即指定K值為4
knn.fit(train_feature,train_label)#模型訓(xùn)練
knn.predict(test_feature)#模型預(yù)測(cè)
輸出:
5.2 K-means代碼實(shí)戰(zhàn):
(1)自制個(gè)數(shù)據(jù)集
(2)導(dǎo)入工具包
import?pandas?as?pd
from?sklearn.cluster?import?KMeans
(3)讀取數(shù)據(jù)
data=pd.read_excel("kmeans.xlsx")
data#打印看一下
(4)劃分?jǐn)?shù)據(jù)集
train_feature=data.iloc[0:10,1:4]#紅色部分
(5)建模預(yù)測(cè)
kmeans?=?KMeans(n_clusters=3)#n_clusters=3即指定劃分為3個(gè)類型
kmeans.fit(train_feature)#模型訓(xùn)練
label_kmeans?=?kmeans.predict(train_feature)#模型預(yù)測(cè)
label_kmeans
輸出:
關(guān)注下方卡片《學(xué)姐帶你玩AI》🚀🚀🚀
ACL&CVPR1000+篇論文等你來(lái)拿
回復(fù)“ACL”或“CVPR”免費(fèi)領(lǐng)
碼字不易,歡迎大家點(diǎn)贊評(píng)論收藏!