利用scikit-learn工具和經(jīng)典的iris鳶尾花分類案例快速上手機(jī)器學(xué)習(xí)
準(zhǔn)備工作
下載并安裝python3.x
https://www.python.org/
終端安裝pip和Virtualenv虛擬環(huán)境管理
sudo easy_install pip
sudo pip install --upgrade virtualenv
創(chuàng)建項(xiàng)目文件夾
mkdir ~/desktop/myapp
初始化虛擬環(huán)境
sudo virtualenv --system-site-packages -p python3 ~/venv
激活虛擬環(huán)境
cd ~/desktop/myapp
source ./venv/bin/activate
終端提示行前面出現(xiàn)(venv)字樣
安裝Numpy和Scipy,Scikit-learn
sudo pip install numpy scipy
pip install -U scikit-learn
圖表生產(chǎn)模塊朗兵,可選安裝homebrew https://brew.sh/
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
homebrew安裝遇到
fatal: unable to access 'https://github.com/Homebrew/homebrew/': SSL certificate problem
這主要是網(wǎng)絡(luò)不穩(wěn)定造成的愿待。解決方案:用sudo vim /etc/resolv.conf
打開設(shè)置,輸入i進(jìn)入插入模式蛙吏,上下移動(dòng)光標(biāo)作谭,增加粘貼一行nameserver 8.8.8.8
或者nameserver 114.114.114.114
然后esc退出插入模式稽物,:wq
保存退出,重新使用上面的命令折欠。如果中途又失敗贝或,需要重新增加8.8.8.8,因?yàn)闀?huì)被重置锐秦。
圖表生產(chǎn)模塊咪奖,可選安裝graphviz(需要翻墻)
brew install graphviz
遇到
The Command Line Tools header package must be installed on Mojave
錯(cuò)誤,請(qǐng)按指示目錄打開文件夾/Library/Developer/CommandLineTools/Packages/
進(jìn)行安裝。
--
了解案例
Iris鳶尾花分類經(jīng)典案例介紹
點(diǎn)這里wiki地址查看詳細(xì)
這里鳶尾花數(shù)據(jù)集共有150條农猬,每條數(shù)據(jù)中記錄了每朵花的花萼長(zhǎng)度赡艰、寬度以及花瓣長(zhǎng)度、寬度這四個(gè)數(shù)據(jù)斤葱。
這些花被植物學(xué)家分成三種類型慷垮,前50條是setosa(山鳶尾花),中間50條是versicolor(變色鳶尾花),最后三種是virginica(維吉尼亞鳶尾花)揍堕。
但是料身,計(jì)算機(jī)并不知道植物學(xué)家的分類標(biāo)準(zhǔn)(花萼多寬是山鳶尾花?花瓣多長(zhǎng)是變色鳶尾花衩茸?)芹血。我們的任務(wù)就是訓(xùn)練計(jì)算機(jī)根據(jù)這些數(shù)據(jù)推算出植物學(xué)家的分類標(biāo)準(zhǔn)(模型),以便于以后對(duì)任何一朵鳶尾花數(shù)據(jù)都能自動(dòng)判斷出類型來。
--
了解數(shù)據(jù)
應(yīng)用程序python文件夾中的IDLE幔烛,command+n新建,然后save as存儲(chǔ)到桌面myapp文件夾下命名iris.py,文件內(nèi)容如下
from sklearn.datasets import load_iris
iris=load_iris()
print(iris.feature_names)
print(iris.target_names)
print(iris.data[0])
print(iris.target[0])
for i in range(len(iris.target)):
print ( i,iris.target[i],iris.data[i],iris.target_names[iris.target[i]])
在終端進(jìn)入項(xiàng)目文件夾并激活環(huán)境
cd ~/desktop/myapp
source ./venv/bin/activate
前面提示出現(xiàn)(venv)字樣
運(yùn)行我們的代碼
python iris.py
觀察輸出的各種數(shù)據(jù)啃擦,注意到data包含了四個(gè)長(zhǎng)寬數(shù)字,target表示了屬于第幾種鳶尾花類型
--
訓(xùn)練模型和測(cè)試模型
我們把第0朵饿悬、第50朵令蛉、第100朵的數(shù)據(jù)提取出來作為測(cè)試數(shù)據(jù),其余的作為訓(xùn)練數(shù)據(jù)狡恬。
然后我們用訓(xùn)練數(shù)據(jù)培訓(xùn)我們的計(jì)算機(jī)珠叔,讓它自動(dòng)從數(shù)據(jù)中找出分類規(guī)律,也就是分類模型弟劲。
然后我們?cè)儆眠@個(gè)模型去評(píng)估這三朵花(由于沒有參與訓(xùn)練祷安,所以計(jì)算機(jī)并不知道它們是哪一種類型),如果計(jì)算機(jī)評(píng)估出來的這三朵花類型與之前植物學(xué)家的看法一致兔乞,我們就認(rèn)為計(jì)算機(jī)掌握了鳶尾花的分類方法(盡管我們從頭到尾都不知道植物學(xué)家如何分類的汇鞭,也不知道計(jì)算機(jī)是怎么分類的)。
修改代碼如下
import numpy as np
from sklearn.datasets import load_iris
from sklearn import tree
iris=load_iris()
test_idx=[0,50,100] #三朵預(yù)留出來做測(cè)試的花
train_target=np.delete(iris.target,test_idx,0) #訓(xùn)練模型不包含三朵花
train_data=np.delete(iris.data,test_idx,0) #訓(xùn)練模型不包含三朵花
test_target=iris.target[test_idx]
test_data=iris.data[test_idx]
#用數(shù)據(jù)訓(xùn)練計(jì)算機(jī)
clf=tree.DecisionTreeClassifier() #這里使用了決策樹分類器
clf.fit(train_data,train_target)
print(test_target) #植物學(xué)家對(duì)三朵花分類的看法
print(clf.predict(test_data)) #計(jì)算機(jī)對(duì)三朵花分類的看法
在終端再次運(yùn)行我們的代碼
python iris.py
如果正常則輸出
[0 1 2]
[0 1 2]
這表示計(jì)算機(jī)訓(xùn)練出來的模型和植物學(xué)家觀點(diǎn)一致
--
深入理解決策樹
請(qǐng)確保正確安裝了graphviz模塊
在最后增加以下代碼
from sklearn.externals.six import StringIO
import graphviz
dot_data = tree.export_graphviz(clf, out_file=None,
feature_names=iris.feature_names,
class_names=iris.target_names,
filled=True, rounded=True,
special_characters=True)
graph = graphviz.Source(dot_data)
graph.render("iris")
再次執(zhí)行
sudo python iris.py
這次將會(huì)在桌面myapp文件夾內(nèi)生成一個(gè)pdf文件报嵌,打開后類似下圖虱咧,從圖中我們可以看到計(jì)算機(jī)從147條數(shù)據(jù)中自動(dòng)總結(jié)出來的分類規(guī)律熊榛。
探索人工智能的新邊界
如果您發(fā)現(xiàn)文章錯(cuò)誤锚国,請(qǐng)不吝留言指正;
如果您覺得有用玄坦,請(qǐng)點(diǎn)喜歡血筑;
如果您覺得很有用,感謝轉(zhuǎn)發(fā)~
END