本文章目的主要是在《機器學習實戰》這本書與其實踐**的基礎上,對其原理和特殊函式進行解釋,並給出對應超連結。
第二章 第乙個 感興趣男人分類器(實現k近鄰演算法)
from numpy import *import operator
import numpy as np
def
createdataset():
group = np.array([[1.0
,1.1],[1.0
,1.0],[0
,0],[0
,0.1]])
labels = ['a'
,'a'
,'b'
,'b']
return group, labels
def
classify0(inx,dataset,labels,k):
datasetsize=dataset.shape[0]
# numpy函式:[1]shape用法
diffmat=tile(inx,(datasetsize,
1))-dataset
#【python系列】numpy中的tile函式
sqdiffmat=diffmat**2
# **兩個乘號就是乘方,比如2**4,結果就是2的4次方,結果是16 這裡是全部元素分別乘方
sqdistances=sqdiffmat.sum(axis=1)
# python中的sum函式.sum(axis=1)
distances=sqdistances**0.5
sorteddistindcies=distances.argsort()
#淺述python中argsort()函式的用法
classcount={}
#python中,花括號,中括號,小括號的區別在**
for i in
range(k):
#詳細記錄python的range()函式用法
voteilabel=labels[sorteddistindcies[i]]
classcount[voteilabel]=classcount.get(voteilabel,
0)+1
#python 字典(dictionary) get()方法
sortedclasscount=sorted(classcount.items(),
key=operator.itemgetter(1),
reverse=true)
#python中的operator.itemgetter函式
#python 字典items返回列表,iteritems返回迭代器
#【python】 sorted函式
return sortedclasscount[0][0]
def
file2matrix(filename):
fr=open(filename)
arrayolines =fr.readlines()
#讀所有行
numberoflines=len(arrayolines)
returnmat=np.zeros((numberoflines,
3)) classlabelvector=
index=0
for line in arrayolines:
line=line.strip()
#去回車符
listfromline=line.split('
\t')
returnmat[index,:]=listfromline[0:3]
#取前3成特徵矩陣
#取最後一列元素
index+=1
return returnmat,classlabelvector
def
autonorm(dataset):
minvals=dataset.min(0)
maxvals=dataset.max(0)
#python numpy中陣列.min()
ranges=maxvals-minvals
normdataset=np.zeros(shape(dataset))
m=dataset.shape[0]
normdataset=dataset-tile(minvals,(m,
1)) normdataset=normdataset/tile(ranges,(m,
1)) return normdataset,ranges,minvals
def
classifyperson():
resultlist=['not in all'
,'in small doses'
, 'in large doses']
percenttats=float(input("percentage of time spent playing video games?"))
ffmiles=float(input("frequent fliter miles earned per year?"))
icecream=float(input("liters of ice cream consumed per year?"))
datingdatamat,datinglabels=file2matrix('c:
\\users\盧雨辰\desktop\course resource·\machinelearninginaction\ch02\datingtestset2.txt')
normmat,ranges,minvals=autonorm(datingdatamat)
inarr=np.array([ffmiles,percenttats,icecream])
result=classify0((inarr-minvals)/ranges,normmat,datinglabels,
3) print("you will probably like this person:"+resultlist[result-1])
print(normmat[0:10])
《機器學習實戰》 K 近鄰演算法
基本原理 通過計算新資料與給定的樣本資料之間的距離,來確定相似度排名 然後取前k個最相似的樣本,統計這k 一般不大於20 個樣本中出現最多的分類,設為新資料的分類。新資料,訓練樣本集,樣本資料標籤 即分類 最近鄰 前k個最相似資料 最近鄰標籤 演算法實施 首先提取要比較的特徵,確定各特徵的權重,進行...
機器學習實戰 K 近鄰演算法
簡單的說,k 近鄰演算法採用測量不同特徵值之間的距離辦法進行分類.收集資料 可以使用任何方法。準備資料 距離計算所需要的數值,最好是結構化的資料格式。分析資料 可以使用任何方法。訓練演算法 此步驟不適用於k 近鄰演算法。測試演算法 計算錯誤率。使用演算法 首先需要輸入樣本資料和結構化的輸出結果,然後...
機器學習實戰 k 近鄰演算法
本系列是基於 機器學習實戰 這本書做的讀書筆記,原書採用python2作為工具,我則將原書 改為用python3編寫並記錄在此系列中。我將把書中對這些機器學習演算法的定義謄上,然後寫下自己對該演算法的通俗理解,之後貼出書中演算法清單中的 本書講解的第乙個機器學習演算法是k 近鄰演算法 knn 它的工...