日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

K最近邻分类器

發布時間:2023/12/3 编程问答 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 K最近邻分类器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉自:?http://www.cnblogs.com/qwertWZ/p/4582096.html


本章介紹了《機器學習實戰》這本書中的第一個機器學習算法:k-近鄰算法,它非常有效而且易于掌握。首先,我們將探討k-近鄰算法的基本理論,以及如何使用距離測量的方法分類物品;其次我們將使用Python從文本文件中導入并解析數據;再次,本文討論了當存在許多數據來源時,如何避免計算距離時可能碰到的一些常見錯誤;最后,利用實際的例子講解如何使用k-近鄰算法改進約會網站和手寫數字識別系統。

回到頂部

1. k-近鄰算法概述

簡單地說,k-近鄰算法采用測量不同特征值之間的距離方法進行分類。

k-近鄰算法

優點:精度高、對異常值不敏感、無數據輸入假定。
缺點:計算復雜度高、空間復雜度高
適用數據范圍:數值型和標稱型

k-近鄰算法(kNN)的工作原理是:存在一個樣本數據集合,也稱作訓練樣本集,并且樣本集中每個數據都存在標簽,即我們知道樣本集中每一數據與所屬分類的對應關系。輸入沒有標簽的新數據后,將新數據的每個特征與樣本集中數據對應的特征進行比較,然后算法提取樣本集中特征最相似數據(最近鄰)的分類標簽。一般來說,我們只選擇樣本數據集中前k個最相似的數據,這就是k-近鄰算法中k的出處,通常k是不大于20的整數。最后,選擇k個最相似數據中出現次數最多的分類,作為新數據的分類。

現在我們回到前面電影分類的例子,使用k-近鄰算法分類愛情片和動作片。有人曾經統計過很多電影的打斗鏡頭和接吻鏡頭,圖1顯示了6部電影的打斗和接吻鏡頭數。假如有一部未看過的電影,如何確定它是愛情片還是動作片呢?我們可以使用kNN來解決這個問題。

?

圖1 使用打斗和接吻鏡頭數分類電影

首先我們需要知道這個未知電影存在多少個打斗鏡頭和接吻鏡頭,圖1中問號位置是該未知電影出現的鏡頭數圖形化展示,具體數字參見下表。

表1 每部電影的打斗鏡頭數、接吻鏡頭數以及電影評估類型

電影名稱 打斗鏡頭 接吻鏡頭 電影類型
California Man 3 104 愛情片
He’s Not Really into Dudes 2 100 愛情片
Beautiful Woman 1 81 愛情片
Kevin Longblade 101 10 動作片
Robo Slayer 3000 99 5 動作片
Amped II 98 2 動作片
? 18 90 未知

計算未知電影與樣本集中其他電影的距離,我們可以比較其相似度:

表2 已知電影與未知電影的距離

電影名稱 與未知電影的距離
California Man 20.5
He’s Not Really into Dudes 18.7
Beautiful Woman 19.2
Kevin Longblade 115.3
Robo Slayer 3000 117.4
Amped II 118.9

現在我們得到了樣本集中所有電影與未知電影的距離,按照距離遞增排序,可以找到k個距離最近的電影。假定k=3,則三個最靠近的電影依次是He’s Not Really into Dudes、Beautiful Woman和California Man。k-近鄰算法按照距離最近的三部電影的類型,決定未知電影的類型,而這三部電影全是愛情片,因此我們判定未知電影是愛情片。

k-近鄰算法的一般流程

收集數據:可以使用任何方法。?
準備數據:距離計算所需要的數值,最好是結構化的數據格式。?
分析數據:可以使用任何方法。?
測試算法:計算錯誤率。?
使用算法:首先需要輸入樣本數據和結構化的輸出結果,然后運行k-近鄰算法判定輸入數據分別屬于哪個分類。

1.1 準備:使用Python導入數據

創建名為kNN.py的Python模塊,在kNN.py文件中增加下面的代碼:

1 2 3 4 5 6 7 from?numpy import * import operator ? def createDataSet(): ????group?= array([[1.0, 1.1], [1.0, 1.0], [0, 0], [0, 0.1]]) ????labels = ['A', 'A', 'B', 'B'] ????return?group, labels

這個函數創建了我們將要使用的樣例數據集。

在Python shell中輸入下列命令測試上面的函數:

1 2 >>> import kNN >>> group, labels = kNN.createDataSet()

1.2 實施kNN算法

k-近鄰算法的偽代碼

對未知類型屬性的數據集中的每個點依次執行以下操作:
(1) 計算已知類別數據集中的點與當前點之間的距離;
(2) 按照距離增序排序;
(3) 選取與當前點距離最近的k個點;
(4) 決定這k個點所屬類別的出現頻率;
(5) 返回前k個點出現頻率最高的類別作為當前點的預測分類。

函數實現如下:


總結

以上是生活随笔為你收集整理的K最近邻分类器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。