買了王斌老師翻譯的《機器學習實戰》一書,裡面全是乾貨,既可以練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進行資料分析。感覺目前章節的測試方法太渣,留著以後學了更...