from numpy import * #匯入科學計算包numpy
import operator #匯入運算子模組
'''def createdataset():
group = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])
labels = ['a','a','b','b']
return group,labels'''
#2-1k近鄰法
def classify0(inx, dataset, labels, k):#inx為輸入向量,dataset為訓練樣本集,labels為標籤向量
datasetsize = dataset.shape[0]
diffmat = 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]]
classcount[voteilabel] = classcount.get(voteilabel,0)+1
sortedclasscount = sorted(classcount.items(),key=operator.itemgetter(1),reverse=true)
return sortedclasscount[0][0]
group = array([[1.0, 1.1], [1.0, 1.0], [0, 0], [0, 0.1]])
labels = ['a', 'a', 'b', 'b']
x = classify0([1,1], group, labels, 3)
print(x)
.shape用於計算array各維度的長度,在python中都是從0開始的。
tile函式是numpy包中的,用於重複array,比如上面**中的tile(inx,(datasetsize,1)),表示重複inx,其行重複datasetsize次,而列不重複
.sum是numpy中用於計算乙個array內部行列求和,axis=1表示按列求和,即把每一行的元素加起來
.argsort是numpy中對array進行排序的函式,排序是公升序
classcount = {} 其中{}表示生成的是字典,在字典這個類中,有方法get,對classcount元素賦值,其實是個計數器sorted是內建函式,可以help(sorted)檢視用法operator模組下的itemgetter函式,顧名思義就是提取第x個元素的意思。
reverse=true 代表降序排列,sortedclasscount[0][0]是傳送頻率最高的類。
機器學習實戰 2 1 knn演算法手寫
首先初始化資料 def createdataset group np.array 1.0,1.1 1.0,1.0 0.0,0.0 0.0,0.1 labels a a b b return group,labels然後實現分類,定義方法classify0 def classify0 inx,data...
機器學習實戰
花了一段時間,總算把 機器學習實戰 粗讀了一遍,重點就在這個粗讀上。這本書的確不錯,機器學習的幾個經典演算法都涉及了,每個演算法都有1 2個實際例子進行說明,都有實實在在的 讓我想起了linus的 talk is cheap,show me the code 那句名言。但多年來養成的習慣,從來都是喜...
機器學習機器學習實戰 kmeans
簡介 聚類演算法是一種無監督學習,它將相似的物件歸類到同一簇中。聚類的方法可以應用所有的物件,簇內的物件越相似,聚類效果也就越好。聚類和分類的最大不同之處在於,分類的目標是已知的,聚類是完全無監督學習,類別沒有像分類那樣被預先定義出來,所以叫做無監督學習。kmeans演算法是實際中最常用的聚類演算法...