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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

机器学习实战学习笔记 一 k-近邻算法

發布時間:2024/7/19 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 机器学习实战学习笔记 一 k-近邻算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

k-近鄰算法很簡單,這里就不贅述了,主要看一下python實現這個算法的一些細節。下面是書中給出的算法的具體實現。

def clssify(inX,dataset,label,k):#計算距離datasetSize = dataset.shape[0]diffMat = tile(inX,(dataSize,1))-datasetsqdiffMat = diffMat ** 2distance = sqdiffMat.sum(axis = 1)sorteddistance = distance.argsort()labelcount = {}for i in range(k):label_index = label[sorteddistance[i]]labelcount[label_index] = sortedlabel = sorted(labelcount.iteritems(),key = operator.itemgetlabelcount.get(label_index,0)+1ter(0),reverse = True) return sortedlabel[0][0]

  我學習python沒多長時間,一句一句來學習這段代碼,發現收獲不小。首先來看第一句,dataset.shape[0]返回的是dataset這個array的行數。

tile這個函數非常牛逼啊,我只說它在這個里面是什么意思,我們知道inX是個向量,而dataset是個矩陣,兩者之間要進行相減的運算,需要把這個向量也補成一個和dataset有相同行數列數的矩陣,怎么個補法呢。這就要看tile()的第二個參數了,也就是上面的(datasetsize,1),這個參數的意思就是把inX補成有datasetsize行數的矩陣。

假如inX是(1,2) datasetsize =3 那么經過tile()轉換后產生了一個這樣的矩陣([1,2],[1,2],[1,2])

然后和dataset相減就是根據矩陣的減法進行的。接下來看sqdiffMat.sum(axis = 1)這句,假如sqdiffMat是([1,2],[0,1],[3,4])關注下axis這個參數,它影響了你對矩陣求和時候的順序,axis=0是按照行求和,axis=1是按照列進行求和,因此這樣的求和結果就是([4,7])。至于argsort()這個函數的作用很簡單,就是把向量中每個元素進行排序,而它的結果是元素的索引形成的向量。例子如下:

distance是這么個東西------([1,4,3])

經過distance.argsort()之后的結果是([0,2,1])

另外需要主意的一點是sorted()函數返回的是一個list。

轉載于:https://www.cnblogs.com/lianwl/p/3314964.html

總結

以上是生活随笔為你收集整理的机器学习实战学习笔记 一 k-近邻算法的全部內容,希望文章能夠幫你解決所遇到的問題。

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