【機器學習演算法-python實現】KNN-k近鄰演算法的實現(附源碼)

來源:互聯網
上載者:User

(轉載請註明出處:http://blog.csdn.net/buptgshengod)

1.背景    今後博主會每周定時更新機器學習演算法及其python的簡單實現。今天學習的演算法是KNN近鄰演算法。KNN演算法是一個監督學習分類器類別的演算法。         什麼是監督學習,什麼又是無監督學習呢。監督學習就是我們知道目標向量的情況下所使用的演算法,無監督學習就是當我們不知道具體的目標變數的情況下所使用的。而監督學習又根據目標變數的類別(離散或連續)分為分類器演算法和迴歸演算法。           k-Nearest Neighbor。k是演算法中的一個約束變數,整個演算法的總體思想是比較簡單的,就是將資料集的特徵值看作是一個個向量。我們給程式一組特徵值,假設有三組特徵值,就可以看做是(x1,x2,x3)。系統原有的特徵值就可以看做是一組組的(y1,y2,y3)向量。通過求兩向量間的距離,我們找出前k個距離最短的y的特徵值對。這些y值所對應的目標變數就是這個x特徵值的分類。公式:


2.python基礎之numpy        numpy是python的一個數學計算庫,主要是針對一些矩陣運算,這裡我們會大量用到它。 介紹一下本章代碼中用到的一些功能。
arry:是numpy內建的數組表示,比如本例中的4行2列數字可以這樣輸入

group=array([[9,400],[200,5],[100,77],[40,300]])


shape:顯示(行,列)例:shape(group)=(4,2)


zeros:列出一個相同格式的空矩陣,例:zeros(group)=([[0,0],[0,0],[0,0],[0,0]])


tile函數位於python模組 numpy.lib.shape_base中,他的功能是重複某個數組。比如tile(A,n),功能是將數組A重複n次,構成一個新的數組


sum(axis=1)矩陣每一行向量相加


3.資料集
 
4.代碼    代碼分三個函數,分別是
建立資料集:

createDataset

from __future__ import divisionfrom numpy import *import operatordef createDataset():        group=array([[9,400],[200,5],[100,77],[40,300]])                labels=['1','2','3','1']        return group,labels  

資料歸一化:

autoNorm

def autoNorm(dataSet):    minVals = dataSet.min(0)    maxVals = dataSet.max(0)    ranges = maxVals - minVals    normDataSet = zeros(shape(dataSet))      m = dataSet.shape[0]    normDataSet = dataSet - tile(minVals, (m,1))    #print normDataSet    normDataSet = normDataSet/tile(ranges, (m,1)) #element wise divide   # print normDataSet    return normDataSet, ranges, minVals

分類函數:

classify

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    sortedDistIndicies = distances.argsort()         classCount={}              for i in range(k):        voteIlabel = labels[sortedDistIndicies[i]]                classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1    sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True)    return sortedClassCount[0][0]


5.顯示結果 

  


6.代碼下載


 







聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.