想用python做機器學(xué)習(xí)嗎画株,是不是在為從哪開始撓頭瀑志?
這里我假定你是新手,這篇文章里咱們一起用Python完成第一個機器學(xué)習(xí)項目污秆。
我會手把手教你以下內(nèi)容:
- 下載python劈猪,numpy,SciPy之類軟件并安裝良拼,這些是python里機器學(xué)習(xí)方面最有用的軟件包战得。
- 加載一個數(shù)據(jù)集,通過統(tǒng)計摘要(statistical summaries)和數(shù)據(jù)可視化來了解數(shù)據(jù)集的結(jié)構(gòu)庸推。
- 創(chuàng)建6個機器學(xué)習(xí)模型常侦,選擇這里邊最好的,然后介紹通過何種方法來確定選出來的模型預(yù)測時有穩(wěn)定的準(zhǔn)確率贬媒。
如果你是機器學(xué)習(xí)的初學(xué)者聋亡,并且你下定決心用python作為開始機器學(xué)習(xí)的語言的話,這篇文章應(yīng)該會比較適合你际乘。
Your First Machine Learning Project in Python Step-By-Step
Photo by cosmoflash, some rights reserved.
剛開始的時候坡倔,Python看起來有點嚇人
Python是一種很流行,很強大的解釋型語言脖含。跟R不一樣罪塔,對于研究,開發(fā)以及完成生產(chǎn)系統(tǒng)來說养葵,python是一個完整的開發(fā)語言征堪,一個完整的平臺。
Python中也有許多可供選擇的模塊和庫关拒,對于上面說的研究佃蚜,開發(fā)和完成生產(chǎn)系統(tǒng)提供了多種實現(xiàn)的路徑。給人的感覺是python的前景勢不可擋着绊。
再次重申谐算,用Python學(xué)習(xí)機器學(xué)習(xí)的最好方法是完成一個完整的項目。
- 這樣做強制你安裝Python畔柔,并且啟動python的解釋器(最少會這樣)氯夷。
- 這樣做能給你一個整體審視的機會,體驗如何一步步完成一個小項目靶擦。
- 這樣做能給你自信腮考,讓你有信心啟動自己的小項目。
初學(xué)者需要一個從頭到尾完成的項目
相關(guān)的書和這方面的課程很多玄捕,但是往往會讓人產(chǎn)生挫折感踩蔚。它們會給你很多的問題解決方法和代碼片段,但是你很難體會到它們是如何被整合到一起的枚粘。
當(dāng)你把機器學(xué)習(xí)算法應(yīng)用到自己的數(shù)據(jù)集的時候馅闽,你就是在進行一個完整的項目。
一個機器學(xué)習(xí)項目可能不是像下面介紹的那樣一步步按順序完成馍迄,但是機器學(xué)習(xí)項目確實有著一些眾所周知的步驟:
- 定義問題
- 準(zhǔn)備數(shù)據(jù)
- 評估算法
- 改進結(jié)果
- 提交結(jié)果
熟悉一個新的平臺或者一個新的工具最好的方式就是從頭到尾踏實的完成一個機器學(xué)習(xí)項目福也,實踐上述的所有關(guān)鍵步驟。也就是說攀圈,實際動手加載數(shù)據(jù)暴凑,統(tǒng)計數(shù)據(jù),評估算法赘来,然后做一些預(yù)測现喳。
如果你這么做了,你就有了一個模板犬辰,這個模板是可以很容易應(yīng)用到一個又一個數(shù)據(jù)集上的嗦篱。一旦你建立了自信,你就可以進一步完善上述關(guān)鍵步驟幌缝,比如說進行進一步的數(shù)據(jù)準(zhǔn)備和結(jié)果改善灸促。
機器學(xué)習(xí)的Hello World
使用python開始機器學(xué)習(xí)最好的小項目是鳶尾花(yuan wei hua,英文iris涵卵,別跟虹膜弄混)的分類問題腿宰。(下載鏈接在此)
這個項目是個好項目,最好就在于它簡單易懂缘厢。
- 鳶尾花的屬性都是數(shù)值類型吃度,讓我們很容易想到怎么來加載數(shù)據(jù),處理數(shù)據(jù)贴硫。
- 這是個分類問題椿每,讓我們能實踐機器學(xué)習(xí)中一種相對簡單的算法——監(jiān)督學(xué)習(xí)算法。
- 這是個多分類問題(不是只分成兩類也就是不是二分類)英遭,要求有特殊的處理间护。
- 這個數(shù)據(jù)集只有4個屬性,150行數(shù)據(jù)挖诸,意味著數(shù)據(jù)集極小汁尺,用內(nèi)存就能輕松搞定(也便于用屏幕顯示或者直接用A4紙打印)
- 所有的數(shù)值屬性都是相同單位多律,相同尺度痴突,不需要任何的縮放和轉(zhuǎn)換就能直接著手開始搂蜓。
python機器學(xué)習(xí)手把手教程(這回是真開始)
這一節(jié)中,我們開始介紹怎樣從頭到尾完成一個小項目辽装。
說一下我們要完成的各個步驟:
- 安裝python和Scipy平臺
- 加載數(shù)據(jù)集
- 計算數(shù)據(jù)集中的各種統(tǒng)計量帮碰。
- 數(shù)據(jù)集可視化
- 在數(shù)據(jù)集上應(yīng)用一些算法并評估
- 進行預(yù)測
要走完每一步,需要一些時間拾积。
建議自己動手輸入涉及到的一些命令殉挽,或者也可以用復(fù)制粘貼來加快速度,總之動手就比只看不做強拓巧。
1. 下載安裝python和Scipy平臺
如果你事先沒有安裝過標(biāo)題中的工具斯碌,請安裝。這里不想非常細致的介紹安裝過程肛度,這種介紹很多傻唾。如果你是開發(fā)人員,安裝軟件包之類對你而言都很簡單贤斜。
1.1 安裝SciPy庫
這里預(yù)設(shè)的python版本是2.7和3.5策吠。這兩個版本以上的版本也應(yīng)該完全沒有問題。
需要安裝的比較關(guān)鍵的庫有5個瘩绒。下面是本文中安裝Python SciPy庫時需要安裝的內(nèi)容:
?Scipy
?Numpy
?Matplotlib
?Pandas
?Sklearn
安裝這些庫有很多方法猴抹。我的建議是選擇一種方法然后一直堅持這種方法來安裝上述的所有軟件包。
鏈接scipyinstallation page 給安裝上述庫提供了非常好的指導(dǎo)锁荔。鏈接里說明了在不同平臺(比如Linux蟀给,mac OS X和Windows)上如何安裝。如果有任何問題阳堕,那么請參考鏈接中的做法跋理,數(shù)千人這么有過相同經(jīng)歷。
在Mac OS X中恬总,可以用macport來安裝python2.7和這些庫前普。Macport的信息,參見其主頁壹堰。
Linux里可以用安裝包管理器拭卿,比如Fedora的yum來安裝RPMs。
如果你用Windows,或者你也不是太確定自己的系統(tǒng)贱纠,我推薦安裝免費軟件Anaconda峻厚。里邊預(yù)裝了你需要的東西。
?注意:這里要求你安裝的scikit-learn的版本為0.18或者以上版本谆焊。
需要更多幫助惠桃?參照下述教程:
·How to Setup a Python Environment for Machine Learning and Deep Learning with Anaconda
·How to Create a Linux Virtual Machine For Machine Learning Development With Python3
1.2 啟動python,檢查已安裝版本
安裝完成后最好確認一下你的python環(huán)境是不是能正常工作。
下面是檢測環(huán)境用的腳本辜王。其中import我們用到的每個庫劈狐,并輸出版本號。
打開命令行誓禁,啟動python解釋器
Python
我推薦直接在解釋器里輸入下面腳本懈息,或者自己寫好版本然后在命令行運行肾档,而不是在一個大的編輯器或者IDE里運行摹恰。盡量讓事情簡單化,確保注意力關(guān)注在機器學(xué)習(xí)上而不是各種工具鏈上怒见。
腳本如下:
# Checkthe versions of libraries
#Python version
import sys
print('Python: {}'.format(sys.version))
# scipy
import scipy
print('scipy: {}'.format(scipy.__version__))
# numpy
import numpy
print('numpy: {}'.format(numpy.__version__))
#matplotlib
import matplotlib
print('matplotlib: {}'.format(matplotlib.__version__))
#pandas
import pandas
print('pandas: {}'.format(pandas.__version__))
#scikit-learn
import sklearn
print('sklearn: {}'.format(sklearn.__version__))
下面為我本地的輸出:
Python: 2.7.11 (default, Mar 1 2016, 18:40:10)
[GCC 4.2.1 Compatible Apple LLVM 7.0.2(clang-700.1.81)]
scipy: 0.17.0
numpy: 1.10.4
matplotlib: 1.5.1
pandas: 0.17.1
sklearn: 0.18.1
比較一下你的輸出俗慈。理想情況下如果你的版本跟上面的相同或者更高,就沒問題遣耍。這些庫里的API不會頻繁變更闺阱。如果你的版本比上面的略高,這個教程里的東西應(yīng)該對你仍然適用舵变。
如果出錯酣溃,請想辦法更正。
如果你不能夠清晰的運行以上的腳本纪隙,那么你將無法完成本教程赊豌。
建議去Google搜索一下你的錯誤信息,或者在Stack Exchange上提問绵咱。
2. 加載數(shù)據(jù)
我們將用到鳶尾花數(shù)據(jù)集碘饼。這個數(shù)據(jù)集很著名,因為這就是我們機器學(xué)習(xí)界和統(tǒng)計學(xué)界的“Hello world”數(shù)據(jù)集社牲。
數(shù)據(jù)集中包含對鳶尾花的150次觀測冀泻。數(shù)據(jù)集中有4列约郁,都是花的一些尺寸數(shù)據(jù),單位是厘米钠绍。第5列是觀測結(jié)果,也就是花的種類花沉。所有觀測到的花都屬于3種鳶尾花中的一種柳爽。
可以在維基上找到更多的信息:learn more about this dataset on Wikipedia
下一步我們將從CSV文件的URL中加載鳶尾花數(shù)據(jù)。
2.1 Import庫
首先import所有在本教程中將要用到的程序模塊主穗,函數(shù)和對象泻拦。
# Loadlibraries
import pandas
from pandas.tools.plottingimport scatter_matrix
import matplotlib.pyplotas plt
from sklearn import model_selection
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix
from sklearn.metrics import accuracy_score
from sklearn.linear_modelimport LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.neighborsimport KNeighborsClassifier
from sklearn.discriminant_analysisimport LinearDiscriminantAnalysis
from sklearn.naive_bayesimport GaussianNB
from sklearn.svm import SVC
每個程序都應(yīng)該正常import。如果出錯忽媒,你需要重新安裝python+Scipy環(huán)境争拐。
(看一下上面關(guān)于環(huán)境安裝方面的一些建議)
2.2 加載數(shù)據(jù)
我們可以直接從UCI機器學(xué)習(xí)資源庫(repository)加載數(shù)據(jù)。
我們用pandas來加載數(shù)據(jù)。我們之后也會用pandas來探究描述數(shù)據(jù)的各種統(tǒng)計值架曹,以及進行數(shù)據(jù)可視化隘冲。
注意我們加載數(shù)據(jù)的時候給定了每列的名稱。這一點有助于我們之后探究發(fā)掘數(shù)據(jù)的特點绑雄。
# Loaddataset
url ="https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"
names =['sepal-length', 'sepal-width','petal-length', 'petal-width','class']
dataset =pandas.read_csv(url, names=names)
數(shù)據(jù)集應(yīng)該毫無意外的被加載展辞。
如果你的網(wǎng)絡(luò)有問題,你可以先下載鳶尾花數(shù)據(jù)集万牺,然后把它放在工作路徑中罗珍。加載方法跟上面的一樣,只不過需要把URL換成本地文件名脚粟。
3. 數(shù)據(jù)集總結(jié)
現(xiàn)在是時候看一下我們的數(shù)據(jù)集了覆旱。
當(dāng)前步驟中我們從不同的角度觀察數(shù)據(jù)。
?1.數(shù)據(jù)維度
?2.窺視數(shù)據(jù)本身
?3.所有屬性的統(tǒng)計概要
?4.按分類變量細分?jǐn)?shù)據(jù)
上邊的幾種方法貌似深奧核无,其實不必擔(dān)心扣唱,每次觀察數(shù)據(jù)只需要一個命令。在未來的項目中這些命令可能會被再三的使用团南。
3.1數(shù)據(jù)維度
我們通過查看數(shù)據(jù)集的模型特征噪沙,就能迅速知道數(shù)據(jù)集中包含了多少數(shù)據(jù)實例(也就是行)和多少屬性(也就是列)。
# shape
print(dataset.shape)
看到有150個實例吐根,5個屬性:
(150, 5)
3.2 管窺數(shù)據(jù)
實際地仔細觀察數(shù)據(jù)向來都是好辦法正歼。
# head
print(dataset.head(20))
可以看到數(shù)據(jù)的先頭20行:
sepal-length sepal-width petal-length petal-width class
0 5.1 3.5 1.4 0.2 Iris-setosa
1 4.9 3.0 1.4 0.2 Iris-setosa
2 4.7 3.2 1.3 0.2 Iris-setosa
3 4.6 3.1 1.5 0.2 Iris-setosa
4 5.0 3.6 1.4 0.2 Iris-setosa
5 5.4 3.9 1.7 0.4 Iris-setosa
6 4.6 3.4 1.4 0.3 Iris-setosa
7 5.0 3.4 1.5 0.2 Iris-setosa
8 4.4 2.9 1.4 0.2 Iris-setosa
9 4.9 3.1 1.5 0.1 Iris-setosa
10 5.4 3.7 1.5 0.2 Iris-setosa
11 4.8 3.4 1.6 0.2 Iris-setosa
12 4.8 3.0 1.4 0.1 Iris-setosa
13 4.3 3.0 1.1 0.1 Iris-setosa
14 5.8 4.0 1.2 0.2 Iris-setosa
15 5.7 4.4 1.5 0.4 Iris-setosa
16 5.4 3.9 1.3 0.4 Iris-setosa
17 5.1 3.5 1.4 0.3 Iris-setosa
18 5.7 3.8 1.7 0.3 Iris-setosa
19 5.1 3.8 1.5 0.3 Iris-setosa
3.3 所有屬性的統(tǒng)計概要
現(xiàn)在我們可以看一下每個屬性的統(tǒng)計概要。
這里包括總數(shù)佑惠,均值朋腋,最小值,最大值以及一些百分比膜楷。
# descriptions
print(dataset.describe())
我們能看到所有的數(shù)值量都有相同的尺度(厘米)旭咽,相似的區(qū)間,也就是0~8厘米之間赌厅。
sepal-length sepal-width petal-length petal-width
count 150.000000 150.000000 150.000000 150.000000
mean 5.843333 3.054000 3.758667 1.198667
std 0.828066 0.433594 1.764420 0.763161
min 4.300000 2.000000 1.000000 0.100000
25% 5.100000 2.800000 1.600000 0.300000
50% 5.800000 3.000000 4.350000 1.300000
75% 6.400000 3.300000 5.100000 1.800000
max 7.900000 4.400000 6.900000 2.500000
3.4 類別分布
讓我們觀察一下屬于每一類的實例(行)的個數(shù)穷绵。我們把這個個數(shù)看成一個絕對數(shù)。
# classdistribution
print(dataset.groupby('class').size())
我們能看到每個種類包含相同數(shù)目的實例(50個特愿,或者說每個占總數(shù)的33%)
class
Iris-setosa 50
Iris-versicolor 50
Iris-virginica 50
4. 數(shù)據(jù)可視化
現(xiàn)在我們對數(shù)據(jù)有了一個基本認識仲墨。我們需要在此基礎(chǔ)上用可視化的方法,進一步加深我們的認識揍障。
我們將介紹兩種繪圖方法:
1.單變量繪圖目养,用來更好的理解每個屬性。
2.多變量繪圖毒嫡,用來更好的理解屬性之間的關(guān)系癌蚁。
4.1 單變量繪圖
我們先了解一下單變量的繪圖,也就是用每個單獨變量來繪圖。
如果輸入變量是數(shù)值型的努释,我們可以繪制每一個輸入變量的箱線圖(box and whisker plots)碘梢。
# boxand whisker plots
dataset.plot(kind='box',subplots=True,layout=(2,2), sharex=False, sharey=False)
plt.show()
這能讓我們更清晰的了解輸入屬性的分布情況。
我們也可以為每個輸入變量創(chuàng)建柱狀圖來了解它的分布伐蒂。
#histograms
dataset.hist()
plt.show()
看起來輸入變量中有兩個可能符合高斯分布煞躬。這個現(xiàn)象值得注意,我們可以使用基于這個假設(shè)的算法逸邦。
4.2 多變量繪圖
現(xiàn)在我們看一下變量之間的相互關(guān)系恩沛。
首先,我們看一下所有屬性兩兩一組互相對比的散點圖昭雌。這種圖有助于我們定位輸入變量間的結(jié)構(gòu)性關(guān)系复唤。
#scatter plot matrix
scatter_matrix(dataset)
plt.show()
注意下圖中某些屬性兩兩比對時延對角線出現(xiàn)的分組現(xiàn)象健田。這其實表明高度的相關(guān)性和可預(yù)測關(guān)系烛卧。
5. 算法評估
現(xiàn)在是時候為數(shù)據(jù)建模,然后評估這些模型在未見數(shù)據(jù)的準(zhǔn)確率了妓局。未見數(shù)據(jù)指模型從來沒有見過的數(shù)據(jù)(譯者注:將來的數(shù)據(jù),例如不在訓(xùn)練數(shù)據(jù)总放,也不在測試數(shù)據(jù)中的數(shù)據(jù))。
這個步驟里邊我們介紹的內(nèi)容如下:
?1.分割驗證數(shù)據(jù)集
?2.設(shè)置測試工具好爬,使用十折交叉驗證(10-fold cross validation)局雄。
?3.建立6(5)個不同模型,用花的各種尺寸來預(yù)測花的種類存炮。
?4.選擇最好的模型炬搭。
5.1 創(chuàng)建驗證數(shù)據(jù)集
我們需要知道我們創(chuàng)建的模型好還是不好,好在哪里穆桂。
之后我們會通過統(tǒng)計學(xué)方法來估計我們的模型在未見數(shù)據(jù)上的準(zhǔn)確率宫盔。我們也想,通過衡量最佳模型在實際未見數(shù)據(jù)上的準(zhǔn)確率享完,得到最佳模型在未見數(shù)據(jù)上的更加具體的準(zhǔn)確率估計灼芭。
這樣的話,我們需要預(yù)先保留一些數(shù)據(jù)般又,這些數(shù)據(jù)對算法是不可見的彼绷。我們會用這些保留數(shù)據(jù)來幫助我們了解最佳模型在實際做預(yù)測時有多精準(zhǔn)。
我們把加載的數(shù)據(jù)集分成兩部分茴迁,其中的80%分為一部分寄悯,我們用它來訓(xùn)練我們的模型。其中的20%我們保留堕义,作為驗證數(shù)據(jù)集猜旬。
#Split-out validation dataset
array =dataset.values
X =array[:,0:4]
Y =array[:,4]
validation_size = 0.20
seed =7
X_train, X_validation, Y_train,Y_validation = model_selection.train_test_split(X, Y, test_size=validation_size, random_state=seed)
現(xiàn)在有了訓(xùn)練數(shù)據(jù)集:X_train,Y_train
也有了之后要用的驗證數(shù)據(jù)集:X_validation,Y_validation
5.2 測試工具集
我們用十折交叉驗證來估計準(zhǔn)確率昔馋。
我們的具體做法是將數(shù)據(jù)集分成10份筹吐,9份用于訓(xùn)練,1份用于測試秘遏。交叉驗證過程涵蓋訓(xùn)練部分測試部分分割的所有組合(也就是每一份都要做一次測試集)丘薛。
# Testoptions and evaluation metric
seed =7
scoring= 'accuracy'
我們用了標(biāo)準(zhǔn)“準(zhǔn)確率”來衡量我們的模型。準(zhǔn)確率=預(yù)測正確實例數(shù)/數(shù)據(jù)集中實例總數(shù)100(例如95%的準(zhǔn)確率)邦危。當(dāng)我們運行和評估每個模型時洋侨,我們會用到上述代碼中的scoring變量。
5.3 建立模型
我們不知道對于我們的問題來說哪種算法比較好倦蚪,或者要用哪種配置希坚。我們從繪圖中感覺有些分類在某些維度上線性可分(看我說得多么不確定),我們期待我們的觀察具有普遍性陵且。
下面我們評估6種不同算法:
?邏輯回歸(LR)
?線性判別分析(LDA)
?K近鄰法(KNN)
?分類回歸樹(CART)
?高斯樸素貝葉斯分類器(NB)
?支持向量機(SVM)
上面混合了簡單線性算法(LR和LDA)裁僧,和非線性算法(KNN,CART慕购,NB和SVM)聊疲。我們每次運行之前重設(shè)隨機數(shù)種子,保證每個算法的評估是針對相同數(shù)據(jù)分割來進行沪悲。從而確保結(jié)果可以直接比較获洲。
讓我們先建立上述6種模型,然后評估:
# SpotCheck Algorithms
models =[]
models.append(('LR', LogisticRegression()))
models.append(('LDA', LinearDiscriminantAnalysis()))
models.append(('KNN', KNeighborsClassifier()))
models.append(('CART', DecisionTreeClassifier()))
models.append(('NB', GaussianNB()))
models.append(('SVM', SVC()))
#evaluate each model in turn
results =[]
names =[]
for name, model inmodels:
kfold= model_selection.KFold(n_splits=10, random_state=seed)
cv_results= model_selection.cross_val_score(model,X_train, Y_train, cv=kfold, scoring=scoring)
results.append(cv_results)
names.append(name)
msg= "%s: %f (%f)" % (name, cv_results.mean(),cv_results.std())
print(msg)
5.4 選擇最佳模型
我們現(xiàn)在有了6個模型和每個模型的準(zhǔn)確率評估殿如。我們需要對這些模型相互之間進行比較贡珊,選擇一個最精確的模型。
運行上述的示例代碼涉馁,我們得到下面的原始結(jié)果:
LR: 0.966667(0.040825)
LDA: 0.975000(0.038188)
KNN: 0.983333(0.033333)
CART: 0.975000(0.038188)
NB: 0.975000(0.053359)
SVM: 0.981667 (0.025000)
我們可以看到看起來KNN估計準(zhǔn)確率的分值最高门岔。
我們也能繪出模型評估結(jié)果的圖形,可以比較每種模型的對于分類數(shù)據(jù)的覆蓋率和平均準(zhǔn)確度谨胞。每個算法準(zhǔn)確度度量的結(jié)果都有多個固歪,因為我們每種算法都評估了10次(十折交叉驗證)。
#Compare Algorithms
fig =plt.figure()
fig.suptitle('Algorithm Comparison')
ax =fig.add_subplot(111)
plt.boxplot(results)
ax.set_xticklabels(names)
plt.show()
下圖中可以看到箱線圖都被擠壓在范圍的頂部胯努,很多樣本達到100%的準(zhǔn)確率牢裳。
6. 預(yù)測
經(jīng)過測試,KNN準(zhǔn)確率最好∫杜妫現(xiàn)在我們要看一下模型在我們的驗證集上的精度蒲讯。驗證集上的準(zhǔn)確率是獨立檢測最佳模型的準(zhǔn)確率的最終手段。保留一個驗證集的價值在于防止你在訓(xùn)練的時候掉到坑里灰署,比如訓(xùn)練集上出現(xiàn)過擬合或者數(shù)據(jù)遺漏判帮。兩者都會造成過度樂觀的結(jié)果局嘁。
我們在驗證集上直接運行KNN模型,匯總結(jié)果作為最終準(zhǔn)確率的評分晦墙,得到一個混淆矩陣和分類報告悦昵。
# Makepredictions on validation dataset
knn =KNeighborsClassifier()
knn.fit(X_train,Y_train)
predictions = knn.predict(X_validation)
print(accuracy_score(Y_validation, predictions))
print(confusion_matrix(Y_validation, predictions))
print(classification_report(Y_validation, predictions))
我們可以看到準(zhǔn)確率是0.9或者90%∩纬混淆矩陣顯示有3個預(yù)測錯誤但指。最終,分類報告按精度抗楔,召回率棋凳,F(xiàn)1分值(f1-score),支撐集件數(shù)(support)等指標(biāo)給出了每種分類的明細(前提是驗證集比較辛铩)剩岳。
0.9
[[ 7 0 0]
[ 0 11 1]
[ 0 2 9]]
?????precision recall f1-score support
Iris-setosa 1.00 1.00 1.00 7
Iris-versicolor 0.85 0.92 0.88 12
Iris-virginica 0.90 0.82 0.86 11
avg / total 0.90 0.90 0.90 30
你也可以用Python進行機器學(xué)習(xí)
上述的教程會花費你5~10分鐘,最多入热。
你不需要理解上面提到的每個細節(jié)(最少現(xiàn)在不需要)拍棕。你的目標(biāo)應(yīng)該是通過教程,從頭到尾完完整整的執(zhí)行一遍才顿,得到一個結(jié)果莫湘。不需要第一遍就理解全部細微部分。你可以記錄你的疑問郑气。多多使用python的幫助文檔的語法:help(“函數(shù)名”)來學(xué)習(xí)你正在使用的所有函數(shù)。
在這里你不需要知道算法是怎樣一個內(nèi)部機制腰池。重要的是了解機器學(xué)習(xí)算法的限制和怎么樣配置一個機器學(xué)習(xí)算法尾组。關(guān)于算法的學(xué)習(xí)請在之后進行。你可能需要通過很長的時間慢慢積累你對算法的認知示弓。今天讳侨,只要開始熟悉這樣一個開發(fā)平臺就好。
你不需要是一個python程序員奏属。即使你是第一次接觸python跨跨,也應(yīng)該可以輕松看懂Python代碼,因為Python語言的語法符合語言直覺囱皿。跟其他語言一樣勇婴,關(guān)注函數(shù)調(diào)用(如function())和賦值(如a=”b”)。這樣你就可以理解大部分了嘱腥。如果你是一個軟件開發(fā)人員耕渴,你肯定知道怎么樣快速掌握一個語言的基本語法。先開始齿兔,之后再追究細節(jié)橱脸。
你不需要是一個機器學(xué)習(xí)專家础米。你可以隨后再學(xué)習(xí)掌握各種算法的優(yōu)劣和限制,有很多的網(wǎng)絡(luò)內(nèi)容可供閱讀添诉,來逐漸理解機器學(xué)習(xí)項目各個步驟以及交叉驗證來評估準(zhǔn)確率的重要性屁桑。
機器學(xué)習(xí)項目中的其他步驟有什么呢?我們并沒有涵蓋所有機器學(xué)習(xí)項目的步驟栏赴,因為這是我們的第一個項目掏颊,我們需要將注意力放到關(guān)鍵步驟上面,也就是加載數(shù)據(jù)艾帐,查看數(shù)據(jù)乌叶,評估算法和預(yù)測。后續(xù)的教程中我們再來看看其他的數(shù)據(jù)準(zhǔn)備和結(jié)果改進之類的任務(wù)柒爸。
總結(jié)
在本文中介紹了怎樣在python中一步一步完成一個完整的機器學(xué)習(xí)項目准浴。從頭到尾完成一個小項目,包括加載數(shù)據(jù)到進行預(yù)測捎稚,是熟悉新平臺最好的方式乐横。
下一步要做的:
你動手完成上述教程了嗎?
1.完成上述教程
2.列出你的所有問題
3.再次再三搜索答案
4.請記住今野,Python里可以用help(“function”)來查看每個函數(shù)的幫助信息
原文鏈接:
http://machinelearningmastery.com/machine-learning-in-python-step-by-step/
作者:
Jason Brownlee
【PanoTech】識別上圖二維碼關(guān)注我們