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

Python語言實現(xiàn)機器學(xué)習(xí)的K-近鄰算法

 更新時間:2015年06月11日 09:44:34   投稿:hebedich  
今天學(xué)習(xí)的算法是KNN近鄰算法。KNN算法是一個監(jiān)督學(xué)習(xí)分類器類別的算法。下面我們來詳細的探討下

寫在前面

額、、、最近開始學(xué)習(xí)機器學(xué)習(xí)嘛,網(wǎng)上找到一本關(guān)于機器學(xué)習(xí)的書籍,名字叫做《機器學(xué)習(xí)實戰(zhàn)》。很巧的是,這本書里的算法是用Python語言實現(xiàn)的,剛好之前我學(xué)過一些Python基礎(chǔ)知識,所以這本書對于我來說,無疑是雪中送炭啊。接下來,我還是給大家講講實際的東西吧。

什么是K-近鄰算法?

簡單的說,K-近鄰算法就是采用測量不同特征值之間的距離方法來進行分類。它的工作原理是:存在一個樣本數(shù)據(jù)集合,也稱作訓(xùn)練樣本集,并且樣本集中每個數(shù)據(jù)都存在標(biāo)簽,即我們知道樣本集中每一數(shù)據(jù)與所屬分類的對應(yīng)關(guān)系,輸入沒有標(biāo)簽的新數(shù)據(jù)之后,將新數(shù)據(jù)的每個特征與樣本集中數(shù)據(jù)對應(yīng)的特征進行比較,然后算法提取出樣本集中特征最相似數(shù)據(jù)的分類標(biāo)簽。一般來說,我們只選擇樣本數(shù)據(jù)集中前k個最相似的數(shù)據(jù),這就是K-近鄰算法名稱的由來。

提問:親,你造K-近鄰算法是屬于監(jiān)督學(xué)習(xí)還是無監(jiān)督學(xué)習(xí)呢?

使用Python導(dǎo)入數(shù)據(jù)

從K-近鄰算法的工作原理中我們可以看出,要想實施這個算法來進行數(shù)據(jù)分類,我們手頭上得需要樣本數(shù)據(jù),沒有樣本數(shù)據(jù)怎么建立分類函數(shù)呢。所以,我們第一步就是導(dǎo)入樣本數(shù)據(jù)集合。

建立名為kNN.py的模塊,寫入代碼:

 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

代碼中,我們需要導(dǎo)入Python的兩個模塊:科學(xué)計算包NumPy和運算符模塊。NumPy函數(shù)庫是Python開發(fā)環(huán)境的一個獨立模塊,大多數(shù)Python版本里沒有默認(rèn)安裝NumPy函數(shù)庫,因此這里我們需要單獨安裝這個模塊。

下載地址:http://sourceforge.net/projects/numpy/files/

有很多的版本,這里我選擇的是numpy-1.7.0-win32-superpack-python2.7.exe。

實現(xiàn)K-近鄰算法

K-近鄰算法的具體思想如下:

(1)計算已知類別數(shù)據(jù)集中的點與當(dāng)前點之間的距離

(2)按照距離遞增次序排序

(3)選取與當(dāng)前點距離最小的k個點

(4)確定前k個點所在類別的出現(xiàn)頻率

(5)返回前k個點中出現(xiàn)頻率最高的類別作為當(dāng)前點的預(yù)測分類

Python語言實現(xiàn)K-近鄰算法的代碼如下:

 # coding : utf-8
 from numpy import *
 import operator 
 import kNN
 group, labels = kNN.createDataSet()
 def classify(inX, dataSet, labels, k):
   dataSetSize = dataSet.shape[0] 
   diffMat = tile(inX, (dataSetSize,1)) - dataSet
   sqDiffMat = diffMat**2
   sqDistances = sqDiffMat.sum(axis=1)
   distances = sqDistances**0.5
   sortedDistances = distances.argsort()
   classCount = {}
   for i in range(k):
     numOflabel = labels[sortedDistances[i]]
     classCount[numOflabel] = classCount.get(numOflabel,0) + 1
   sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1),reverse=True)
   return sortedClassCount[0][0]
 my = classify([0,0], group, labels, 3)
 print my

運算結(jié)果如下:

 輸出結(jié)果是B:說明我們新的數(shù)據(jù)([0,0])是屬于B類。

代碼詳解

相信有很多朋友們對上面這個代碼有很多不理解的地方,接下來,我重點講解幾個此函數(shù)的關(guān)鍵點,以方便讀者們和我自己回顧一下這個算法代碼。

classify函數(shù)的參數(shù):

inX:用于分類的輸入向量
dataSet:訓(xùn)練樣本集合
labels:標(biāo)簽向量
k:K-近鄰算法中的k
shape:是array的屬性,描述一個多維數(shù)組的維度

tile(inX, (dataSetSize,1)):把inX二維數(shù)組化,dataSetSize表示生成數(shù)組后的行數(shù),1表示列的倍數(shù)。整個這一行代碼表示前一個二維數(shù)組矩陣的每一個元素減去后一個數(shù)組對應(yīng)的元素值,這樣就實現(xiàn)了矩陣之間的減法,簡單方便得不讓你佩服不行!

