機(jī)器學(xué)習(xí)之K近鄰算法基本原理
機(jī)器學(xué)習(xí)中的K近鄰算法是一種基于實(shí)例的學(xué)習(xí)算法,有點(diǎn)像“人以類聚,物以群分”的說法。之前的文章很多都是說算法原理,這篇文章,我們來講講其優(yōu)缺點(diǎn)和使用場(chǎng)景。
一、K近鄰算法如何理解?
K近鄰(K-Nearest Neighbor, KNN)是一種基于實(shí)例的學(xué)習(xí)算法,它利用訓(xùn)練數(shù)據(jù)集中與待分類樣本最相似的K個(gè)樣本的類別來判斷待分類樣本所屬的類別。在機(jī)器學(xué)習(xí)中用于分類和回歸分析。
二、K近鄰算法的基本原理?
在訓(xùn)練數(shù)據(jù)集中找到與該實(shí)例最鄰近的K個(gè)實(shí)例, 如果這K個(gè)實(shí)例的大多數(shù)都屬于同一個(gè)分類,就把該輸入實(shí)例分類到這個(gè)類中。一般情況下,我們只選擇樣本集中前K個(gè)最相似的數(shù)據(jù),這就是K近鄰算法中k的出處(通常K是不大于20的整數(shù))。比如:比較3個(gè)最近的數(shù)據(jù),那么K=3。
最后,選擇K個(gè)最相似的數(shù)據(jù)中出現(xiàn)次數(shù)最多的分類,作為新數(shù)據(jù)的分類。
這種思想實(shí)際上也非常好理解,有點(diǎn)像“人以類聚,物以群分”的說法——如果你身邊的鄰居都來自同一個(gè)公司,那么你極有可能也屬于某個(gè)公司;如果你身邊的朋友絕大多數(shù)都屬于某個(gè)學(xué)校畢業(yè),那么你極有可能也曾經(jīng)在這個(gè)學(xué)校讀過書。
這種方式也很類似投票機(jī)制,新來的數(shù)據(jù)與舊數(shù)據(jù)相比對(duì),多數(shù)都屬于某個(gè)類別時(shí),采用少數(shù)服從多數(shù)的原則,給新數(shù)據(jù)歸類。
同樣,我們轉(zhuǎn)化到幾何的方式去看這個(gè)算法,KNN可以看成:有那么一堆你已經(jīng)知道分類的數(shù)據(jù),然后當(dāng)一個(gè)新數(shù)據(jù)進(jìn)入的時(shí)候,就開始跟已知數(shù)據(jù)里的每個(gè)點(diǎn)求距離,然后挑離這個(gè)訓(xùn)練數(shù)據(jù)最近的K個(gè)點(diǎn)看看這幾個(gè)點(diǎn)屬于什么類型,就把這個(gè)新的點(diǎn)歸到這個(gè)同屬大多數(shù)的類別里。
三、K近鄰算法的一些關(guān)鍵哪些?
1. 距離度量
KNN算法的核心在于距離度量,它決定了樣本之間的相似度。通過選擇合適的距離度量方法,KNN算法能夠準(zhǔn)確地找出與待分類樣本最相似的鄰居,從而進(jìn)行準(zhǔn)確的分類。
2. 如何確定K值
在KNN算法中,K值的選擇對(duì)分類結(jié)果具有重要影響。K值太小可能導(dǎo)致過擬合,即算法對(duì)訓(xùn)練數(shù)據(jù)的噪聲過于敏感;而K值太大則可能導(dǎo)致欠擬合,即算法忽略了訓(xùn)練數(shù)據(jù)中的有用信息。
確定K值的常用方法包括交叉驗(yàn)證和網(wǎng)格搜索。交叉驗(yàn)證是一種評(píng)估模型性能的方法,它將數(shù)據(jù)集劃分為多個(gè)子集,通過多次訓(xùn)練和測(cè)試來選擇最優(yōu)的K值。網(wǎng)格搜索則是一種參數(shù)調(diào)優(yōu)方法,它通過在一定的參數(shù)范圍內(nèi)進(jìn)行窮舉搜索,找到使得模型性能最優(yōu)的K值。
在實(shí)際應(yīng)用中,可以根據(jù)問題的具體需求和數(shù)據(jù)集的特性來選擇合適的K值。通常,可以通過實(shí)驗(yàn)和比較不同K值下的分類性能來確定最優(yōu)的K值。
3. 分類與回歸的區(qū)別
KNN算法既可以用于分類問題,也可以用于回歸問題。
分類問題
給定一個(gè)新樣本點(diǎn),KNN算法通常是通過找出訓(xùn)練集中與其最近的k個(gè)鄰居(根據(jù)某種距離度量),然后基于這k個(gè)鄰居中最常見的類別來預(yù)測(cè)新樣本的類別。
回歸問題
如果是回歸任務(wù),則是通過計(jì)算k個(gè)鄰居的平均值或其他統(tǒng)計(jì)量(如中位數(shù))來預(yù)測(cè)連續(xù)數(shù)值。
區(qū)別:
分類問題的目標(biāo)是預(yù)測(cè)離散型變量,即樣本的類別標(biāo)簽;而回歸問題的目標(biāo)是預(yù)測(cè)連續(xù)型變量,即樣本的具體數(shù)值
4. k鄰近算法的步驟
1)距離度量
選擇一個(gè)合適的距離度量函數(shù)(如歐氏距離、曼哈頓距離、馬氏距離等),用于計(jì)算測(cè)試樣本與每個(gè)訓(xùn)練樣本之間的差異程度。
2)確定k值
k是算法中的一個(gè)重要參數(shù),表示需要考慮的最近鄰居的數(shù)量。k值的選擇對(duì)模型性能有直接影響,較小的k可能導(dǎo)致模型對(duì)噪聲敏感,較大的k則可能使模型過于保守,傾向于平均結(jié)果。
3)搜索k近鄰
對(duì)于新的測(cè)試樣本,遍歷整個(gè)訓(xùn)練數(shù)據(jù)集,計(jì)算它與每個(gè)訓(xùn)練樣本的距離,并按升序排列,選取距離最近的k個(gè)樣本作為鄰居。
4)決策規(guī)則
分類任務(wù):采用多數(shù)表決法,統(tǒng)計(jì)k個(gè)鄰居中出現(xiàn)最多的類別,將該類別作為新樣本的預(yù)測(cè)類別。
回歸任務(wù):計(jì)算k個(gè)鄰居的目標(biāo)變量(連續(xù)數(shù)值)的平均值,將其作為新樣本的預(yù)測(cè)值。
5)邊界情況
在分類任務(wù)中,如果多個(gè)類別的數(shù)量相等,則可以設(shè)置額外的規(guī)則來打破平局(例如使用加權(quán)距離、考慮距離遠(yuǎn)近等)。
四、K近鄰算法的優(yōu)缺點(diǎn)是什么?
優(yōu)點(diǎn):
1、KNN算法簡(jiǎn)單易懂。它的工作原理直觀明了,基于實(shí)例進(jìn)行學(xué)習(xí),無需建立復(fù)雜的模型或進(jìn)行參數(shù)估計(jì)。這使得初學(xué)者能夠輕松理解并應(yīng)用該算法,同時(shí)也便于專業(yè)人員快速實(shí)現(xiàn)和調(diào)試。
2、KNN算法無需參數(shù)估計(jì)。與傳統(tǒng)的參數(shù)化模型相比,KNN算法不需要進(jìn)行復(fù)雜的參數(shù)訓(xùn)練和優(yōu)化過程。它直接利用訓(xùn)練數(shù)據(jù)集中的實(shí)例進(jìn)行分類或回歸,從而簡(jiǎn)化了算法的實(shí)現(xiàn)和調(diào)試過程。
3、KNN算法適合多分類問題。無論是二分類還是多分類問題,KNN算法都能有效地處理。它通過投票機(jī)制確定待分類樣本的類別,能夠處理具有多個(gè)類別的數(shù)據(jù)集,這使得KNN算法在實(shí)際應(yīng)用中具有廣泛的適用性。
缺點(diǎn):
1、KNN算法的計(jì)算量較大,尤其在處理大數(shù)據(jù)集時(shí)。由于KNN算法需要計(jì)算待分類樣本與訓(xùn)練集中每個(gè)樣本之間的距離,當(dāng)數(shù)據(jù)集規(guī)模較大時(shí),計(jì)算復(fù)雜度會(huì)急劇增加,導(dǎo)致算法運(yùn)行時(shí)間較長(zhǎng)。因此,在處理大規(guī)模數(shù)據(jù)集時(shí),KNN算法可能不是最佳選擇。
2、KNN算法對(duì)特征值敏感。算法的性能很大程度上取決于特征值的準(zhǔn)確性和完整性。如果特征值存在噪聲、缺失或異常值,可能會(huì)對(duì)KNN算法的分類結(jié)果產(chǎn)生負(fù)面影響。因此,在應(yīng)用KNN算法之前,需要對(duì)數(shù)據(jù)進(jìn)行適當(dāng)?shù)念A(yù)處理和特征工程,以提高算法的準(zhǔn)確性和穩(wěn)定性。
3、KNN算法需要選擇合適的K值和距離度量方法。K值的選擇對(duì)算法性能具有重要影響,過小的K值可能導(dǎo)致過擬合,而過大的K值可能導(dǎo)致欠擬合。此外,不同的距離度量方法可能會(huì)對(duì)分類結(jié)果產(chǎn)生不同的影響。因此,在實(shí)際應(yīng)用中,需要通過實(shí)驗(yàn)和比較不同K值和距離度量方法下的分類性能,選擇最優(yōu)的參數(shù)設(shè)置。
4、空間復(fù)雜度也較高,因?yàn)樾枰鎯?chǔ)所有訓(xùn)練數(shù)據(jù)。
5、對(duì)于大規(guī)模數(shù)據(jù)集和高維數(shù)據(jù),效果可能會(huì)下降,因?yàn)椤熬S度災(zāi)難”問題可能導(dǎo)致距離度量失去意義。
6、可解釋性差,無法提供決策規(guī)則或變量重要性信息。
五、K近鄰算法的適用場(chǎng)景是什么?
KNN適用于中小規(guī)模、低至中等維度的數(shù)據(jù)集,在特征空間相對(duì)簡(jiǎn)單或者沒有明顯規(guī)律的情形下效果較好。對(duì)于大規(guī)模數(shù)據(jù)集,一般會(huì)結(jié)合其他技術(shù)(如降維、索引優(yōu)化等)來提高效率。此外,由于其直觀性和易于理解性,KNN常被用作教學(xué)和快速原型設(shè)計(jì)的工具。
六、K近鄰算法應(yīng)用場(chǎng)景舉例
K近鄰算法憑借其靈活性和直觀性,在多個(gè)領(lǐng)域展現(xiàn)出了強(qiáng)大的適用性和有效性:
- 推薦系統(tǒng):在個(gè)性化推薦場(chǎng)景中,KNN被用于用戶偏好預(yù)測(cè)。例如,根據(jù)用戶的瀏覽歷史、購買記錄等信息,計(jì)算新用戶與已有用戶之間的相似度,然后找出K個(gè)最相似的鄰居用戶。這些鄰居用戶喜歡的商品或內(nèi)容將被推薦給新用戶,從而實(shí)現(xiàn)個(gè)性化推薦。另外,KNN還可用于協(xié)同過濾技術(shù)中,通過分析用戶-物品矩陣,找出具有相似行為模式的用戶群體,以實(shí)現(xiàn)基于鄰域的推薦。
- 圖像識(shí)別:在計(jì)算機(jī)視覺任務(wù)中,KNN常應(yīng)用于手寫數(shù)字識(shí)別、物體分類等問題。首先,對(duì)圖像進(jìn)行預(yù)處理并提取特征(如像素直方圖、邊緣檢測(cè)特征、紋理特征等),然后利用KNN算法比較待識(shí)別圖像特征與訓(xùn)練集中各類別圖像特征的距離,最終確定圖像屬于哪一類別。這種方法尤其適用于小型數(shù)據(jù)集或簡(jiǎn)單識(shí)別任務(wù),而在大規(guī)模圖像識(shí)別任務(wù)中,通常會(huì)結(jié)合深度學(xué)習(xí)等更復(fù)雜的方法。
- 醫(yī)學(xué)診斷與預(yù)測(cè):在醫(yī)療健康領(lǐng)域,KNN可用于疾病診斷、病情嚴(yán)重程度評(píng)估及預(yù)后判斷等。比如,在腫瘤類型判斷上,通過對(duì)病理切片的細(xì)胞形態(tài)學(xué)特征、基因表達(dá)譜等多種生物標(biāo)志物進(jìn)行量化,采用KNN算法對(duì)比相似病例,來推測(cè)未知樣本所屬的腫瘤亞型或者預(yù)測(cè)其惡性程度。此外,對(duì)于病人的治療反應(yīng)預(yù)測(cè),也可以通過比較病史、生理指標(biāo)等因素相近的病例,利用KNN得出最佳治療方案。
- 金融市場(chǎng)預(yù)測(cè):在金融領(lǐng)域,KNN可以用來預(yù)測(cè)股票價(jià)格走勢(shì)、評(píng)估信用風(fēng)險(xiǎn)等。通過對(duì)歷史交易數(shù)據(jù)、財(cái)務(wù)報(bào)表、市場(chǎng)情緒等多個(gè)維度的數(shù)據(jù)進(jìn)行分析,利用KNN算法尋找與當(dāng)前市場(chǎng)狀況相似的歷史時(shí)期,并參考當(dāng)時(shí)市場(chǎng)的表現(xiàn)作為未來趨勢(shì)預(yù)測(cè)的依據(jù)。
- 社交網(wǎng)絡(luò)分析:在社交網(wǎng)絡(luò)研究中,KNN有助于發(fā)現(xiàn)用戶間的隱含關(guān)系,實(shí)現(xiàn)社區(qū)發(fā)現(xiàn)或用戶興趣定位。通過衡量用戶間的行為相似度(如共同關(guān)注的話題、互動(dòng)頻率等),KNN可為每個(gè)用戶找到社交網(wǎng)絡(luò)中的“近鄰”,進(jìn)而揭示用戶群體的興趣分布以及社交影響力。
- 物聯(lián)網(wǎng)(IoT)設(shè)備故障診斷:在工業(yè)物聯(lián)網(wǎng)場(chǎng)景下,KNN可用于設(shè)備狀態(tài)監(jiān)測(cè)和故障預(yù)警。通過收集設(shè)備運(yùn)行時(shí)的各項(xiàng)參數(shù)指標(biāo),利用KNN對(duì)比類似設(shè)備的歷史故障案例,快速定位當(dāng)前設(shè)備可能出現(xiàn)的問題。
- 電商網(wǎng)站商品推薦:除了上述提到的個(gè)性化推薦外,在電商平臺(tái)中,KNN還可用于關(guān)聯(lián)規(guī)則挖掘,根據(jù)用戶的購物行為和其他用戶的行為模式,發(fā)現(xiàn)商品之間的關(guān)聯(lián)性,從而推薦相關(guān)聯(lián)的商品。
- 文本分類:文本分類是KNN算法的一個(gè)重要應(yīng)用領(lǐng)域。在文本分類任務(wù)中,KNN算法可以將文本數(shù)據(jù)表示為向量形式,并利用訓(xùn)練數(shù)據(jù)中的文本向量來分類新的文本數(shù)據(jù)。例如,在新聞分類中,KNN算法可以根據(jù)新聞內(nèi)容的相 似性將其歸類到不同的類別(如政治、經(jīng)濟(jì)、體育等)。通過選擇合適的特征提取方法和距離度量方式,KNN算法能夠有效地處理文本數(shù)據(jù)中的高維性和稀疏性問題,實(shí)現(xiàn)準(zhǔn)確的文本分類。
參考:
1、寫給產(chǎn)品經(jīng)理的幾種機(jī)器學(xué)習(xí)算法原理-人人都是產(chǎn)品經(jīng)理-策略產(chǎn)品夏師傅
2、七大機(jī)器學(xué)習(xí)常用算法精講:K近鄰算法(一)-人人都是產(chǎn)品經(jīng)理-火粒產(chǎn)品
3、【機(jī)器學(xué)習(xí)-13】K-近鄰算法(KNN)介紹、應(yīng)用及文本分類實(shí)現(xiàn)
本文由@厚謙 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)作者許可,禁止轉(zhuǎn)載。
題圖來自Unsplash,基于CC0協(xié)議。
該文觀點(diǎn)僅代表作者本人,人人都是產(chǎn)品經(jīng)理平臺(tái)僅提供信息存儲(chǔ)空間服務(wù)。
- 目前還沒評(píng)論,等你發(fā)揮!