使用機器學習模型快速進行圖像分類識別
Python編程應用實戰,盡在掌握
這是《Python AI極簡入門》第5篇
零、前言
在上一篇,我們介紹了使用sklearn庫快速創建一個用於預測房價的機器學習回歸模型,並通過平均絕對誤差、均方差和R3分數有效地評估了這個預測模型的效果。
在本篇,我們繼續介紹藉助sklearn庫創建用於進行分類預測的機器學習模型。
對分類問題進行預測同樣屬於監督學習的範疇,通過對已知數據的類別的標記,來實現對未知數據的類別的預測和判定。
常見的應用領域包括:垃圾郵件識別、垃圾簡訊識別、圖像分類識別等等。
常見的應用演算法則有:SVM(支持向量機)、K緊鄰、樸素貝葉斯、隨機森林等等。
下面,我們就通過Digits手寫數字集來進行機器學習分類模型的介紹。
一、初探手寫數字數據集
本篇選用的手寫數字數據集同樣來自有sklearn.datasets子模塊,其由著名的UCI 機器學習庫提供:
該數據集由1797個8x8圖像組成。每個圖像,都是手寫數字。
就像上一篇導入波士頓數據集一樣,我們從sklearn模塊中進行導入:
接著查看數據集中包含的子方法:
與波士頓數據集類似,其提供了images、target_names、target、data、DESCR等方法。其中:
images:表示圖像的原始數組;
target_names:表示圖像分類中所有的數字;
target:表示圖像數組對應的數字名稱;
data:表示圖像的一維特徵數組;
DESCR:表示數據集描述信息;
從這兩個數據集可以發現,sklearn的API還是挺統一和規範的,很方便進行學習和調用。接下來,我們看看每個方法中到底都是些什麼。
通過查看images的形狀,以及已知的圖像為8×8的形狀,我們可以得知,這個數據集中有1797個圖像。看看其中一個圖像的內容:
這就是一個圖像轉換成數組之後的形式,我們怎麼知道這是個什麼圖像呢?可以藉助於matplotlib模塊來將圖像數組還原為圖像。
可能之前搭建環境的時候沒有安裝這個模塊,我們先來安裝一下:
然後引入matplotlib模塊,調用imshow()方法:
可以發現,iamges中的第一個圖像似乎數字0。我們繼續看下面的內容。
data的target_name信息顯示,我們的數據代表的數字分類類別為0到9。
數據的目標值與數據集時匹配的,最後再看看data的data:
數據量還是1797條,但是形狀已經從二維的(8, 8)變成了一維的64,我們從一個具體的數據中看看:
可以發現,data.data中的數組將之前8*8的數組合成為了一個數組,這樣才能方便對圖像的數組運用演算法進行訓練和計算。那又如何將一維的圖像數組還原為圖像呢,通過是上面的方法,但是需要先將一維數組轉換一下形狀:
我們同樣將數據集的特徵和目標轉換為pandas的DataFrame,方便各位同學理解數據集的形狀:
二、分割訓練測試集
同樣使用sklearn提供的train_test_split方法來對數據集進行訓練集和測試集的分割:
三、創建分類模型
在此,我們同樣選擇隨機森林演算法 作為機器學習模型估計器的基本演算法來創建一個機器學習分類器並進行訓練:
四、評估模型
在訓練完成模型之後,我們同樣可以使用模型的predict()方法獲取到測試集的預測結果:
在面對回歸模型的時候,我們可以使用平均絕對誤差、均方差等方法對模型的效果進行評估,而在分類演算法模型中,我們使用其他的方法進行模型效果的評估,比如:精度分類評分、召回評分等。而這些方法,也都在sklearn模塊的metrics子模塊下。
我們來對分類模型進行效果評估:
兩種評估方法的最佳結果值都是1,看起來我們的模型準確度還是蠻高的,大家可以嘗試其他的演算法構建分類模型。
歡迎留言交流討論:)
下一篇,我們將介紹構建一個聚類預測型。
※人工智慧和機器學習帶來的巨變
※機器學習、深度學習、神經網路、深度神經網路之間有何區別?
TAG:機器學習 |