算法代码[置顶] 机器学习实战之KNN算法详解
改章節筆者在深圳喝咖啡的時候突然想到的...之前就有想寫幾篇關于算法代碼的文章,所以回家到以后就奮筆疾書的寫出來發表了
????前一段時間介紹了Kmeans聚類,而KNN這個算法剛好是聚類以后經常使用的匹配技巧。我們都知道python中有Numby和Scipy這兩個庫,還有前段時間寫的matplot庫,繪圖用的,大家可以參考下,實際這個算法是看懂之前的一些算法的實現。
????上面我就簡單介紹下這個算法實現,首先我們先肯定一個事前準備好的矩陣,這個多是事前聚類出來的或者通過專家估計出來的值。
????為了這個分類矩陣和標簽寫一個函數,這里我們把它稱為createDataSe:
????上面給出這個函數的代碼:
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????看這篇博客的同時最好配有《機器學習實戰》這本書,這本書的譯者其中一個是現在項目的一個人參與者,在書中我們可以看到這樣的圖片:
????
????這樣很明確的我們可以看到這4個點 和其對應的標簽。
????所謂KNN即我們新來一個測試點和之前我們做好標記的點計算距離,然后采取距離最近的標簽作為該測試點的標簽,當然你可能覺得原來是這么簡單的貨色,是的這個樸素的思惟,在當今的各種推薦系統,以及廣告系統中,依然有所使用。
????然后我們繼續講解下一段簡單的代碼,有了參考點,下一段當然是來測試點了,
????上面我就先貼上代碼:
每日一道理“一年之計在于春”,十幾歲的年紀,正是人生的春天,別辜負了歲月老人的厚愛與恩賜。行動起來,播種夢想吧!
def classify(inX, dataSet, labels, k):dataSetSize = dataSet.shape[0]diffMat = tile(inX, (dataSetSize, 1))-dataSetprint(diffMat, '\n')sqDiffMat = diffMat**2print(sqDiffMat)sqDistances = sqDiffMat.sum(axis=1)print(sqDistances)distance = sqDistances**0.5sortedDistIndices = distance.argsort()classCount = {}for i in range(k):voteIlabel = labels[sortedDistIndices[i]]classCount[voteIlabel]= classCount.get(voteIlabel, 0)+1 sortedClassCount = sorted(classCount.items(), key = operator.itemgetter(1), reverse = True)return sortedClassCount[0][0]
????當然這個有書而且很仔細的童鞋會發現我多了幾行打印代碼,第一行是失掉先驗數據的列數,然后第二行是產生一個與該矩陣一樣巨細的矩陣并和原矩陣相減,然后失掉測試點與4個標記點的坐標差,下一行是打印,接下來就是我們將這個矩陣停止平方,然后將所有數據相加,合為一個數據,然后將其開平方,接距離停止排序,產生一個排名。
????這樣所有點到測試點的距離排名就都有了。
????下一段for循環開始是選擇前k個最近距離對該測試點停止投票,最后再次將投票結果停止排序,輸出得票率最高的一個點作為最后的結果。這就是終究的標簽結果。
????不得不感嘆一句這么短的代碼完成了這多功能!
????最后我再說點關于這一句的用法,這個是為了不返回異常如果沒有,則增長一項,有了就增長1,這當然是最簡單的KNN算法思惟的論述,但是與實際應用差了十萬八千里。
classCount.get(voteIlabel, 0)????呵呵,這個也不是說這玩意沒用,只是真正使用的時候多是高維空間的特征不是二維空間的特征沒辦法畫出在空間中的點的位置。好了就說這么多吧。
????附上測試調用的代碼,該代碼完成了(0,0)點的分類:
group, labels = createDataSet()print(classify([0, 0], group, labels, 3))????對了還得給出程序運行的截圖:
????
文章結束給大家分享下程序員的一些笑話語錄: 真正的程序員喜歡兼賣爆米花,他們利用CPU散發出的熱量做爆米花,可以根據米花爆裂的速度聽出正在運行什么程序。
--------------------------------- 原創文章 By
算法和代碼
---------------------------------
轉載于:https://www.cnblogs.com/xinyuyuanm/p/3150292.html
總結
以上是生活随笔為你收集整理的算法代码[置顶] 机器学习实战之KNN算法详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 常见的报修系统有哪些?哪一个适合物业报修
- 下一篇: 乌鲁木齐文秀山居是毛坯房还是精装修?