機器學習演算法實戰筆記

2021-09-28 12:03:23 字數 3174 閱讀 8407

本文記錄作者在機器學習實戰書籍中,個人學習筆記,以及各類演算法的個人理解。

def

classify0

(inx,dataset,labels,k)

:#knn

datasetsize = dataset.shape[0]

diffmat = np.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]

]#獲取排序後前面k個的類別

classcount[voteilabel]

= classcount.get(voteilabel,0)

+1#檢測字典中是否存在某標籤,若沒有則初始化並複製為0,然後遍歷過程中不斷累加某類出現的次數

sortedclasscount =

sorted

(classcount.items(

),key=operator.itemgetter(1)

,reverse=

true

)#按字典中的次數排序,並返回排序後的二維列表

return sortedclasscount[0]

[0]

演算法過程:

def

file2matrix

(filename)

: fr =

open

(filename,

'r')

arrayolines = fr.readlines(

) numberoflines =

len(arrayolines)

returnmat = np.zeros(

(numberoflines,3)

) classlabelvector =

index =

0for line in arrayolines:

line = line.strip(

)#預設去除字串開頭和結尾的空格或換行字元

listfromline = line.split(

'\t'

)#已空格分割此行資料

returnmat [index,:]

= listfromline[0:

3]#讀取特徵矩陣-1

])#標籤列表賦值

index +=

1return returnmat,classlabelvector

def

autonorm

(dataset)

:#歸一化特徵值

minvals = dataset.

min(0)

#返回dataset中每一列最小值

maxvals = dataset.

max(0)

#返回dataset中每一列最大值

ranges = maxvals - minvals #資料集中每乙個特徵值的最大最小差值

normdataset = np.zeros(np.shape(dataset)

)#初始化0矩陣和原資料集維度相同

m = dataset.shape[0]

#得到原資料集的行數

normdataset = dataset - np.tile(minvals,

(m,1))

#將原資料集中每個特徵減去此特徵中最小值

normdataset = normdataset / np.tile(ranges,

(m,1))

#得到歸一化後的特徵值矩陣

return normdataset, ranges, minvals

def

datingclasstest()

: horatio =

0.10

#設定測試比例

datingdatamat,datinglabels = file2matrix(

'datingtestset.txt'

)#分出文字中的特徵值和標籤結果

normmat,ranges,minvals = autonorm(datingdatamat)

#得到歸一化後資料

m = normmat.shape[0]

#得到樣本數量

numtestvecs =

int(m * horatio)

#由比例得出測試個數

errcount =

0.0for i in

range

(numtestvecs)

: classifierresult = classify0(normmat[i,:]

,normmat[numtestvecs:m,:]

,datinglabels[numtestvecs:m],3

)#得到測試集中依據訓練集得出的分類結果

print

("the classifier came back with: %s,the real answer is: %s"

%(classifierresult,datinglabels[i]))

#輸出分類結果

if(classifierresult != datinglabels[i]):

#統計分類錯誤個數

errcount +=

1.0print

("the total error rate is: %f"

%(errcount/

float

(numtestvecs)))

#列印出錯誤率

本文在機器學習學習實戰書籍的原有**的基礎上在修改在python3環境下實現,加上在學習過程中對於每乙個**段的注釋理解,希望能夠共同學習的人。

機器學習實戰筆記(k鄰近演算法)

1.k鄰近演算法原理 k鄰近演算法通過計算不同特徵值間的距離進行分類 存在乙個樣本資料集合,也稱為訓練樣本集,樣本集中每個資料都存在標籤。輸入沒有標籤的新資料後,將輸入資料中的每個特徵值和訓練樣本集進行比較,然後選出特徵最相似的資料集的標籤作為輸入資料集標籤。一般來說我們選取訓練樣本集中前k個相似資...

機器學習實戰筆記 KNN近鄰演算法

knn近鄰演算法偽 對未知類別屬性的資料集中的每個點依次執行以下操作 1 計算已知類別資料集中的點與當前點之間的距離 2 按照距離遞增次序排序 3 選取與當前點距離最小的k個點 4 確定前k個點所在類別的出現頻率 5 返回前k個點出現頻率最高的類別作為當前點的 分類。import tensorflo...

機器學習實戰筆記

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