久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

10分鐘掌握Python-機器學習小項目

 易定天下 2020-11-16

學習機器學習相關(guān)技術(shù)的最好方式就是先自己設(shè)計和完成一些小項目。

Python 是一種非常流行和強大的解釋性編程語言,。不像 R 語言,,Python 是個很完整的語言和平臺,你既可以用來做研發(fā),,也可以用來開發(fā)產(chǎn)品體系,。

而且,Python 還有很多模塊和程序庫供我們選擇,,從而針對一個任務能有很多個解決方案,。怎么樣,聽起來還是很厲害的吧,?

如果用 Python 執(zhí)行機器學習,,剛開始時最好方式就是先完成一個小項目,為什么這么說呢,?

因為這會讓你先懂得如何安裝和啟動 Python 解釋器(這是最起碼的要求吧),。
因為這會讓你從總體上知道怎樣一步步完成一個項目。
因為這會增加你的信心,,或許能讓你開始創(chuàng)建自己的小項目,。

新手很需要一個完整的小項目練手

教材書還有課程這些東西還是比較煩人的,雖然給你講解的很細,,講的也很多,,但都太零碎,,你單靠這些很難領(lǐng)會這些知識點如何綜合運用到一起。

將機器學習運用到自己的數(shù)據(jù)集上時,,就算是開始一個項目了,。

一個機器學習項目可能并不是直線式的,但是很多步驟都是耳熟能詳:

定義問題,。
準備數(shù)據(jù),。
評估算法。
優(yōu)化結(jié)果,。
呈現(xiàn)結(jié)果。

真正掌握一個新平臺新工具的最好方法,,就是用它一步步完成一個完整的機器學習項目,,并涉及所有的重要步驟,也就是從導入數(shù)據(jù),,總結(jié)數(shù)據(jù),,評估算法到做出預測等。

這么一套流程操作下來,,你大概就能明白其中的套路了,。

機器學習的 Hello World

先開始拿來練手的一個最好的小項目就是分類鳶尾花(數(shù)據(jù)集鏈接),這項目很適合新手,,因為非常簡單易懂,。

因為屬性都是數(shù)值,所以你要知道這么去導入和處理數(shù)據(jù),。

該項目是個分類問題,,能讓你練習操作一種相對簡單的監(jiān)督式學習算法。

同時它也是個多類分類問題,,因此可能需要一些特殊的處理方法,。

它只有 4 個屬性和 150 個示例,意味著數(shù)據(jù)集很小,,不會占太多內(nèi)存,。

所有數(shù)值屬性都有相同的單位和大小,在使用前無需進行特別的縮放和轉(zhuǎn)換,。

下面我們就開始學習如何用 Python 執(zhí)行機器學習中的 Hello World,。

用 Python 進行機器學習:手把手教程

在這部分,我們會完成一個完整的機器學習小項目,,下面是主要步驟:

安裝 Python 和 SciPy 平臺,。
導入數(shù)據(jù)集。
總結(jié)數(shù)據(jù)集,。
可視化數(shù)據(jù)集,。
評估算法,。
做出預測。

可以自己試著敲命令行代碼,,要想加快速度,,也可以復制粘貼我的代碼。

1.下載,、安裝和啟動 Python SciPy

如果你電腦上沒安裝,,先安裝 Python 和 SciPy 平臺。

這部分不再細說,,因為網(wǎng)上有很多教程,。

1.1 安裝 SciPy 程序庫

本文所用 Python 版本為 2.7 或 3.5 。

scipy
numpy
matplotlib
pandas
Sklearn

安裝上面這些程序庫有很多種方法,,建議選擇選擇一種方法,,然后安裝這些程序庫都用這種方法。

SciPy 安裝頁面上提供了在多種系統(tǒng)安裝上文程序庫的詳細方法:

在 Mac OS 上,,你可以用 macports 安裝 Python2.7 和這些程序庫,,更多信息點擊這里
在 Linux 上,可以用你的軟件包管理器,,就跟在 Fedora 上安裝 RPM 一樣,。
如果你是 Windows 系統(tǒng),建議安裝免費版的 Anaconda,。

注意:上面這些方法的基礎(chǔ)是你的電腦上已經(jīng)安裝了 0.18 或更高版本的 scikit-learn,。

1.2啟動 Python,檢查程序版本

這一步很重要,,一定要確保你成功安裝了 Python 環(huán)境,,可以正常運行。

下面的腳本可以幫你測試你的 Python 環(huán)境,,它會導入本教程所需的每個程序庫,,并導出相應版本。

打開命令行,,啟動 Python 解釋器:

Python

我建議你直接在解釋器上工作,,或者寫出腳本后在命令行上運行,不用在很大的編輯器和 IDE上跑腳本,。我們要關(guān)注的重點是機器學習,,而不是軟件工具。

輸入或復制粘貼以下腳本:

# Check the 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__))

