<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何使用python進行第一個機器學習項目(詳細教程篇)

機器學習算法與人工智能 ? 2018-02-10 03:10 ? 次閱讀

你是否想使用python進行機器學習但卻難以入門?

在這篇教程中,你將用Python完成你的第一個機器學習項目。

在以下的教程中,你將學到:

1.下載并安裝Python SciPy,為Python中的機器學習安裝最有用的軟件包。

2.使用統計摘要和數據可視化加載數據集并了解其結構。

3.創建6個機器學習模型,并挑選出最佳模型以確保準確性。

如果你是一個機器學習初學者,并希望開始使用Python進行你的機器學習項目,那么本教程是為你量身打造的。

話不多說,開始正題吧

如何使用Python開始機器學習?

學習機器學習的最好方式是設計和完成小型項目。

在入門Python時遇到的困難

Python是一種當下流行并且功能強大的解釋型語言。與R語言不同,Python是一個完善的語言和平臺,能用來研究和開發。

還有很多模塊和庫可以選擇,提供多種方式來完成每個任務。

開始使用Python進行機器學習的最好方法是完成一個項目。

它將促使你安裝并啟動Python解釋器。

它讓你全面的觀察如何開發一個小項目。

它會給你信心,也許還會驅動你繼續做自己的小項目。

初學者需要一個小型的端到端項目

很多書籍和課程讓人失望。他們給你很多方法和片段,但你永遠不會看到他們如何融合在一起。

當你將機器學習應用在自己的數據集時,你已經開始了一個項目。

機器學習項目可能不是線性的,但它有許多典型的步驟:

定義問題

準備數據

評估算法。

改善成績。

得到結果。

真正開始新平臺或工具的最好的方法是通過一個機器學習項目進行端到端的工作,并覆蓋關鍵步驟。也就是從加載數據、總結數據、評估算法和做出一些預測。

如果可以這樣做,你將有一個可以在數據集之后使用數據集上的模板。一旦你有更多的信心,你可以進一步的填補數據和改進結果的任務.

機器學習的Hello World

