小白上手機器學習|鳶尾花數據集

2021-02-14 菜鳥學Python

這是菜鳥學Python的粉絲第11篇原創投稿

閱讀本文大概需要5分鐘

本篇作者:倩倩同學

     如果你正在尋找一個數據集,打算用它來上手學習的機器學習的算法,我想鳶尾花數據集應該是一個不錯的選擇.  本篇文章的數據來自大名鼎鼎的Kaggle,綜合運用了Python的很多可視化庫, 質量非常高!下面就看一下美女倩倩同學是如何研究分析這個數據集的~~

要點:

用到的庫:

pandas,matplotlib,seaborn,sklearn

工具:

Pycharm/Spyder

Python:3.6

數據來自大名鼎鼎的Kaggle網站,裡面有很多好玩的數據集. 下面就是Iris數據:

Iris也稱鳶尾花卉數據集,是一類多重變量分析的數據集。通過花萼長度,花萼寬度,花瓣長度,花瓣寬度4個屬性預測鳶尾花卉屬於(Setosa(山鳶尾),Versicolour(雜色鳶尾),Virginica(維吉尼亞鳶尾))三個種類中的哪一類。


這個數據集,僅有150行,5列。該數據集的四個特徵屬性的取值都是數值型的,他們具有相同的量綱,不需要你做任何標準化的處理,第五列為通過前面四列所確定的鳶尾花所屬的類別名稱。

這裡需要說明的一點是,大家可能比較熟悉用matplotlib來作圖,很少用到seaborn,seaborn其實是在matplotlib的基礎上進行了更高級的API封裝

從而使得作圖更加容易,要注意的是一旦導入了seaborn,matplotlib的默認作圖風格就會被覆蓋成seaborn的格式,seaborn相比於matplotlib擁有更好的默認風格

它繪製的圖表比matplotlib繪製的好看,並且可以繪製比matplotlib默認的圖表更加深入的圖表

導入了相關的包,下面我們就可以加載數據了

>>

數據集的相關信息:

<class 'pandas.core.frame.DataFrame'>

RangeIndex: 150 entries, 0 to 149

Data columns (total 5 columns):

花萼長度    150 non-null float64

花萼寬度    150 non-null float64

花瓣長度    150 non-null float64

花瓣寬度    150 non-null float64

所屬種類    150 non-null object

dtypes: float64(4), object(1)

memory usage: 5.9+ KB

None

數據集的維度:

 (150, 5)

數據集的隨機10行數據:

      花萼長度  花萼寬度  花瓣長度  花瓣寬度             

106   4.9   2.5   4.5   1.7   Iris-virginica

128   6.4   2.8   5.6   2.1   Iris-virginica

8     4.4   2.9   1.4   0.2      Iris-setosa

43    5.0   3.5   1.6   0.6      Iris-setosa

24    4.8   3.4   1.9   0.2      Iris-setosa

139   6.9   3.1   5.4   2.1   Iris-virginica

115   6.4   3.2   5.3   2.3   Iris-virginica

129   7.2   3.0   5.8   1.6   Iris-virginica

70    5.9   3.2   4.8   1.8  Iris-versicolor

95    5.7   3.0   4.2   1.2  Iris-versicolor

數據集的特徵屬性:

              花萼長度        花萼寬度        花瓣長度        花瓣寬度

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

鳶尾花所屬種類的分布:

 所屬種類

Iris-setosa        50

Iris-versicolor    50

Iris-virginica     50

dtype: int64

這裡我們加載數據集是通過目標網址加載的,加載的數據集沒有列名,所以我們通過names給數據集加上了列名:

第一列表示的「花萼長度」

第二列表示的是「花萼的寬度」

第三列表示的是「花瓣的長度」

第四列表示的是「花瓣的寬度」

當然,你也可以直接把數據集下載到自己的電腦上,通過read_csv()讀取本地目錄中的數據集

通過觀察運行結果我們可以發現該數據集的維度的確是(150,5),前四列屬性特徵均為數值型數據,最後一列則表示的是鳶尾花所屬類別

通過觀察數據集的統計特徵,我們可以大致了解四個屬性特徵的取值情況。我們通過鳶尾花所屬類別的分布可以發現在數據集中三種鳶尾花分別佔了50行,他們的分布是很均勻的

