機器學習實戰 2 1

2021-09-12 08:33:21 字數 1514 閱讀 8151

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演算法是實際中最常用的聚類演算法...