注:這是一篇翻譯文章,來自于
Your First Machine Learning Project in Python Step-By-Step - Machine Learning Mastery**运沦,標題為《Your First Machine Learning Project in PythonStep-By-Step》泵额;即一步步帶你入門第一個python機器學習項目;包括的內(nèi)容有:1携添、python的機器學習需要哪些準備?2篓叶、導入數(shù)據(jù)3烈掠、數(shù)據(jù)的統(tǒng)計描述4、數(shù)據(jù)的可視化5缸托、用一些算法進行估計6左敌、進行一些預測。
就像作者在文后說的俐镐,通過用python做這個項目矫限,不需要知道關(guān)于機器學習的專業(yè)性內(nèi)容,只需要按照python代碼把結(jié)果做出來佩抹,能夠分析就行叼风。
但是丧失,我認為以機器學習之博大精深假夺,這個項目只是管中窺豹,之所以把這篇文章拿出來赂弓,我認為它幫我們初步感受到了python機器學習的一整套基本流程枢里,以及對機器學習的基本印象孽鸡。
(一)事前的準備(本教程假定Python版本為2.7或3.5。)
在做機器學習之前栏豺,要安裝5個庫:scipy彬碱、numpy、matplotlib奥洼、pandas巷疼、sklearn
這5個庫主要是用來進行數(shù)值運算、計算溉卓、繪圖皮迟、數(shù)據(jù)分析以及數(shù)據(jù)挖掘的庫,具體每個庫作用及其安裝可以去網(wǎng)上搜索就知道了桑寨,這點作者也在文中說了一下伏尼。
值得注意的是python3版本在windows系統(tǒng)下安裝scipy,需要去網(wǎng)站:
Python Extension Packages for Windows**尉尾,下載whl文件爆阶,然后再去安裝。
但是,在這之前辨图,由于Scipy的安裝需要依賴MKL庫班套,官方的Numpy不包含MKL,故從Python Extension Packages for Windows** 下載合適版本的包含MKL庫的第三方Numpy+mkl庫故河,然后在cmd下進入到Python安裝目錄下的scripts文件下使用 pipinstall 路徑+whl文件來安裝(具體可以去搜索一下)吱韭。
對于sklearn庫的安裝,如果你已經(jīng)安裝了scipy鱼的、numpy庫理盆,直接在cmd下采用升級的方式安裝,這是因為sklearn建立在NumPy凑阶,SciPy和matplotlib模塊之上:
pip install -U scikit-learn
檢查安裝的庫是否成功及其版本
# 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__))
(二)導入數(shù)據(jù)
導入庫
# Load libraries
import pandas
from pandas.tools.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 #導入最近鄰算法中的KNN最近鄰分類包
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis #判別分析算法中的線性判別分析包
from sklearn.naive_bayes import GaussianNB #樸素貝葉斯中的高斯樸素貝葉斯包
from sklearn.svm import SVC #支持向量機算法中的支持向量分類包
上述導入各種程序包主要來自于sklearn的包,具體可以參見
http://scikit-learn.org/dev/index.html
對python機器學習中sklearn各種包的介紹宙橱。
接下來再導入數(shù)據(jù).
# Load dataset
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) #讀取csv數(shù)據(jù)
注:這里是從某一網(wǎng)頁導入數(shù)據(jù)姨俩,但是如果網(wǎng)頁打不開很可能就導入不了,事實上师郑,在python的sklearn數(shù)據(jù)庫中自帶鳶尾花數(shù)據(jù)集环葵,在這里可以通過sklearn導入。
from sklearn import datasets
iris = datasets.load_iris()
(三)數(shù)據(jù)的描述性統(tǒng)計
這一步主要是對數(shù)據(jù)的結(jié)構(gòu)呕乎、變量等進行初步了解积担,包括對數(shù)據(jù)的維度(樣本量、變量個數(shù)等)進行了解猬仁、詳細考察數(shù)據(jù)本身帝璧、所有屬性的描述性統(tǒng)計、按照不同類別對數(shù)據(jù)進行細分湿刽。
首先是對數(shù)據(jù)的維度(樣本量的烁、變量個數(shù)等)進行了解。
# shape
print(dataset.shape)
輸出結(jié)果為:(150, 5)诈闺,即該數(shù)據(jù)有150個樣本值以及5個變量(屬性)渴庆。
其次是詳細考察數(shù)據(jù)本身。
# head
print(dataset.head(20))
你將會看到前20行數(shù)據(jù):
通過數(shù)據(jù)信息簡單介紹一下注明的“鳶尾花數(shù)據(jù)集”:
鳶尾花(iris)是數(shù)據(jù)挖掘常用到的一個數(shù)據(jù)集雅镊,包含150種鳶尾花的信息襟雷,每50種取自三個鳶尾花種之一(setosa,versicolour或virginica)。每個花的特征用下面的5種屬性描述萼片長度(Sepal.Length)仁烹、萼片寬度(Sepal.Width)耸弄、花瓣長度(Petal.Length)、花瓣寬度(Petal.Width)卓缰、類(Species)计呈。
第三是砰诵,數(shù)據(jù)所有屬性的描述性統(tǒng)計。
# descriptions
print(dataset.describe())
可以看到如下結(jié)果捌显,分別表示4個屬性的樣本值茁彭、均值、標準誤扶歪、最小值理肺、25%分位數(shù)、中位數(shù)击罪、75%分位數(shù)哲嘲、最大值。
第四是媳禁,不同類別的數(shù)據(jù)細分。
# class distribution
print(dataset.groupby('class').size())
可以看到画切,Iris-setosa竣稽、Iris-versicolor、Iris-virginica三大類樣本值均有50個霍弹。
(四)數(shù)據(jù)的可視化
數(shù)據(jù)可視化可以更好地了解數(shù)據(jù)毫别。在這里通過兩種圖形類型:單變量圖來更好了解每個屬性;多變量圖來更好了解每個屬性間關(guān)系典格。
4.1 單變量圖
首先是盒須圖(箱形圖)
# box and whisker plots
dataset.plot(kind='box', subplots=True, layout=(2,2), sharex=False, sharey=False)
plt.show()
在這里注意各個箱形圖的縱坐標(y軸)的刻度是不同的岛宦,有明顯的區(qū)分,因此可以看到耍缴,各變量表示的屬性是有區(qū)分的砾肺。
然后是直方圖
# histograms
dataset.hist()
plt.show()
在這里橫坐標的坐標軸是有區(qū)分的。
4.2 多變量圖(也就是圖矩陣)
散點圖矩陣防嗡,這有助于發(fā)現(xiàn)變量之間的結(jié)構(gòu)化關(guān)系变汪,在這里特別要注意觀察兩變量間(變量對)基于對角線的關(guān)系,這表明變量之間的相關(guān)性與可預測關(guān)系(散點圖代表了兩變量的相關(guān)程度蚁趁,如果呈現(xiàn)出沿著對角線分布的趨勢裙盾,說明它們的相關(guān)性較高)。
# scatter plot matrix
scatter_matrix(dataset)
plt.show()
![Upload 散點圖矩陣.jpg failed. Please try again.]
未完待續(xù)他嫡。番官。。
本文完整代碼見:https://github.com/zhangjuying20000/iris-machine-learning