機器學習實戰筆記 k 近鄰演算法 函式解析

2021-08-08 17:43:53 字數 3084 閱讀 2991

本文章目的主要是在《機器學習實戰》這本書與其實踐**的基礎上,對其原理和特殊函式進行解釋,並給出對應超連結。

第二章 第乙個 感興趣男人分類器(實現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 它的工...