如果在 OS X 工作站上運行,,會得到如下輸出:

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 一般不會快速變化,,所以如果你的版本有點低的話,,也不用擔心,本教程仍然適用你后面的學習,。

如果你在這里出現(xiàn)了錯誤,,先暫停一下,修正錯誤,。

如果你沒法流暢的運行上述腳本,,那你后面就沒法完整地完成這篇教程。

建議針對你出現(xiàn)的錯誤上網(wǎng)搜一下,,或者問問有經(jīng)驗的人,,比如上集智社區(qū)。

2.導入數(shù)據(jù)

我們要用的是鳶尾花數(shù)據(jù)集,,這數(shù)據(jù)集很有名,,幾乎入門學習機器學習的人最先用的數(shù)據(jù)集就是它了,可以說是機器學習數(shù)據(jù)集中的 Hello Word,。

它包含了 150 個鳶尾花觀察值,花的測量值以厘米為單位分為 4 列,。第 5 列是觀察到的花朵的種類,。所有觀察花朵都屬于三個種類。

在這一步,,我們會從 CSV 文件 URL 中導入鳶尾花數(shù)據(jù),。

2.1 導入程序庫

首先,我們導入本教程用到的所有模塊,、函數(shù)和對象,。

# Load libraries
import pandas
from pandas.plotting import scatter_matrix
import matplotlib.pyplot as 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_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.naive_bayes import GaussianNB
from sklearn.svm import SVC

所有信息導入時必須準確無誤。如果出現(xiàn)錯誤,,馬上停止,。在繼續(xù)操作前,一定確保得到正確的 SciPy 環(huán)境,。

2.2 導入數(shù)據(jù)集

我們可以從 UCI 機器學習庫中直接導入數(shù)據(jù),,使用工具為 Pandas。我們下面還會接著用它來進行數(shù)據(jù)統(tǒng)計和可視化工作,。

注意,,我們在導入數(shù)據(jù)時會指明每一列的名字,這有助于后面我們處理數(shù)據(jù),。

# Load dataset
url = "https://archive.ics./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ù)集時也應沒有任何差錯,。

如果你出現(xiàn)了網(wǎng)絡(luò)問題,可以將iris.data 文件下載至你的工作目錄,,然后將 URL 改為本地文件名,,用同樣的方法導入它,。

3.總結(jié)數(shù)據(jù)集

現(xiàn)在我們可以看一看數(shù)據(jù)了。

在這一步,,我們以多個方式分析一下數(shù)據(jù):

數(shù)據(jù)集的維度,。
詳細查看數(shù)據(jù)本身。
所有屬性的統(tǒng)計摘要,。
數(shù)據(jù)根據(jù)類別變量的分類狀況,。

別擔心,每種方式只有一行命令行,。這些命令行不是一次性的,,將來項目里可以重復使用,絕不浪費,。

3.1 數(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ù)量,、平均值、最大值,、最小值,,還有一些百分位數(shù)值。

# descriptions
print(dataset.describe())

我們可以看到所有的數(shù)字值都有相同的單位(厘米),,大小也都在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 類別分布

我們現(xiàn)在看一看屬于每個類別下的行的數(shù)量,可以將其看作一個絕對計數(shù),。

class
Iris-setosa       50
Iris-versicolor   50
Iris-virginica    50

4.數(shù)據(jù)可視化

我們現(xiàn)在對數(shù)據(jù)已經(jīng)有了一個基本的了解,,現(xiàn)在需要用一些可視化形式再擴展一下對數(shù)據(jù)的認識。

主要是看兩種可視化圖:

單變量圖形,,從而更好的理解每個屬性,。
多變量圖形,從而更好的理解各個屬性之間的關(guān)系,。

4.1 單變量圖形

我們先以一些單變量圖形開始,,也就是每個單獨變量的圖形。

考慮到輸入變量都是數(shù)字,,我們可以為每個輸入變量創(chuàng)建箱線圖,。

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

這能讓我們更清晰的看到輸入屬性的分布狀況:

我們也可以為每個輸入變量創(chuàng)建一個直方圖以了解它們的分布狀況。

# histograms
dataset.hist()
plt.show()

似乎其中兩個輸入變量呈高斯分布,,這點是有點用的,,因為我們后面可以用算法充分利用這個假設(shè)。

4.2 多變量圖形

現(xiàn)在我們可以看看變量之間的相互作用。

首先,,我們看看全部屬性對的散點圖,,這有助于我們看出輸入變量之間的結(jié)構(gòu)化關(guān)系。

# scatter plot matrix
scatter_matrix(dataset)
plt.show()

注意一些屬性對呈對角線分布,,這顯示了它們之間有高度關(guān)聯(lián)性以及可預測的關(guān)系,。

5.評估算法

現(xiàn)在我們?yōu)閿?shù)據(jù)搭建一些模型,并測試它們對不可見數(shù)據(jù)的準確度,。

