本文記錄作者在機器學習實戰書籍中,個人學習筆記,以及各類演算法的個人理解。
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...