axis=1:參數(shù)等于1的時候,表示矩陣中行之間的數(shù)的求和,等于0的時候表示列之間數(shù)的求和。

argsort():對一個數(shù)組進行非降序排序

classCount.get(numOflabel,0) + 1:這一行代碼不得不說的確很精美啊。get():該方法是訪問字典項的方法,即訪問下標(biāo)鍵為numOflabel的項,如果沒有這一項,那么初始值為0。然后把這一項的值加1。所以Python中實現(xiàn)這樣的操作就只需要一行代碼,實在是很簡潔高效。

后話

K-近鄰算法(KNN)原理以及代碼實現(xiàn)差不多就這樣了,接下來的任務(wù)就是更加熟悉它,爭取達到裸敲的地步。

以上所述上就是本文的全部內(nèi)容了,希望大家能夠喜歡。

相關(guān)文章

  • Python實現(xiàn)輕松防止屏幕截圖的技巧分享

    Python實現(xiàn)輕松防止屏幕截圖的技巧分享

    屏幕截圖是一種常見的用于記錄信息或者監(jiān)控用戶活動的方法,為了保護隱私和數(shù)據(jù)安全,可以通過使用Python編寫一些防護措施來防止他人截取我們的屏幕,下面我們就來學(xué)習(xí)一下有哪些具體操作吧
    2023-12-12
  • Python連接SQLite數(shù)據(jù)庫并進行增冊改查操作方法詳解

    Python連接SQLite數(shù)據(jù)庫并進行增冊改查操作方法詳解

    這篇文章主要介紹了Python對SQLite數(shù)據(jù)庫進行增冊改查操作方法詳解,需要的朋友可以參考下
    2020-02-02
  • Python中的哈希算法模塊hashlib詳解

    Python中的哈希算法模塊hashlib詳解

    這篇文章主要介紹了Python中的哈希算法模塊hashlib詳解,hashlib模塊實現(xiàn)了多種哈希算法,包括MD5以及SHA家族的算法,通過algorithms_guaranteed可以查看hashlib中封裝的所有算法,需要的朋友可以參考下
    2023-08-08
  • python代碼實現(xiàn)煙花實例

    python代碼實現(xiàn)煙花實例

    這篇文章主要給大家分享了python煙花詳細的代碼,文章主要以python煙花的代碼展開全文,所以解說會比較少,代碼較多。喜歡的小伙伴可以參考一下,希望對你有所幫助
    2021-12-12
  • 一文探索Python中PDF解析利器PDFMiner的使用

    一文探索Python中PDF解析利器PDFMiner的使用

    PDFMiner是一個強大的Python庫,用于解析PDF文檔并提取其中的文本內(nèi)容和數(shù)據(jù),本文將為大家介紹一下PDFMiner的具體使用,感興趣的可以了解下
    2024-11-11
  • Python批量生成字幕圖片的方法詳解

    Python批量生成字幕圖片的方法詳解

    這篇文章主要為大家詳細介紹了如何利用Python語言實現(xiàn)批量生成字幕圖片用于視頻剪輯,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2022-05-05
  • 3種適用于Python的瘋狂秘密武器及原因解析

    3種適用于Python的瘋狂秘密武器及原因解析

    這篇文章主要介紹了3種適用于Python的瘋狂秘密武器,本文給大家分享問題原因解析,通過實例代碼圖文的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • python代碼有一行標(biāo)黃問題的解決方案

    python代碼有一行標(biāo)黃問題的解決方案

    這篇文章主要介紹了python代碼有一行標(biāo)黃問題的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Python一行代碼實現(xiàn)生成和讀取二維碼

    Python一行代碼實現(xiàn)生成和讀取二維碼

    二維碼被稱為快速響應(yīng)碼,可能看起來很簡單,但它們能夠存儲大量數(shù)據(jù)。無論掃描二維碼時包含多少數(shù)據(jù),用戶都可以立即訪問信息。本文將用一行Python代碼實現(xiàn)二維碼的讀取與生成,需要的可以參考一下
    2022-02-02
  • 如何給windows設(shè)置定時任務(wù)并運行python腳本

    如何給windows設(shè)置定時任務(wù)并運行python腳本

    這篇文章主要介紹了如何給windows設(shè)置定時任務(wù)并運行python腳本,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08

最新評論

马尔康县| 和顺县| 兴安盟| 林西县| 恩平市| 玛曲县| 安阳市| 浦东新区| 铁岭市| 宜兰市| 惠来县| 浦江县| 江门市| 武隆县| 柘荣县| 武冈市| 荥经县| 进贤县| 宁化县| 中卫市| 高阳县| 清涧县| 抚州市| 怀来县| 武汉市| 莱州市| 怀柔区| 镇雄县| 石屏县| 龙陵县| 沙湾县| 潜山县| 乌拉特后旗| 海晏县| 彭州市| 普安县| 广德县| 巴南区| 睢宁县| 横峰县| 襄樊市|