機器學習實戰(Python3版)

2021-08-09 04:54:45 字數 3288 閱讀 5693

水平有限,若有錯誤還請不吝賜教!

最近在學機器學習,因為python2跟python3的差距,所以,我選擇直接學習python3來完成對機器學習實戰的內容,此類部落格會持續更新

(等我完成本書內容,**會慢慢在github上更新)

接觸到第乙個演算法為k-近鄰演算法,其偽**如下:

1.計算已知類別資料集中的點與當前點之間的距離

2.按照距離遞增次序排列

3.選取與當前點距離最小的k個點

4.確定前k個點所在類別的出現頻率

5.返回k個點出現頻率最高的類別作為當前點的**分類

下面貼上knn.py**:

from numpy import *

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

def classify0(inx,dataset,labels,k):

#此函式擁有4個輸入引數,inx表示分類的輸入向量,dataset表示輸入的訓練樣本集,labels為標籤向量,

#k表示用於選擇最近鄰的數目,其中標籤向量的元素數目與矩陣dataset的函行數相同。

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]

進入python命令提示符輸入

import knn

group,labels =knn.createdataset()

knn.classify0([0,0],group,labels,3)【輸出結果是b,可以改變[0,0]的值試試其他】

由於對python了解不多,在這裡說一下我對這些**的理解,加深自己學習python的印象

輸入向量的規格需要和測試資料集的相同,之後按步驟計算出距離之後,通過argsort()函式進行從小到大排序,確定k個距離最小元素所在的主要分類,輸入的k總是正整數

之後將classcount字典分解為元組列表,classcount.get(voteilabel,0)就是從字典裡面取值(votellabel相當於key),若有+1,若沒有返回0,也就是k個點所在的出現概率。

然後使用itemgetter(1)函式對第二個元素對元組進行排序。reverse=true表示逆序。最後返回發生頻率最高的元素標籤。

首先要做的是從文字檔案中解析資料,那麼新增以下**到knn.py,以此來處理輸入格式問題,該函式的輸入為檔名字串,輸出為訓練樣本矩陣和類標籤向量

def file2matrix(filename):

fr = open(filename)

arrayolines = fr.readlines()

numberoflines = len(arrayolines)

returnmat = zeros((numberoflines,3))

classlabelvector =

index =0

for line in arrayolines:

line = line.strip()

listfromline = line.split('\t')

returnmat[index,:] = listfromline[0:3]

index += 1

return returnmat,classlabelvector

python處理文字檔案非常容易,首先我們需要知道文字檔案有多少行,也就是開啟檔案,得到行數,然後建立以零填充的矩陣numpy

為了簡化處理,這裡講該矩陣的另一維度設定為固定值3.迴圈處理檔案中的每行資料,首先使用line.strip()擷取所有的回車字元,

然後使用\t將上一步得到的整行資料分割成乙個元素列表,接著選取前3個元素,儲存到特徵矩陣中。利用python的負索引(索引值為-1表示列表中的最後一列元素)

可以很方便的將列表最後一列儲存到向量classlabelvector中,需要注意的是我們必須明確地通知直譯器,告訴他列表

中儲存的元素值為整數,否則python會將這些元素當成字串處理

reload(knn)

datingdatamat,datinglabels = knn.file2matrix('檔名') 檔案必須存在在工作目錄中。

現在我們已經可以轉換成想要的格式了。那麼接下來就是了解資料的真實含義。

使用malplotlib來展示資料

import matplotlib

import matplotlib.pyplot as plt

fig =plt.figure()

ax = fig.add_subplot(111)

ax.scatter(datingdatamat[:,1],datingdatamat[:,2])

plt.show()

輸出結果使用datingdatamat矩陣的第二第三列資料。

由於沒有使用樣本分類的特徵值,所以,很難辨別資料,一般會採用色彩來標記不同樣本分類。

ax.scatter(datingdatamat[:,1],datingdatamat[:,2],15.0*array(datinglabels),15.0*array(datinglabels))
執行這行**,如果出現報錯,重新匯入numpy

from numy import *

之後 重新繪圖即可出現用色彩標記後的散點圖

plt.show()

機器學習實戰筆記一 Python3

程式清單2 1 k近鄰演算法 本筆記將主要注意力放在理解 上,所以大家看 中的注釋即可 個人程式注釋 python3 部分 改造 針對iteritems只支援python2的情況 from numpy import import operator 運算子模組 def createdataset gr...

機器學習實戰 Python3編譯存在的各種問題

第四章 問題1 程式清單4 5執行錯誤 gbk codec can t decode byte 0xae in position 199 illegal multibyte sequence 問題定位 wordlist textpares open email ham d.txt i encodin...

Python3《機器學習實戰》02 決策樹

執行平台 windows python版本 python3 ide anaconda3 決策樹 decision tree 的乙個重要任務就是為了理解資料中所蘊含的知識資訊,因此決策樹可以使用不熟悉的資料集合,並從中提取出一系列規則,這些機器根據資料集建立規則的過程,就是機器學習過程。決策樹是一種基...