最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實現(xiàn)KNN(K-近鄰)算法的示例代碼

 更新時間:2019年03月05日 08:55:20   作者:Max_Lyu  
這篇文章主要介紹了Python實現(xiàn)KNN(K-近鄰)算法的示例代碼,它主要用于對事物進行分類。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

一、概述

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

我們有一組自擬的關(guān)于電影中鏡頭的數(shù)據(jù):

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

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

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

二、算法介紹

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

知道了這個計算公式,就可以計算各個距離了。我們以到最上面的點的距離為例: ,那么從上到下的距離分別是: , , ?,F(xiàn)在我們把 k 定為 3,那么距離最近的就是后面三個數(shù)了,在這三個數(shù)中,有兩個屬于動作片,因此,電影 X 就分類為動作片。

三、算法實現(xiàn)

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

'''
  trainData - 訓練集
  testData - 測試集
  labels - 分類
'''
def knn(trainData, testData, labels, k):
  # 計算訓練樣本的行數(shù)
  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
  # 對類別出現(xiàn)的頻數(shù)從高到低進行排序
  sortCount = sorted(count.items(), key=operator.itemgetter(1), reverse=True)
  
  # 返回出現(xiàn)頻數(shù)最高的類別
  return sortCount[0][0]

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

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

四、測試與總結(jié)

用 Python 實現(xiàn)了算法之后,我們用上面的數(shù)據(jù)進行測試,看一下結(jié)果是否和我們預測的一樣為動作片:

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

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

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • python刪除某個字符

    python刪除某個字符

    這篇文章主要介紹了python刪除某個字符,現(xiàn)在發(fā)布的是一個比較簡單易行的方法,就是遇到該字符便跳過去,不對其進行操作,完美呈現(xiàn)出刪除該字符的功能,需要的朋友可以參考下
    2018-03-03
  • django 按時間范圍查詢數(shù)據(jù)庫實例代碼

    django 按時間范圍查詢數(shù)據(jù)庫實例代碼

    這篇文章主要介紹了django 按時間范圍查詢數(shù)據(jù)庫實例代碼,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • Python中字典的setdefault()方法教程

    Python中字典的setdefault()方法教程

    在學習python字典操作方法時,感覺setdefault()方法,比字典的其它基本操作方法更難理解的同學比較多,所以想著總結(jié)以下,下面這篇文章主要給大家介紹了Python中字典的setdefault()方法,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-02-02
  • 利用python來跟蹤ip地址的方法

    利用python來跟蹤ip地址的方法

    今天來介紹一個流行的 python庫 ip2geotools,使用它可以確定 IP地址 對應(yīng)的 國家、地區(qū)、城市、緯度和經(jīng)度等,文中通過代碼示例介紹了如何使用python來跟蹤ip地址,需要的朋友可以參考下
    2023-06-06
  • Python文件讀寫open函數(shù)詳解

    Python文件讀寫open函數(shù)詳解

    這篇文章主要介紹了Python文件讀寫open函數(shù)詳解,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-07-07
  • 用pycharm開發(fā)django項目示例代碼

    用pycharm開發(fā)django項目示例代碼

    這篇文章主要介紹了用pycharm開發(fā)django項目示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-06-06
  • python使用UDP實現(xiàn)客戶端和服務(wù)器對話

    python使用UDP實現(xiàn)客戶端和服務(wù)器對話

    這篇文章主要為大家介紹了python使用UDP實現(xiàn)客戶端和服務(wù)器對話示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • Python爬取智聯(lián)招聘數(shù)據(jù)分析師崗位相關(guān)信息的方法

    Python爬取智聯(lián)招聘數(shù)據(jù)分析師崗位相關(guān)信息的方法

    這篇文章主要介紹了Python爬取智聯(lián)招聘數(shù)據(jù)分析師崗位相關(guān)信息的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-08-08
  • python?argparse模塊傳參用法實例

    python?argparse模塊傳參用法實例

    這篇文章主要為大家介紹了python?argparse模塊傳參用法實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • Python+Selenium實現(xiàn)一鍵摸魚&采集數(shù)據(jù)

    Python+Selenium實現(xiàn)一鍵摸魚&采集數(shù)據(jù)

    將Selenium程序編寫為 .bat 可執(zhí)行文件,從此一鍵啟動封裝好的Selenium程序,省時省力還可以復用,豈不美哉。所以本文將利用Selenium實現(xiàn)一鍵摸魚&一鍵采集數(shù)據(jù),需要的可以參考一下
    2022-08-08

最新評論

临洮县| 水城县| 石狮市| 寻乌县| 曲周县| 宁南县| 北川| 万宁市| 兰州市| 长春市| 淳安县| 沾益县| 望江县| 天门市| 阿克陶县| 阿图什市| 彭山县| 谷城县| 隆昌县| 稷山县| 宿迁市| 科技| 兴宁市| 蓝山县| 玉门市| 富平县| 五莲县| 友谊县| 金门县| 板桥市| 大渡口区| 剑阁县| 北宁市| 玉龙| 龙岩市| 镇安县| 眉山市| 隆回县| 若尔盖县| 舒城县| 呈贡县|