下面我們可以通過數據的可視化加深你對數據集的了解

如果說通過單個變量的可視化圖表可以讓我們更好的了解每個屬性的大致情況,那麼通過多變量的可視化圖表則可以讓我們更好的了解屬性對之間的相互關係。

下面我們分別通過pandas自帶的plot(),hist()繪製單個變量的箱線圖和柱狀圖,並通過scatter——matrix繪製描述屬性對兩兩之間的相關性的散點圖。

>>

通過觀察運行結果我們可以對屬性的取值有一個直觀的了解,你可能已經發現在柱狀圖中有兩個屬性的分布好像服從於正態分布,

這對於我們後面利用這個假設去使用算法是很有用的,第三幅圖展示了屬性對之間的相關性,

我們知道如果散點圖上沿著一條「瘦」直線排列,則說明這兩個變量強相關,如果這些點形成一個球形,則說明不相關。

下面我們試著通過sns.pairplot(dataset,hue="所屬種類",size=3)來替換scatt.matrix(dataset),看看他們的顯示有什麼區別:

通過上面這幅圖我們會發現它比之前運用scatter_matrix()繪製圖表的更加直觀,因為我們可以通過顏色來查看鳶尾花所屬的種類.

這裡我們將對比六種不同的模型,看看它們在鳶尾花數據集上的性能表現如何,當我們不知道哪個一算法運用到該問題上比較好,也不知道如何調節參數會使得模型的性能更好時

我們可以通過可視化數據集的結果幫助我們選擇一些合適的算法,下面我們將會嘗試著運用以下六種算法,去評估它們在鳶尾花數據集上的性能表現。

邏輯回歸模型:Logistic Regressin(LR)

線性判別分析模型:Linear Discriminant Analysis(LDA)

K近鄰分析模型:K-Nearest Neighbors(KNN)

分類回歸樹模型:Classification and Regression Tree(CART)

樸素貝葉斯的高斯模型:Gaussian Naive Bayes(NB)

支持向量機分類模型:Support Vector Machines(SVM)

1).拆分數據集

這裡面我們將數據集中的80%用作訓練集,20%用作測試集,設置隨機數種子seed=7

當我們運用機器學習算法使用隨機過程時,先設置一個隨機種子是一個很好的習慣,這樣就可以運行相同的代碼多次,還能保證得到相同的結果,而且當你需要證明結果,使用隨機數據比較算法或調試代碼時,設置隨機數種子也是很有用的

2).抽查算法

>>

邏輯回歸:0.966667(0.040825)

線性判別分析:0.975000(0.038188)

K近鄰:0.983333(0.033333)

分類回歸樹:0.966667(0.040825)

樸素貝葉斯的高斯模型:0.975000(0.053359)

支持向量機:0.991667(0.025000)

這裡我們通過上面提到的六種算法構建了六種不同的分類模型,並設置了通過10折交叉驗證以準率性這一指標來評估模型性能。我們可以看到運行結果中冒號前面是指我們採用的哪種分類算法構建的模型,冒號後面的第一個數字指的是10折交叉驗證得到的準確率結果的一個平均值,而括號中的值代表的是準確性的一個標準差

3).運用模型預測未知數據

我們通過上面的運行結果可以發現鳶尾花數據集在支持向量機上的表現是最好的,下面我們將運用支持向量機這個模型來對我們的測試集進行預測,並在測試集上評估模型的性能

>>

測試集上預測的準確性:

 0.933333333333

測試集上混淆矩陣:

 [[ 7  0  0]

 [ 0 10  2]

 [ 0  0 11]]

測試集上的預測結果報告:

                  precision    recall  f1-score   support

Iris-setosa       1.00      1.00      1.00         7

Iris-versicolor   1.00      0.83      0.91        12

Iris-virginica      0.85      1.00      0.92        11

avg / total         0.94      0.93      0.93        30

結論:

通過觀察運行結果我們可以發現支持向量機模型在測試集上的準確度大約為93.3%,模型將兩個雜色鳶尾花,錯誤的判斷為了維吉尼亞鳶尾花。在這裡我們並沒有對模型進行調優,都是用的是默認參數,後期可以通過調節參數,提升模型的性能,達到更好的預測效果.

