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