《機器學習實戰》閱讀筆記(三)

2021-08-21 08:07:12 字數 3953 閱讀 7761

接上篇

2.2.3準備資料:歸一化數值

由於數值較大的值會產生較大的影響,所以需要歸一化,公式如下:

newvalue=(oldvalue-min)/(max-min)
歸一化函式如下

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))

normdataset=normdataset/tile(ranges,(m,1))

return normdataset,ranges,minvals

在互動式介面

>>> from numpy import *

>>> import knn

>>> datingdatamat,datinglabels=knn.file2matrix('datingtestset2.txt')

>>> normmat,ranges,minvals=knn.autonorm(datingdatamat)

>>> normmat

2.2.4測試演算法:作為完整程式驗證分類器

用已有資料的90%作為訓練樣本,剩餘10%去測試分類器,檢驗分類器的正確率。10%的樣本是隨機選擇的。

def datingclasstest():

horatio=0.10

datingdatamat,datinglabels=file2matrix('datingtestset2.txt')

normmat,ranges,minvals=autonorm(datingdatamat)

m=normmat.shape[0]

numtestvecs=int(m*horatio)

errorcount=0.0

for i in range(numtestvecs):

classifierresult=classify0(normmat[i,:],normmat[numtestvecs:m,:],datinglabels[numtestvecs:m],3)

print("the classifier came back with: %d,the real answer is %d" %(classifierresult,datinglabels[i]))

if (classifierresult !=datinglabels[i]):errorcount+=1.0

print("the total error rate is: %f" %(errorcount/float(numtestvecs)))

測試函式如上,其中遇到了兩個問題,一是我用的python3,所以print()要加括號,否則會報錯;二是

2.2.5 使用演算法:構建完整可用系統

def classifyperson():

resultlist=['not at all','in small doses','in large doses']

percenttats=float(input("percentage of time spent playing vedio games?"))

ffmiles=float(input("frequent filer miles earns per year?"))

icecream=float(input("liters of ice cream consumed per year?"))

datingdatamat,datinglabels=file2matrix('datingtestset2.txt')

normmat,ranges,minvals=autonorm(datingdatamat)

inarr=array([ffmiles,percenttats,icecream])

classifierresult=classify0((inarr-minvals)/ranges,normmat,datinglabels,3)

print("you will probably like the person:%s"%resultlist[classifierresult-1])

還是要注意print(),python3把raw_input()改為了input()

約會內容到此結束了~

2.3示例:手寫識別系統

步驟:2.準備資料:編寫函式classify0(),將影象格式轉化為分類器使用的list格式。

3.分析資料:在python命令提示符中檢查資料,確保它符合要求。

4.訓練演算法:此步驟不適用於k近鄰演算法。

5.測試演算法:編寫函式使用提供的部分資料集作為測試樣本,測試樣本與非測試樣本的區別在於測試樣本是已經完成分類的資料,如果**分類與實際類別不同,則標記為乙個錯誤。

6.使用演算法:本例沒有完成此步驟。

2.3.1準備資料:將影象轉化為測試向量

def img2vector(filename):

returnvect=zeros((1,1024))

fr=open(filename)

for i in range(32):

linestr=fr.readline()

for j in range(32):

returnvect[0,32*i+j]=int(linestr[j])

return returnvect

2.3.2測試演算法:使用k近鄰演算法識別手寫數字

def handwritingclasstest():

hwlabels=

trainingfilelist=listdir('trainingdigits')

m=len(trainingfilelist)

trainingmat=zeros((m,1024))

for i in range(m):

filenamestr=trainingfilelist[i]

filestr=filenamestr.split('.')[0]

classnumstr=int(filestr.split('_')[0])

trainingmat[i,:]=img2vector('trainingdigits/%s' %filenamestr)

testfilelist=listdir('testdigits')

errorcount=0.0

mtest=len(testfilelist)

for i in range(mtest):

filenamestr=testfilelist[i]

filestr=filenamestr.split('.')[0]

classnumstr=int(filestr.split('_')[0])

vectorundertest=img2vector('testdigits/%s' %filenamestr)

classifierresult=classify0(vectorundertest,trainingmat,hwlabels,3)

print("the classifier came back with:%d,the real answer is: %d"%(classifierresult,classnumstr))

if (classifierresult!=classnumstr):

errorcount+=1.0

print("\nthe total number of error rate is %f" %(errorcount/float(mtest)))

2.4本章小結

介紹了k近鄰演算法,並給出了兩個示例。

機器學習實戰讀書筆記(三)

從本節開始,將介紹無監督學習。今天整理了無監督學習中的k均值聚類演算法和mapreduce部分的內容。本部分是8月24號的內容。9.k均值聚類演算法 1 k均值聚類演算法 優點 易於實現。缺點 可能收斂到區域性最小值,在大規模的資料集上的收斂速度慢。適用資料型別 數值型。可以用的誤差指標如誤差的平方...

機器學習實戰筆記

在 機器學習實戰 的決策樹的儲存這方面內容學習過程中,進行 除錯時遇到以下兩個錯誤 1 typeerror write argument must be str,not bytes 2 unicodedecodeerror gbk codec can t decode byte 0x80 in po...

《機器學習實戰》學習筆記

很久沒寫過部落格了,一重開就給自己挖了這麼乙個大坑 最近一段時間看了 機器學習實戰 這本書,感覺寫得不錯,認真看了看。關於這本書的書評及購買事宜請移步豆瓣 京東 亞馬遜等 這裡不多說。不過有一點,感覺這本書有個很好的地方是給出了各個演算法的python實現 和講解,要求不高的話可以拿來用了 懶 在這...