這一部分的主要步驟為:

將數(shù)據(jù)集分離出一個驗證集,。
設(shè)定測試工具,使用10折交叉驗證,。
搭建6個不同的模型根據(jù)花朵測量值預測出鳶尾花種類,。
選出最佳模型。

5.1 創(chuàng)建驗證集

我們需要知道搭建的模型效果怎樣,。后面我們會用統(tǒng)計方法來驗證模型對新數(shù)據(jù)的準確度,。我們還希望通過評估模型在真正不可見數(shù)據(jù)時的表現(xiàn),來進一步確定模型的準確度,。

也就是我們會留一些數(shù)據(jù)不讓算法看到,,然后用這些數(shù)據(jù)來確定模型到底有多準確。

我們會將導入的數(shù)據(jù)集拆分為兩部分,,80% 用于訓練模型,,20% 用于驗證模型。

# 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)

得到的 X_train 和 Y_train 里的訓練數(shù)據(jù)用于準備模型,,得到的 X_validation 和 Y_validation 集我們后面會用到。

5.2 測試工具

我們會用十折交叉驗證法測試模型的準確度,。

這會將我們的數(shù)據(jù)集分成 10 部分,,輪流將其中 9 份作為訓練數(shù)據(jù),1份作為測試數(shù)據(jù),,進行試驗,。

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

現(xiàn)在我們用“準確率”這個維度去評估模型,也就是能正確預測出鳶尾花類別的比例,。我們后面運行和評估模型時會使用分數(shù)變量,。

5.3 搭建模型

針對這個問題,我們并不知道哪個算法最好,,應當用哪些配置,。我們從可視化圖表中能夠得知在有些維度上一些類別的部分是線性可分的,因此我們預期總體效果會不錯,。

我們看看這 6 種算法:

邏輯回歸(LR)
線性判別分析(LDA)
K最近鄰算法(KNN)
分類和回歸樹(CART)
高斯樸素貝葉斯(NB)
支持向量機(SVM)

這里面既有簡單的線性算法(LA和LDA),,也有非線性算法(KNN,CART,NB和SVM),。我們每次運行算法前都要重新設(shè)置隨機數(shù)量的種子,,以確保是在用相同的數(shù)據(jù)拆分來評估每個算法。這樣能保證最終結(jié)果可以直接進行比較,。

我們來搭建和評估模型:

# Spot Check 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 in models:
    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 個模型以及每種模型的準確度評估狀況,。接下來需要將模型相互比較,選出最準確的那個,。

運行上面的例子,,會得到如下初步結(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 的估計準確率分值最高。

我們也可以將模型評估結(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% 的準確率。

6.做出預測

經(jīng)過驗證,,KNN 算法的準確率最高?,F(xiàn)在我們看看該模型在驗證集上的準確度。

我們最后來驗證一下最好的模型的準確率有多高,。拆分并保留一個驗證集很值得,,以防你在訓練期間出現(xiàn)錯誤,比如對訓練集過擬合或者數(shù)據(jù)泄露之類,,這兩種錯誤都會造成最終結(jié)果過于樂觀,。

我們可以直接在驗證集上運行 KNN 算法,將結(jié)果總結(jié)為一個最終準確率分值,,一個混淆矩陣和一個分類報告,。

# Make predictions 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))

我們可以看到模型的準確率為 0.9,即 90%,?;煜仃囷@示了所犯的三個錯誤。最終,,分類報告顯示了每個類別的精確率,、召回率、F1 值等,。

[[ 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 做機器學習任務

把上面的這篇教程過一遍,,最多花你5-10分鐘!

你不需要什么都懂。 你的目標就是完整的跟著操作一遍這個教程,然后得到結(jié)果,。剛開始你不必什么都懂,??梢砸贿呑鲆贿吜谐鰡栴},,多用用 help(FunctionName) 幫你理解 Python 中的語法,,學習你正在用的函數(shù),。

你不需要明白算法的原理 ,。當然,,知道機器學習算法的局限性和配置方式很重要,但對算法原理的學習可以放在后頭,。你應該循序漸進的了解算法的原理,,在當前階段主要任務就是熟悉平臺。

你也不必是個Python程序員,。 如果你是個 Python 初學者,,Python 的語法會很陌生。和其它語言一樣,,重點關(guān)注函數(shù)調(diào)用和賦值,,后面再詳細深挖語法知識。

你也不用是個機器學習專家,。 你可以在后面學習每種算法的好處和局限性,,而且這方面有很多資料,比如關(guān)于機器學習項目的操作步驟,,以及用驗證集評估模型的重要性等,。

機器學習項目的其它步驟。 本文并沒有涉及機器學習項目的全部步驟,,因為這畢竟是我們的第一個項目,,關(guān)注重要步驟就行了,也就是:導入數(shù)據(jù),、查看數(shù)據(jù),、評估算法、做出預測.

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導購買等信息,謹防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多