開始使用新工具的最好的小項目是鳶尾花的分類(如鳶尾花數據集 https://archive.ics.uci.edu/ml/datasets/Iris)。

這是一個很好理解的項目。

屬性是數值型的,因此你必須弄清楚如何加載和處理數據。

這是一個分類問題,讓你可以練習更簡單的監督學習算法。

這是一個多類的分類問題(多項式),可能需要一些專門的處理。

它只有4種屬性和150行,這意味著它很小,很容易適應內存(以及屏幕或A4頁面)。

所有的數值屬性都是相同的單位和相同的比例,不需要任何特殊的縮放或變換就可以開始。

讓我們開始使用Python中的hello world機器學習項目。

Python中的機器學習:分步教程

在本節中,我們將通過端到端的小型機器學習項目進行工作。

以下是我們將要介紹的內容:

安裝Python和SciPy平臺

加載數據集

匯總數據集

可視化數據集

評估一些算法

做一些預測

慢慢來,一步一步做。

你可以嘗試自己輸入命令也可以通過復制粘貼來加快速度。

1

下載,安裝和啟動Python SciPy

如果你的系統上尚未安裝,請安裝Python和SciPy平臺。

我不想太詳細地介紹這個,因為有別人已經介紹過了,這對一個開發人員來說很簡單。

1.1安裝SciPy庫

本教程假設Python版本為2.7或3.5。

你需要安裝5個關鍵庫。以下是本教程所需的Python SciPy庫列表:

SciPy

numpy

matplotlib

pandas

sklearn

有很多方法來安裝這些庫,我的建議是選擇一種方法,然后在安裝每個庫時保持一致。

該SciPy的安裝頁面(https://www.scipy.org/install.html)對多個不同的平臺提供了極好的說明書,如Linux,Mac OS X和Windows。如果你有任何疑問或疑問,請參閱本說明。

在Mac OS X上,你可以使用macports來安裝Python 2.7和這些庫。

在Linux上,你可以使用包管理器,例如Fedora上的yum來安裝RPM。

如果你使用Windows或者你沒什么信心,我建議安裝免費版本的Anaconda(https://www.anaconda.com/download/),其中包含你需要的一切。

注意:本教程假設你已經安裝scikit-learn版本0.18或更高版本。

1.2啟動Python并檢查版本

確保你的Python環境安裝成功并按預期工作,這是很有必要的。

下面的腳本將幫助你測試你的環境。它導入本教程中所需的每個庫并打印出版本。

打開命令行并啟動python解釋器:

1 python

我建議直接在解釋器中工作,或者編寫腳本并在命令行上運行它們,而不是用大型編輯器和IDE。不要很復雜的操作,把中心放在機器學習而不是工具鏈上。

鍵入或者復制粘貼以下腳本:

01 # Check the versions of libraries
02
03 # Python version
04 importsys
05 print('Python: {}'.format(sys.version))
06 # scipy
07 importscipy
08 print('scipy: {}'.format(scipy.__version__))
09 # numpy
10 importnumpy
11 print('numpy: {}'.format(numpy.__version__))
12 # matplotlib
13 importmatplotlib
14 print('matplotlib: {}'.format(matplotlib.__version__))
15 # pandas
16 importpandas
17 print('pandas: {}'.format(pandas.__version__))
18 # scikit-learn
19 importsklearn
20 print('sklearn: {}'.format(sklearn.__version__))

這是我在我的OS X工作站上得到的輸出:

1 Python:2.7.11(default, Mar12016,18:40:10)
2 [GCC4.2.1Compatible Apple LLVM7.0.2(clang-700.1.81)]
3 scipy:0.17.0
4 numpy:1.10.4
5 matplotlib:1.5.1
6 pandas:0.17.1
7 sklearn:0.18.1

將以上輸出與你的版本進行比較。

理想情況下,你的版本應該匹配或更新。這些API不會很快改變,所以如果你的版本更高,不必擔心,本教程中的所有內容很有可能仍然適用于你。

如果你出現錯誤,請停止?,F在是修復它的時候了。

如果你無法正常運行上述腳本,你將無法完成本教程。

我最好的建議是在Google上搜索你的錯誤信息。

2

加載數據

我們將使用鳶尾花數據集。這個數據集很有名,因為它被用作機器學習和統計中的“hello world”。

該數據集包含150個鳶尾花觀測值。有四列測量花的尺寸。第五列是觀察到的花的種類。所有觀察到的花屬于三種物種之一。

在此步驟中,我們將從CSV文件的URL加載鳶尾數據。

2.1導入庫

首先,我們將導入我們將在本教程中使用的所有模塊,函數和對象。

01 # Load libraries
02 importpandas
03 frompandas.tools.plottingimportscatter_matrix
04 importmatplotlib.pyplot as plt
05 fromsklearnimportmodel_selection
06 fromsklearn.metricsimportclassification_report
07 fromsklearn.metricsimportconfusion_matrix
08 fromsklearn.metricsimportaccuracy_score
09 fromsklearn.linear_modelimportLogisticRegression
10 fromsklearn.treeimportDecisionTreeClassifier
11 fromsklearn.neighborsimportKNeighborsClassifier
12 fromsklearn.discriminant_analysisimportLinearDiscriminantAnalysis
13 fromsklearn.naive_bayesimportGaussianNB
14 fromsklearn.svmimportSVC

這些加載正常情況下是沒錯的。如果出現錯誤,請停止?;氐缴厦?,你需要一個可行的SciPy環境。請參閱上面關于設置環境的建議。

2.2加載數據集

我們可以直接從UCI機器學習存儲庫加載數據。

我們正在使用pandas來加載數據。我們還將使用pandas來探索具有描述性統計數據和數據可視化的數據。

請注意,我們在裝載數據時指定了每個列的名稱。這有助于我們稍后研究數據。

1 # Load dataset
2 url="https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"
3 names=['sepal-length','sepal-width','petal-length','petal-width','class']
4 dataset=pandas.read_csv(url, names=names)

數據集應該會加載的很順利

如果你有網絡問題,可以下載iris數據(https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data)。將文件放入工作目錄,并使用相同的方法加載它,將URL更改為本地文件名。

3

匯總數據集

現在是查看數據的時候了。

在這一步中,我們將以幾種不同的方式來查看數據:

數據集的維度。

仔細觀察數據本身。

所有屬性的統計匯總。

按類變量細分數據。

記住查看數據,一個數據集就是一個命令。這些都是有用的命令,你可以在以后的項目中反復使用。

3.1數據集的尺寸

我們可以快速通過shape屬性了解數據中包含多少個實例(行)和多少個屬性(列)

1 # shape
2 print(dataset.shape)

你應該看到150個實例和5個屬性:

1 (150,5)

3.2觀察數據

仔細觀察你的數據

1 # head
2 print(dataset.head(20))

你應該會看到數據的前20行:

01 sepal-length sepal-width petal-length petal-widthclass
02 05.13.51.40.2Iris-setosa
03 14.93.01.40.2Iris-setosa
04 24.73.21.30.2Iris-setosa
05 34.63.11.50.2Iris-setosa
06 45.03.61.40.2Iris-setosa
07 55.43.91.70.4Iris-setosa
08 64.63.41.40.3Iris-setosa
09 75.03.41.50.2Iris-setosa
10 84.42.91.40.2Iris-setosa
11 94.93.11.50.1Iris-setosa
12 105.43.71.50.2Iris-setosa
13 114.83.41.60.2Iris-setosa
14 124.83.01.40.1Iris-setosa
15 134.33.01.10.1Iris-setosa
16 145.84.01.20.2Iris-setosa
17 155.74.41.50.4Iris-setosa
18 165.43.91.30.4Iris-setosa
19 175.13.51.40.3Iris-setosa
20 185.73.81.70.3Iris-setosa
21 195.13.81.50.3Iris-setosa

3.3統計匯總

現在我們可以看一下每個屬性的總結。

這包括計數,平均值,最小值和最大值以及一些百分位數。

1 # descriptions
2 print(dataset.describe())

我們可以看到,所有的數值都有相同的單位(厘米),范圍在0到8厘米之間。

1 sepal-length sepal-width petal-length petal-width
2 count150.000000150.000000150.000000150.000000
3 mean5.8433333.0540003.7586671.198667
4 std0.8280660.4335941.7644200.763161
5 min4.3000002.0000001.0000000.100000
6 25%5.1000002.8000001.6000000.300000
7 50%5.8000003.0000004.3500001.300000
8 75%6.4000003.3000005.1000001.800000
9 max7.9000004.4000006.9000002.500000

3.4分類

現在來看看屬于每個類的實例(行)的數量。我們可以將其視為絕對數。

1 # class distribution
2 print(dataset.groupby('class').size())

我們可以看到每個類具有相同數量的實例(50或者說33%的數據集)。

1 class
2 Iris-setosa50
3 Iris-versicolor50
4 Iris-virginica50

4

數據可視化

我們現在對數據有一個基本的了解。我們需要通過一些可視化來讓自己更了解它。

我們要看兩種圖:

單變量圖讓你更好地了解每個屬性。

多變量圖讓你更好地了解屬性之間的關系。

4.1單變量圖

我們從一些單變量開始,即每個變量的曲線。

鑒于輸入變量是數值型,我們可以創建每個輸入變量的盒型圖。

1 # box and whisker plots
2 dataset.plot(kind='box', subplots=True, layout=(2,2), sharex=False, sharey=False)
3 plt.show()

這使我們對輸入屬性的分布有了更清晰的認識,我們還可以創建每個輸入變量的直方圖來獲得分布的概念。

1 # histograms
2 dataset.hist()
3 plt.show()

看起來可能有兩個輸入變量具有高斯分布。這一點很有用,因為我們可以使用這種假設比較算法的準確性。

4.2多變量圖

現在我們可以看一下變量之間的相互作用。

首先,我們來看看所有屬性對的散點圖。這可以有助于發現輸入變量之間的結構化關系。

1 # scatter plot matrix
2 scatter_matrix(dataset)
3 plt.show()

注意這些接近對角線的組,這是高度的相關性和可預測關系的表現。

5

評估算法

現在創建一些數據模型,并評估它們對未來數據預測的準確性。

下面是我們將要討論的內容是:

抽離一個驗證數據集。

設置測試工具使用10倍交叉驗證。

建立5種不同的模型來預測花卉測量中的種類。

選擇最好的模型。

5.1創建驗證數據集

我們需要知道,我們創建的模型有什么用。

之后,我們將使用統計方法來估計我們在預測的數據上創建模型的準確性。我們還希望通過對實際預測數據進行評估,從而更具體地估計出最佳模型的準確性。

也就是說,我們將保留一些算法無法看到的數據,我們將利用這些數據來確定模型究竟有多精確。

我們將把加載的數據集分為兩部分,其中80%將用于訓練我們的模型,20%將被用作驗證數據集。

1 # Split-out validation dataset
2 array=dataset.values
3 X=array[:,0:4]
4 Y=array[:,4]
5 validation_size=0.20
6 seed=7
7 X_train, X_validation, Y_train, Y_validation=model_selection.train_test_split(X, Y, test_size=validation_size, random_state=seed)

你現在可以在X_train和Y_train中訓練數據為準備模型和X_validation和Y_validation集,因為我們一會兒用得上。

5.2測試工具

我們將使用10倍交叉驗證來估計精度。

這將把我們的數據集分為10個部分,在9上訓練,并在1上進行測試,并重復訓練分組的所有組合。

1 # Test options and evaluation metric
2 seed=7
3 scoring='accuracy'

我們使用“accuracy” 的度量來評估模型。這是正確預測實例的數量除以數據集中的實例總數乘以100的百分比(例如95%準確)的比率。當我們運行構建并評估每個模型時,我們將使用評分變量。

5.3建立模型

我們不知道哪些算法對這個問題或什么配置使用是好的。我們從圖中得出一些想法,即某些類在某些方面是部分可線性分離的,所以我們期望一般的結果很好。

我們來評估6種不同的算法:

邏輯回歸(LR)

線性判別分析(LDA)

鄰近算法(KNN)。

分類和回歸樹(CART)。

高斯樸素貝葉斯(NB)。

支持向量機(SVM)。

這是簡單線性(LR和LDA),非線性(KNN,CART,NB和SVM)算法的良好混合。我們在每次運行之前重置隨機數種子,以確保使用完全相同的數據分割來執行每個算法的評估。它確保結果直接可比。

我們來建立和評估我們的五個模型:

01 # Spot Check Algorithms
02 models=[]
03 models.append(('LR', LogisticRegression()))
04 models.append(('LDA', LinearDiscriminantAnalysis()))
05 models.append(('KNN', KNeighborsClassifier()))
06 models.append(('CART', DecisionTreeClassifier()))
07 models.append(('NB', GaussianNB()))
08 models.append(('SVM', SVC()))
09 # evaluate each model in turn
10 results=[]
11 names=[]
12 forname, modelinmodels:
13 kfold=model_selection.KFold(n_splits=10, random_state=seed)
14 cv_results=model_selection.cross_val_score(model, X_train, Y_train, cv=kfold, scoring=scoring)
15 results.append(cv_results)
16 names.append(name)
17 msg="%s: %f (%f)"%(name, cv_results.mean(), cv_results.std())
18 print(msg)


5.4選擇最佳模型

我們現在每個都有6個模型和精度估計。我們需要將模型相互比較,并選擇最準確的。

運行上面的例子,我們得到以下原始結果:

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具有最高的估計精度分數。

我們還可以創建模型評估結果的圖,并比較每個模型的差異和平均精度。每個算法有一個精確度量的群體,因為每個算法被評估10次(10次交叉驗證)。

1 # Compare Algorithms
2 fig=plt.figure()
3 fig.suptitle('Algorithm Comparison')
4 ax=fig.add_subplot(111)
5 plt.boxplot(results)
6 ax.set_xticklabels(names)
7 plt.show()


你可以看到盒型圖在頂部被壓扁,許多樣品達到100%的準確度。

6

做預測

KNN算法是我們測試的最精確的模型?,F在我們想了解驗證集上模型的準確性。

這讓我們對最佳模型的準確性進行獨立的最終檢查。保持一個驗證集是有用的,以防萬一你在訓練過程中犯錯,比如過擬合或數據外泄。兩者都將導致過于樂觀的結果。

我們可以直接在驗證集上運行KNN模型,并將結果總結為最終準確度分數,混淆矩陣和分類報告。

1 # Make predictions on validation dataset
2 knn=KNeighborsClassifier()
3 knn.fit(X_train, Y_train)
4 predictions=knn.predict(X_validation)
5 print(accuracy_score(Y_validation, predictions))
6 print(confusion_matrix(Y_validation, predictions))
7 print(classification_report(Y_validation, predictions))


我們可以看到準確度是0.9即90%?;煜仃囂峁┝巳齻€錯誤的指示。最后,分類報告通過精確度,召回率,f1分數和支撐顯示出優異的結果(授予驗證數據集很?。┨峁┟總€類別的細目。

view source

01 0.9
02
03 [[700]
04 [0111]
05 [029]]
06
07 precision recall f1-score support
08
09 Iris-setosa1.001.001.007
10 Iris-versicolor0.850.920.8812
11 Iris-virginica0.900.820.8611
12
13 avg/total0.900.900.9030

完成上面的教程,只需要5到10分鐘。

7

概要

在這篇文章中,你會逐步發現如何在Python中完成第一個機器學習項目。

你將發現,完成一個小型的端到端項目并將數據加載到預測中,是熟悉新平臺的最佳途徑。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 機器學習
    +關注

    關注

    66

    文章

    8179

    瀏覽量

    131123
  • python
    +關注

    關注

    53

    文章

    4700

    瀏覽量

    83647

原文標題:教程篇 | 一步步教你如何使用python進行第一個機器學習項目

文章出處:【微信號:machinelearningai,微信公眾號:機器學習算法與人工智能】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Python機器學習常用庫

    、Scikit-Learn在機器學習和數據挖掘的應用中,Scikit-Learn是功能強大的Python包,我們可以用它
    發表于 03-26 16:29

    常用python機器學習庫盤點

    現在人工智能非?;鸨?,機器學習應該算是人工智能里面的子領域,而其中有塊是對文本進行分析,對
    發表于 05-10 15:20

    使用 Python 開始機器學習

    StackOverFlow上找到關于很多問題詳細解答(學習基石)。再次,強大的社區帶來的副產品就是大量有用程序庫(Python內部自帶的
    發表于 12-11 18:37

    分享機器學習Demo,很受用

    TensorFlow入門:第一個機器學習Demo
    發表于 02-12 10:13

    機器學習入門完整的機器學習項目

    機器學習項目入門完整的機器
    發表于 05-11 14:47

    如何建立第一個C項目?

    51單片機C語言學習雜記建立您的第一個C項目
    發表于 03-02 07:33

    Python機器學習入門之pandas的使用提示

    系列文章目錄提示:這里可以添加系列文章的所有文章的目錄,目錄需要自己手動添加例如:第一Python 機器學習入門之pandas的使用提示:寫完文章后,目錄可以自動生成,如何生成可參
    發表于 08-13 07:36

    編寫第一個真正的 Linux 字符設備驅動

    前言上章我們詳細的講解了字符設備驅動開發步驟,并且用虛擬的 chrdevbase 設備為例帶領大家完成了第一個字符設備驅動的開發。本章
    發表于 12-15 07:21

    點亮人生中的第一個流水燈

    上期回顧:上篇文章我寫了單片機入門(二):點亮奇數位/偶數位LED燈**單片機入門(4):點亮人生中的第一個流水燈、需求分析做一個簡單的項目,我們也要對其
    發表于 01-19 07:59

    制作你的第一個電路來學習焊接

    描述制作你的第一個電路來學習焊接
    發表于 08-22 07:58

    Python機器學習庫和深度學習庫總結

    我們在Github上的貢獻者和提交者之中檢查了用Python語言進行機器學習的開源項目,并挑選出最受歡迎和最活躍的
    發表于 11-10 14:49 ?796次閱讀

    從零到python機器學習大神的7個步驟

    有許多python機器學習資源在線免費提供,從哪開始?如何進行?從零到python機器
    發表于 11-15 12:29 ?1.3w次閱讀

    Python編程和機器學習編程示范代碼

    機器學習離不開Python。所以,全球第一的AI教科書作者、Google Research總監Peter Novig就專門為初學者做了一個關于Pyt
    的頭像 發表于 12-21 16:49 ?5539次閱讀
    <b class='flag-5'>Python</b>編程和<b class='flag-5'>機器</b><b class='flag-5'>學習</b>編程示范代碼

    python機器學習和深度學習學習書籍資料免費下載

    本文檔的主要主要內容詳細介紹的是python機器學習和深度學習學習書籍資料免費下載。
    發表于 11-05 16:28 ?93次下載

    python機器學習筆記資料免費下載

    本文檔的主要內容詳細介紹的是python機器學習筆記資料免費python機器
    發表于 03-01 10:09 ?37次下載
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>