通過案例深入認(rèn)識(shí)分類器和機(jī)器學(xué)習(xí)流程艇纺。
分類器函數(shù)
機(jī)器學(xué)習(xí)可以自動(dòng)從眾多數(shù)據(jù)中歸納出分類器函數(shù)税弃,這個(gè)函數(shù)接收新的一條數(shù)據(jù)作為輸入?yún)?shù)x降盹,然后返回一個(gè)結(jié)果y(即此條數(shù)據(jù)所對應(yīng)的分類類別).
Features:特征值馅笙,足以用來區(qū)分類別的若干屬性值骏令,用來輸入給機(jī)器進(jìn)行學(xué)習(xí)的數(shù)據(jù)蔬捷。如鳶尾花案例中的花萼長寬、花瓣長寬榔袋。
Label:標(biāo)簽周拐,我們希望機(jī)器學(xué)習(xí)輸出的結(jié)果(我們需要手工為訓(xùn)練數(shù)據(jù)和測試數(shù)據(jù)打標(biāo)簽),如鳶尾花案例中經(jīng)過訓(xùn)練后計(jì)算機(jī)能夠針對任意鳶尾朵數(shù)據(jù)評估出所屬類型凰兑。
準(zhǔn)備工作
可以繼續(xù)使用前一篇文章的項(xiàng)目妥粟,如果沒有請參照它的準(zhǔn)備工作部分
Scikit-learn-iris-macOS-案例-機(jī)器學(xué)習(xí)入門
需要下載安裝Python 3.x;
需要從終端安裝Pip、Virtualenv并創(chuàng)建項(xiàng)目和初始化吏够、激活虛擬環(huán)境
sudo easy_install pip
sudo pip install --upgrade virtualenv
mkdir ~/desktop/myapp
sudo virtualenv --system-site-packages -p python3 ~/venv
cd ~/desktop/myapp
source ./venv/bin/activate
終端提示行前面出現(xiàn)(venv)字樣
需要從終端安裝Numpy和Scipy,Scikit-learn等第三方模塊
sudo pip install numpy scipy
pip install -U scikit-learn
訓(xùn)練分類器流程
創(chuàng)建iris2.py文件勾给,包含以下內(nèi)容
#導(dǎo)入數(shù)據(jù)集(在這里共計(jì)150條)
from sklearn import datasets
iris=datasets.load_iris()
#特征和標(biāo)簽
X=iris.data
y=iris.target
#將數(shù)據(jù)劃分為訓(xùn)練數(shù)據(jù)和測試數(shù)據(jù)滩报,測試數(shù)據(jù)占一半即0.5(75條)
from sklearn.cross_validation import train_test_split
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.5)
#創(chuàng)建分類器classifier-決策樹分類器DecisionTreeClassifier
from sklearn import tree
my_classifier=tree.DecisionTreeClassifier()
#訓(xùn)練數(shù)據(jù)
my_classifier.fit(X_train,y_train)
#使用訓(xùn)練好的分類器模型進(jìn)行預(yù)測實(shí)驗(yàn)
predictions=my_classifier.predict(X_test)
#預(yù)測結(jié)果應(yīng)該和y_test基本一致
print(predictions)
print(y_test)
確保終端進(jìn)入激活環(huán)境,以(venv)開頭播急,如果沒有請執(zhí)行以下命令
cd ~/desktop/myapp
source ./venv/bin/activate
然后執(zhí)行我們的python代碼
python iris2.py
仔細(xì)觀看輸出的兩個(gè)數(shù)組是否完全相同脓钾,一般情況應(yīng)該有不同
計(jì)算模型的精確度
在尾部增加以下代碼
#計(jì)算精確度
from sklearn.metrics import accuracy_score
print(accuracy_score(y_test,predictions))
輸出的結(jié)果大概是0.9x,即我們訓(xùn)練的分類器在百分之九十多的情況下都能作出正確的分類桩警。
由于測試數(shù)據(jù)和訓(xùn)練數(shù)據(jù)的劃分是隨機(jī)的可训,所以每次結(jié)果可能略有不同。
鄰近分類器
注釋掉創(chuàng)建分類器的兩行代碼捶枢,更換新的分類器
#from sklearn import tree
#my_classifier=tree.DecisionTreeClassifier()
from sklearn.neighbors import KNeighborsClassifier
my_classifier=KNeighborsClassifier()
再次運(yùn)行握截,觀察輸出的精確度±檬澹可能提高也可能降低川蒙。
深入理解分類器
分類器就如同下圖中的虛線,將紅綠兩種類型的點(diǎn)分開长已。
我們可以使用一個(gè)函數(shù)表示這個(gè)直線y=mx+b,那么尋找這條直線的過程就是計(jì)算m和b的值畜眨。
機(jī)器學(xué)習(xí)就是從訓(xùn)練數(shù)據(jù)中自動(dòng)歸類尋找到這樣的m、b的值(當(dāng)然機(jī)器學(xué)習(xí)的實(shí)際情況比這要復(fù)雜很多术瓮,可能是條曲線康聂,甚至是個(gè)曲面,可能復(fù)雜到人類難于理解的地步)
探索人工智能的新邊界
如果您發(fā)現(xiàn)文章錯(cuò)誤胞四,請不吝留言指正恬汁;
如果您覺得有用,請點(diǎn)喜歡辜伟;
如果您覺得很有用氓侧,感謝轉(zhuǎn)發(fā)~
END