KNN分類算法的python實現

2020-12-03 騰訊網

前言

K最近鄰(k-Nearest Neighbor,KNN)分類算法,是一個理論上比較成熟的方法,也是最簡單的機器學習算法之一。該方法的思路是:在特徵空間中,如果一個樣本附近的k個最近(即特徵空間中最鄰近)樣本的大多數屬於某一個類別,則該樣本也屬於這個類別。。

一、KNN的基本思路

所謂K近鄰算法,即是給定一個訓練數據集,對新的輸入實例,在訓練數據集中找到與該實例最鄰近的K個實例, 這K個實例的多數屬於某個類,就把該輸入實例分類到這個類中。並不是很複雜,十分易於理解。主要的算法思路也就分為3步。

從測試集中選擇一個樣本,分別計算該樣本和訓練集中各樣本的距離(本文選擇歐氏距離)。

對選取的測試集樣本與各訓練集樣本的距離記錄排序,找到距離最小的k個距離。以距離平方的倒數為權重,對這k個樣本的標籤進行加權投票,得到該測試集樣本的標籤。

循環對測試集樣本進行上述兩步操作。

二、代碼實現

程序部分主要有5個部分:

read_xslx(xslx_path) #讀取excel文件

standardization(v,mu,sigma) #對一個數據規範化

standardize(data) #對數據集規範化

calDistance(testingrow, trainingrow) #計算樣本間距離

KNN(trainingData, testingData, k) #KNN算法部分

分類結果

需要注意,KNN算法中K的選擇對算法的分類效果有著明顯影響。

選擇K=4時,生成的混淆矩陣:

[[46 0 17]

[ 1 30 2]

[22 1 81]]

可視化結果如下:

如果改變K的取值,混淆矩陣會明顯改變,如下所示:

k=3:

k=5:

k=6:

k=8:

k=9:

總結

本文利用KNN算法所得分類結果並不是很佳,無法很準確地分辨「0」類和「2」類,如果選擇其他的度量方式來獲取樣本間距離,或是採用其他對數據的標準化方法可能可以有所改善。但KNN算法本身是一個比較簡單粗暴的方法,還是能起到初步的分類效果的。

