接下來我們就練習從Kaggle下載它所提供的手寫數字數據,利用MLP辨識完後把結果上傳回Kaggle平台,它就會馬上幫我們算出辨識準確率及在該項目的排名。
這邊直接省略註冊步驟,註冊是免費的而且可以直接使用Facebook 或是google+帳號即可,故我們直接從如何下載手寫數字數據開始。
進入Kaggle平台網頁上方選擇[Competitions],底下往下拉即可以看到目前正在進行的競賽項目。
Kaggle平台連結:https://www.kaggle.com/competitions
如下圖,它有幾種分類,Featured 及Research都是有獎金的,至於新手入門可以從Playground及Getting Started 做起。我們在這邊直接選擇最下方Digit Recognizer 進去。
選擇[data]頁面即可下載它所提供的數據,是以.csv的檔案格式呈現,在這裡train.csv為提供的訓練
資料, test.csv為測試資料,sample_submission.csv則是我們將test.csv辨識完,要上傳的結果樣本,檔名不限但格式必須是.csv檔。在辨識完成後,將該結果選擇右邊按鈕[Submit Predictios]即可上傳。
下載train.csv後用excel打開如下<圖一>可以看到,共有42001x785資料包含第一行為Label,第2-785行為數字特徵值,跟MNIST 784灰階圖pixel值同義,而訓練數據有42000筆加上第一列欄位的ID標示,故真正樣本是從第二列開始算起, 而test.csv 有28001筆資料,第一列仍然有 ID標示,
故真正數據也是從第二列開始,至於test.csv則沒有Label標籤行,這是我們需要作辨識後產生的結果。
<圖1>train.csv
底下是我辨識完後產生的result.csv ,這就是上傳的結果檔,注意第一列仍然要有ID註釋,而第一行ImageId只是序號,真正的預測結果是放在第二行,這格式必須如同sample_submission.csv,這樣才不會出錯。
有關多層感知器MLP的手寫數字辨識基本範例,可以先參考底下連結是用MNIST數據集所作的一個範例:
機器學習(8)--實作多層感知器(Multilayer Perceptron,MLP)手寫數字辨識
根據上述的MLP的手寫數字辨識範例,底下多增加了載入Kaggle數據的程式
底下程式片段分別為載入train,test資料及儲存識別test數據後的結果。最後產生的result.csv
將它上傳至Kaggle即可。Kaggle會自動算出準確率及排名。
def loadTrainData():
def loadTestData():
def saveResult(result):
在完整的範例程式裡,我利用Kaggle提供的train 數據集做完訓練後,仍然用了標準的MNIST數據集分別當作測試數據進行了預測試,最後再進行Kaggle提供的test 數據集作預測產生了result.csv檔上傳。
底下即是上傳result.csv後,Kaggle算出來的結果。準確率0.96357,排名1027。
可以重複再多上傳幾次不同的結果,至於使用什麼方法或工具,如KNN,SVM,或是keras,Tensorflow都無所謂,它只看最後上傳的result.csv檔。
<完整範例程式>可從我底下的Github下載
https://github.com/Ashing00/Multilayer-Perceptron/blob/master/MLP2.py
https://www.facebook.com/arbu00/
<參考資料>書名:Python機器學習,作者:Sebastian Raschka
<其他相關文章>
人工神經網路(1)--使用Python實作perceptron(感知器)
人工神經網路(2)--使用Python實作後向傳遞神經網路演算法(Backprogation artificial neature network)
深度學習(1)-如何在windows安裝Theano +Keras +Tensorflow並使用GPU加速訓練神經網路
機器學習(1)--使用OPENCV KNN實作手寫辨識
機器學習(2)--使用OPENCV SVM實作手寫辨識
演算法(1)--蒙地卡羅法求圓周率及橢圓面積(Monte carlo)
機器學習(3)--適應線性神經元與梯度下降法(Adaline neuron and Gradient descent)
機器學習(4)--資料標準常態化與隨機梯度下降法( standardization & Stochastic Gradient descent)
機器學習(5)--邏輯斯迴歸,過度適合與正規化( Logistic regression,overfitting and regularization)
機器學習(6)--主成分分析(Principal component analysis,PCA)
機器學習(7)--利用核主成分分析(Kernel PCA)處理非線性對應
機器學習(8)--實作多層感知器(Multilayer Perceptron,MLP)手寫數字辨識