91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python如何實現KNN算法

發布時間:2021-04-07 11:38:08 來源:億速云 閱讀:231 作者:小新 欄目:開發技術

小編給大家分享一下Python如何實現KNN算法,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

一、概述

KNN(K-最近鄰)算法是相對比較簡單的機器學習算法之一,它主要用于對事物進行分類。用比較官方的話來說就是:給定一個訓練數據集,對新的輸入實例,在訓練數據集中找到與該實例最鄰近的K個實例, 這K個實例的多數屬于某個類,就把該輸入實例分類到這個類中。為了更好地理解,通過一個簡單的例子說明。

我們有一組自擬的關于電影中鏡頭的數據:

Python如何實現KNN算法

那么問題來了,如果有一部電影 X,它的打戲為 3,吻戲為 2。那么這部電影應該屬于哪一類?

我們把所有數據通過圖表顯示出來(圓點代表的是自擬的數據,也稱訓練集;三角形代表的是 X 電影的數據,稱為測試數據):

Python如何實現KNN算法

計算測試數據到訓練數據之間的距離,假設 k 為 3,那么我們就找到距離中最小的三個點,假如 3 個點中有 2 個屬于動作片,1 個屬于愛情片,那么把該電影 X 分類為動作片。這種通過計算距離總結 k 個最鄰近的類,按照”少數服從多數“原則分類的算法就為 KNN(K-近鄰)算法。

二、算法介紹

還是以上面的數據為例,打戲數為 x,吻戲數為 y,通過歐式距離公式計算測試數據到訓練數據的距離,我上中學那會兒不知道這個叫做歐式距離公式,一直用”兩點間的距離公式“來稱呼這個公式: Python如何實現KNN算法 。但是現實中的很多數據都是多維的,即使如此,也還是按照這個思路進行計算,比如如果是三維的話,就在根號里面再加上 z 軸差的平方,即  Python如何實現KNN算法 ,以此類推。

知道了這個計算公式,就可以計算各個距離了。我們以到最上面的點的距離為例: Python如何實現KNN算法 ,那么從上到下的距離分別是: Python如何實現KNN算法Python如何實現KNN算法Python如何實現KNN算法Python如何實現KNN算法 。現在我們把 k 定為 3,那么距離最近的就是后面三個數了,在這三個數中,有兩個屬于動作片,因此,電影 X 就分類為動作片。

三、算法實現

知道了原理,那就可以用代碼實現了,這里就不再贅述了,直接上帶注釋的 Python 代碼:

'''
  trainData - 訓練集
  testData - 測試集
  labels - 分類
'''
def knn(trainData, testData, labels, k):
  # 計算訓練樣本的行數
  rowSize = trainData.shape[0]
  # 計算訓練樣本和測試樣本的差值
  diff = np.tile(testData, (rowSize, 1)) - trainData
  # 計算差值的平方和
  sqrDiff = diff ** 2
  sqrDiffSum = sqrDiff.sum(axis=1)
  # 計算距離
  distances = sqrDiffSum ** 0.5
  # 對所得的距離從低到高進行排序
  sortDistance = distances.argsort()
  
  count = {}
  
  for i in range(k):
    vote = labels[sortDistance[i]]
    count[vote] = count.get(vote, 0) + 1
  # 對類別出現的頻數從高到低進行排序
  sortCount = sorted(count.items(), key=operator.itemgetter(1), reverse=True)
  
  # 返回出現頻數最高的類別
  return sortCount[0][0]

ps:np.tile(testData, (rowSize, 1)) 是將 testData 這個數據擴展為 rowSize 列,這樣能避免運算錯誤;

sorted(count.items(), key=operator.itemgetter(1), reverse=True) 排序函數,里面的參數 key=operator.itemgetter(1), reverse=True 表示按照 count 這個字典的值(value)從高到低排序,如果把 1 換成 0,則是按字典的鍵(key)從高到低排序。把 True 換成 False 則是從低到高排序。

四、測試與總結

用 Python 實現了算法之后,我們用上面的數據進行測試,看一下結果是否和我們預測的一樣為動作片:

trainData = np.array([[5, 1], [4, 0], [1, 3], [0, 4]])
labels = ['動作片', '動作片', '愛情片', '愛情片']
testData = [3, 2]
X = knn(trainData, testData, labels, 3)
print(X)

執行這段代碼后輸出的結果為:動作片 。和預測的一樣。當然通過這個算法分類的正確率不可能為 100%,可以通過增加修改數據測試,如果有大量多維的數據就更好了。

以上是“Python如何實現KNN算法”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

云林县| 灵石县| 海原县| 兴化市| 靖西县| 曲松县| 安阳市| 神池县| 鸡泽县| 彭阳县| 石楼县| 旌德县| 柞水县| 江陵县| 耿马| 钟祥市| 绥芬河市| 梁河县| 松原市| 大悟县| 民勤县| 东阳市| 西充县| 新宾| 土默特右旗| 株洲县| 百色市| 松潘县| 万荣县| 鄱阳县| 金坛市| 泰州市| 东海县| 丰宁| 连平县| 安龙县| 青州市| 井陉县| 思茅市| 海盐县| 奎屯市|