相關焦點

  • 小白學數據:教你用Python實現簡單監督學習算法
    有很多方法可以實現有監督學習,我們將探討幾種最常用的方法。根據給定的數據集,機器學習可以分為兩大類:分類(Classification)和回歸(Regression)。如果給定的數據集的輸出值是類別,那麼待解決是分類問題。
  • KNN算法中的K有多重要
    K-最近鄰(KNN)是一種有監督的機器學習算法,可用於解決分類和回歸問題。它基於一個非常簡單的想法,數據點的值由它周圍的數據點決定。考慮的數據點數量由k值確定。因此,k值是算法的核心。KNN分類器根據多數表決原則確定數據點的類別。如果k設置為5,則檢查5個最近點的類別。也可以根據多數類進行回歸預測,同樣,KNN回歸取5個最近點的平均值。
  • 教你學Python26-knn臨近算法
    KNN 概述k-近鄰(kNN, k-NearestNeighbor)算法是一種基本分類與回歸方法,我們這裡只討論分類問題中的 k-近鄰算法。一句話總結:近朱者赤近墨者黑!最後,選擇k個最相似數據中出現次數最多的分類,作為新數據的分類。k近鄰算法的輸入為實例的特徵向量,對應於特徵空間的點;輸出為實例的類別,可以取多類。k 近鄰算法假設給定一個訓練數據集,其中的實例類別已定。分類時,對新的實例,根據其 k 個最近鄰的訓練實例的類別,通過多數表決等方式進行預測。因此,k近鄰算法不具有顯式的學習過程。
  • 標籤傳播算法(Label Propagation)及Python實現
    例如下圖,只有兩個labeled數據,如果直接用他們來訓練一個分類器,例如LR或者SVM,那麼學出來的分類面就是左圖那樣的。如果現實中,這個數據是右圖那邊分布的話,豬都看得出來,左圖訓練的這個分類器爛的一塌糊塗、慘不忍睹。因為我們的labeled訓練數據太少了,都沒辦法覆蓋我們未來可能遇到的情況。
  • 機器學習:基於Knn算法的用戶屬性判斷方案設計
    本文作者通過Knn算法進行了一次用戶判斷預測的流程,文章為作者根據自身經驗所做出的總結,希望通過此文能夠加深你對Knn算法的認識。knn算法簡介K最近鄰(k-Nearest Neighbor,KNN)分類算法,是一個理論上比較成熟的方法,也是最簡單的機器學習算法之一。
  • 「近水樓臺先得月」——理解KNN算法
    在人工智慧領域,有一種算法,非常貼近上述的形象比喻,這就是KNN算法,即K最近鄰算法(K-NearestNeighbors,簡稱KNN),它是一個比較簡單的機器學習算法,也是一個理論上比較成熟的、運用基於樣本估計的最大後驗概率規則的判別方法。本文對KNN算法做一個通俗易懂的介紹,並通過python進行編碼示範,讓讀者朋友對該算法有較好的理解。
  • Python視頻教程網課編程零基礎入門數據分析網絡爬蟲全套Python...
    -KNN 6-04分類-樸素貝葉斯 6-05分類-決策樹 6-06分類-支持向量機 6-07分類-集成-隨機森林 6-08分類-集成-Adaboost 6-09回歸-線性回歸 6-10回歸-分類-邏輯回歸 6-11回歸-分類-人工神經網絡1 6-12回歸-分類-人工神經網絡2
  • python實現高斯樸素貝葉斯分類器
    python實現高斯樸素貝葉斯分類器    在這篇文章中,我們將使用我最喜歡的機器學習庫scikit-learn在Python中實現樸素貝葉斯分類器。接下來,我們將使用經過訓練的樸素貝葉斯(監督分類法)模型來預測人口收入。
  • k近鄰法(KNN)原理小結
    KNN做回歸和分類的主要區別在於最後做預測時候的決策方式不同,KNN做分類預測時,一般是使用多數表決法;KNN做回歸時,一般是使用平均法,即最近的K個樣本的樣本輸出的平均值作為回歸預測值。本文以分類算法展開介紹。
  • 基於KNN和Kmeans算法利用MNIST數據集實現手寫數字識別
    作者: 陳千鶴 來源:人工智慧學習圈 KNN算法發展狀況K-最近鄰法(K-Nearest Neighbor, KNN)最初由Cover和Hart於1968年提出,是一個在理論上比較成熟的分類算法。這是一種基於模板匹配思想的算法,雖然簡單,但很有效,至今仍在被使用。
  • 2020年最流行的十個Python庫(上)
    Python之所以強大,還因為它擁有大量的庫,這使得python滲透於任何類型的開發,藉助python可以進行網絡開發,腳本編寫,遊戲開發,數據科學等工作。在本文中,將向您介紹2020年在大廠Python老師傅中最流行的的十大Python庫。本篇介紹其中5個。對於每一個庫,都會說明為什麼會推薦它?庫的功能說明和簡單例子。讓大家不僅看的精彩,也能立刻上手。
  • Python機器學習之K近鄰分類器
    KNN現在,如果我們有一個分類任務。需要用到scikit-learn庫的分類器對象。分類器要完成的任務是,給定一種鳶尾花卉的測量數據,為這種花卉分類。最簡單的分類器是近鄰分類器。近鄰算法搜索訓練集,尋找與用作測試的新個體最相似的觀測記錄。講到這裡,弄清楚訓練集和測試集這兩個概念很重要。如果確實只有一個數據集,也沒關係,重要的是不要使用同一份數據同時用於訓練和測試。鑑於此,把數據集分為兩部分:一部分專門用於訓練算法,另一部分用於驗證算法。
  • 高斯混合模型(GMM):理念、數學、EM算法和python實現
    高斯混合模型是一種流行的無監督學習算法。GMM方法類似於K-Means聚類算法,但是由於其複雜性,它更健壯,更有用。K-means聚類使用歐式距離函數來發現數據中的聚類。只要數據相對於質心呈圓形分布,此方法就可以很好地工作。
  • 比KNN快380倍!我們有了新選擇
    下列有幾種ANN算法:· Spotify的【ANNOY】· Google的【ScaNN】· Facebook的【Faiss】· 還有個人最愛:分層可導航小世界圖【HNSW】下面我們把焦點從Python的 sklearn中的KNN算法轉向在Python的hnswlib 包中的HNSW圖這一出色的ANN算法。
  • Python機器學習10:機器學習中的六種分類算法及實現(上)
    本文將會介紹六種常見的機器學習分類算法及其scikit-learn實現,當你在處理分類問題時,可以嘗試使用這些算法。比較不同算法在具體問題上的效果,然後選擇一種最佳算法。引言本教程分為三部分,分別如下所示。本文將會介紹前二部分,第三部分將會在後面的文章中介紹。
  • 機器學習算法一覽(附python和R代碼)
    原標題:機器學習算法一覽(附python和R代碼) 無監督式學習是用來對總體對象進行分類的。它在根據某一指標將客戶分類上有廣泛應用。 屬於無監督式學習的算法有:關聯規則,K-means聚類算法等。 3. 強化學習 這個算法可以訓練程序做出某一決定。程序在某一情況下嘗試所有的可能行動,記錄不同行動的結果並試著找出最好的一次嘗試來做決定。
  • 基於 Python 實現動態分類器集成學習
    動態分類器選擇是一種用於分類預測建模的集成學習算法。該技術涉及在訓練數據集上擬合多個機器學習模型,然後基於要預測的示例的特定細節,選擇在進行預測時預期表現最佳的模型。這可以通過以下方法實現:使用k最近鄰模型在訓練數據集中找到最接近要預測的新示例的示例,評估該鄰域中池中的所有模型,並使用在鄰域中表現最佳的模型來對新示例做出預測。
  • 教你用OpenCV實現機器學習最簡單的k-NN算法
    找到想要分類的新數據點的k個最近鄰的點。使用多數投票來分配新數據點的類標籤。畫出結果圖。首先引入所有必需的模塊:使用k-NN算法的OpenCV、處理數據的NumPy、用於繪圖的Matplotlib。如果使用Jupyter Notebook,別忘了調用%matplotlib inline魔法命令。
  • 在python中使用KNN算法處理缺失的數據
    今天,我們將探索一種簡單但高效的填補缺失數據的方法-KNN算法。KNN代表「 K最近鄰居」,這是一種簡單算法,可根據定義的最接近鄰居數進行預測。 它計算從您要分類的實例到訓練集中其他所有實例的距離。正如標題所示,我們不會將算法用於分類目的,而是填充缺失值。 本文將使用房屋價格數據集,這是一個簡單而著名的數據集,僅包含500多個條目。
  • 基於貝葉斯定理的算法——樸素貝葉斯分類
    不過今天我們介紹的樸素貝葉斯分類器通過獨立假設簡化了概率的計算,節省了內存,可以很好地用於數據量大的情況。下面我們首先來了解這一算法的數理背景——貝葉斯定理。這一算法是由我們在概率論中學到的貝葉斯定理延伸出來的。我們知道貝葉斯公式為:其中,