另外:需要本篇源碼,請留言

來源 | 菜鳥學Python

作者 | xinxin

本文章為菜鳥學Python獨家原創稿件,未經授權不得轉載

相關焦點

  • 通過sklearn上手你的第一個機器學習實例
    因此,想要學好機器學習一定要有非常多的項目練習作為支撐,從實踐中探尋機器學習的技法。但一個機器學習項目的實施需要實踐者擁有豐富的機器學習理論並具有將理論知識實踐的能力,這讓很多機器學習小白望而卻步。本文將利用sklearn中自帶的數據集(鳶尾花數據集),並通過邏輯回歸算法實現對鳶尾花的分類。
  • Python數據可視化-seaborn Iris鳶尾花數據
    p=5261首先介紹一下Iris鳶尾花數據集,內容摘自百度百科:Iris數據集是常用的分類實驗數據集,由Fisher, 1936收集整理。「Iris也稱鳶尾花卉數據集,是一類多重變量分析的數據集。數據集包含150個數據集,分為3類,每類50個數據,每個數據包含4個屬性。
  • 小白python機器學習之路(一)
    什麼是機器學習?好麼,一上來就要回答終極問題?對的,就是這麼直接,理解了什麼是機器學習,才能更好的學習機器學習。(怎麼像是繞口令。。)機器學習就是利用算法,從數據中尋找一定的模式和知識,並對看似結果不可知的事件做出預測。從自然科學專業學生的角度而言,我們更關注如何從實驗中獲取數據,而機器學習更關注獲得數據之後的事情。
  • 以鳶尾花數據集為例,用Python對決策樹進行分類
    下圖是在鳶尾花數據集(花種)上訓練的分類樹。根(棕色)和決策(藍色)節點包含分成子節點的問題。根節點是最頂層的決策節點。換句話說,它是開始進行分類的節點。葉節點(綠色),也稱為終端節點,是沒有子節點的節點。葉節點是通過多數投票分配類的地方。
  • ...2深度學習環境到神經機器翻譯,上手機器學習這些開源項目必不可少
    輸入:驅動機器學習的數據輸入指的是算法和訓練模型需要的數據集,從原始碼到統計數據,數據集可以包括任何東西:GSA/data GitHub 地址:https://github.com/GSA/data來自美國總務管理局的分類數據
  • 從星際2深度學習環境到神經機器翻譯,上手機器學習這些開源項目必...
    輸入:驅動機器學習的數據輸入指的是算法和訓練模型需要的數據集,從原始碼到統計數據,數據集可以包括任何東西:GSA/data GitHub 地址:https://github.com/GSA/data來自美國總務管理局的分類數據。
  • 【機器學習基礎】(三):理解邏輯回歸及二分類、多分類代碼實踐
    該數據集,對5000名參與者進行了一項實驗,以研究年齡和身體健康對聽力損失的影響,尤其是聽高音的能力。3.2 代碼實踐 - 導入數據集導入數據集(大家不用在意這個域名):df = pd.read_csv('https://blog.caiyongji.com/assets/iris.csv')df.head()sepal_lengthsepal_widthpetal_lengthpetal_widthspecies5.13.51.40.2setosa4.931.40.2setosa4.73.21.30.2setosa4.63.11.50.2setosa53.61.40.2setosa
  • 機器學習 | 43種開源數據集(附地址/調用方法)
    學習機器學習是一個不斷探索和實驗的過程,因此,本文將主要介紹常見的開源數據集,便於讀者學習和實驗各種機器學習算法。在學習機器學習算法的過程中,我們經常需要數據來學習和試驗算法,但是找到一組適合某種機器學習類型的數據卻不那麼方便。下文對常見的開源數據集進行了匯總。
  • B站最強學習資源匯總(Python,數據科學,機器學習)
    3、【數據分析】SQL資料庫入門到精通,最乾淨易懂的小白必備教程10小時完整版https://www.bilibili.com/video/av77541375課程介紹:英文課程,中文字幕,很多同學表示這是看過最好的課程,通俗易懂。
  • 鳶尾花預測:如何創建機器學習Web應用程式?
    全文共2485字,預計學習時長12分鐘作為數據科學家或機器學習工程師,能夠部署數據科學項目非常重要,這有助於完成數據科學生命周期。通過既有框架(如Django或Flask)對傳統機器學習模型進行部署,可能是一項艱巨耗時的任務。本文就將展示如何在Python庫中使用streamlit,用不到50行的代碼構建一個簡單的基於機器學習的數據科學web應用程式。
  • CDA承接的全球頂級機器學習Scikit-learn 中文社區上線啦!
    CDA作為國內知名的全棧數據科學教育和認證品牌,一直致力於讓優質的教育人人可得。Scikit-learn作為機器學習的入門工具庫,深受初學者的喜愛。但是由於官方文檔是英文撰寫,限制了很多機器學習愛好者的學習過程。因此,專業、規範、實時的Scikit-learn中文學習社區,一直以來都是國內學習者所急需。
  • 「人工智慧核心之機器學習(2)」——python 實現 KNN
    歡迎大家關注公眾號【哈希大數據】1、KNN算法基本介紹K-Nearest Neighbor(k最鄰近分類算法),簡稱KNN,是最簡單的一種有監督的機器學習算法。也是一種懶惰學習算法,即開始訓練僅僅是保存所有樣本集的信息,直到測試樣本到達才開始進行分類決策。
  • 全網首發Julia中文視頻教程:1小時上手機器學習的明日之星
    這門語法簡潔媲美堪比Python,超快速度媲美 C,和 Lisp 一樣有元編程能力的語言,被認為很可能超越Python,在對計算性能要求越來越高的深度學習時代,成為機器學習的明日之星。集智學園特邀 Julia 中文社區核心成員羅秀哲,錄製了快速上手Julia 語言的免費課程,供你第一時間入門Julia——機器學習的明日之星、科學計算的後起新秀!
  • 一文教你用 Python 做機器學習任務 | 乾貨
    本篇分步教程主要有以下幾個步驟:下載和安裝 Python SciPy,獲得用 Python 執行機器學習的最有用的軟體包。加載一個數據集,利用統計摘要和數據可視化理解數據集的結構。搭建 6 個機器學習模型,選擇最好的一個,逐步確認模型的準確率可靠有保證。
  • 【玩轉數據系列十】利用阿里雲機器學習在深度學習框架下實現智能圖片分類
    首先,解決非結構化數據常常要使用深度學習算法,上手門檻高。其次,對於這部分數據的處理,往往需要依賴GPU計算引擎,計算資源代價大。本文將介紹一種利用深度學習實現的圖片識別案例,這種功能可以服用到圖片的檢黃、人臉識別、物體檢測等各個領域。
  • 機器學習(二)-------KNN算法的sklearn KNN實踐
    KNN代碼實例KNN算法算是機器學習裡面最簡單的算法之一了,我們來sklearn官方給出的例子,來看看KNN應該怎樣使用吧:數據集使用的是著名的鳶尾花數據集,用KNN來對它做分類。我們先看看鳶尾花長的啥樣。
  • 什麼是機器學習Sklearn​?這是我見過的做通俗易懂的解釋
    首先注意到兩個詞 computer program 和 learn,翻譯成中文就是機器 (電腦程式) 和學習,再把上面英譯中:假設用性能度量 P 來評估機器在某類任務 T 的性能,若該機器通利用經驗 E 在任務 T 中改善其性能 P,那麼可以說機器對經驗 E 進行了學習。在該定義中,除了核心詞機器和學習,還有關鍵詞經驗 E,性能度量 P 和任務 T。
  • 學好機器學習,這裡有你需要的一切
    模糊數據查詢和數據校正方法、算法、應用7.  樸素貝葉斯用於鳶尾花數據8.  GaussianNB/MultinomialNB/BernoulliNB9.  樸素貝葉斯用於18000+篇/Sogou新聞文本的分類 第七課: 回歸 1.  線性回歸2.
  • Python小白機器學習教程:Sklearn精講
    作者:王聖元閱讀文本大概需要 60 分鐘老表建議先收藏,慢慢學或者有需時可以查看本文是 Python 小白教程系列:Python小白數據可視化教程: Matplotlib 精講Python小白數據可視化教程: Seaborn 精講