《機器學習實戰》之knn演算法

2022-03-27 12:50:29 字數 2505 閱讀 9599

買了王斌老師翻譯的《機器學習實戰》一書,裡面全是乾貨,既可以練python,又可以學習機器學習演算法知識,挺不錯的,學習一些東西這裡分享下。

k-近鄰演算法(knn),它的核心思想就一句話,如果兩個東西各方面屬性都很相似,那麼這兩個東西屬於同一類。k的意思是有很多東西和你要判斷的東西相似(稱作x),

那麼找出和x各方面屬性最相似的k個東西,如果這k個東西裡面大部分都屬於類c,那麼x就屬於類c。

好了,來分析一下這個演算法需要的資料,首先要判斷的東西x,我們稱作測試集,我們知道x各種屬性的值(後面統稱特徵),但是不知道x屬於哪一類,結果就是求這個。

還有其他很多東西,我們不僅知道它們的特徵,還知道它們屬於哪一類,這些東西稱作訓練集。

來個書上簡單的例子說明下:

電影名稱    打鬥鏡頭    接吻鏡頭    電影型別

california man        3        104      愛情片

he's not---         2        100      愛情片

beautiful woman     1        81      愛情片

x          18        90      ?

上面這個表大家可以看到電影這個東西有三個特徵,電影名稱,打鬥鏡頭,接吻鏡頭,前三個電影我們知道他們的類別,他們屬於訓練集,後面乙個電影x我們只知道他們的特徵,不知道類別,怎麼用knn來算這個。

1.算x和其他電影的相似度

2.找出最相似的k個電影

3.對這k個電影的類別進行排名,選擇類別最多的作為x的類別。

相似度的計算採用的是歐式距離法,d=((x1-x2)2+(y1-y2)2+(z1-z2)2)1/2,對於乙個電影i可以表示成(xi,yi,zi),x,y,z分別表示電影三個特徵的值。

注意:x,y,z的值一般需要縮放至0-1之間,保證每個特徵具有相同的權重,newvalue=(oldvalue-min)/(max-min).

'''

2013.12.26

《機器學習實戰》knn小例項原始碼學習

'''from numpy import *

import

operator

defcreatedataset():

group=array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])

labels=['

a','

a','

b','b'

]

return

group,labels

defclassify0(inx,dataset,labels,k):

#shape是array的乙個屬性,返回矩陣array的各個維度大小

datasetsize=dataset.shape[0]

#tile函式表示將inx在x軸上重複datasetsize次,y軸上重複1次

diffmat=tile(inx,(datasetsize,1))-dataset

#**用於矩陣做冪運算,每個維數值的平方。

sqdiffmat=diffmat**2

#sum函式,axis=1,表示將裡面數相加(列相加),axis=0表示(行相加),axis=none(行列相加)

sqdistances=sqdiffmat.sum(axis=1)

#下面這就是距離了,開根號

distances=sqdistances**0.5

#返回distances排序的索引,用於下面查詢標籤

sorteddistindicies=distances.argsort()

classcount={}

for i in

range(k):

voteilabel=labels[sorteddistindicies[i]]

#統計標籤個數

classcount[voteilabel]=classcount.get(voteilabel,0)+1

#operator 類有意思,可以看看

sortedclasscount=sorted(classcount.items(),key=operator.itemgetter(1),reverse=true)

return

sortedclasscount[0][0]

group,labels=createdataset()

print(classify0([0,0],group,labels,3))

'''小程式可以發散的知識點:

1.tile函式理解,可以自己寫個簡單實現原始碼

2.sorted函式幫助文件看懂,實現猜想,理解

3.operator類應該是操作符過載裡面一些東東,可以看看

學語言最快果然還是看原始碼,一些功能別人實現的總是簡潔些。

'''

我用的是python 3.2,低版本可能有些名字需要改一下。

knn算是乙個很簡單的機器學習演算法,它的假設是各特徵彼此相互獨立,並且權重相同(各特徵都做了歸一化,當然你也可以加上權重值)。

好好學習,天天向上!

機器學習實戰之knn演算法

程式 author xiaoyun from numpy import import operator def createdataset group array 1.0,0.9 1.0,1.0 0.1,0.2 0.0,0.1 labels a a b b return group,labels d...

機器學習實戰之KNN演算法

1 knn分類演算法介紹 演算法實現原理 存在乙個樣本資料集,將需要分類的輸入值與樣本資料集計算歐式距離,將歐式距離由小到大進行排序,取前k次最小距離對應的樣本資料集,對該樣本資料集的類別進行統計,其 現次數最多的類別為輸入值的預判類別。歐式距離計算公式 假設a點座標為 x1,y1 b點座標為 x2...

機器學習實戰之knn演算法pandas

機器學習實戰之knn演算法pandas,供大家參考,具體內容如下 開始學習機器學習實戰這本書,打算看完了再回頭看 周志華的 機器學習。機器學習實戰的 都是用numpy寫的,有些麻煩,所以考慮用pandas來實現 也能回顧之前學的 用python進行資料分析。感覺目前章節的測試方法太渣,留著以後學了更...