机器学习深度学习
機器學習&深度學習
機器學習篇
本代碼模塊對《機器學習實戰》一書中的所有代碼做了整理,解決了讀者在閱讀本書過程中困擾于書上有很多代碼在Python3環境下不能運行的問題。我在代碼中做了大量的注釋,方便各位讀者學習。代碼地址:https://github.com/wzy6642/Machine-Learning-in-Action-Python3
深度學習篇
我在學習深度學習過程中,對代碼做了充分的整理。目前已經完成的代碼模塊如下所示:
Pima Indians數據集為糖尿病患者醫療記錄數據,是一個二分類問題。本代碼采用80%數據訓練,20%數據測試的方法。若數據不做歸一化處理,最終模型的分類精度為 79.17%;而數據進行歸一化以后,最終模型的分類精度為81.38%。
其中還包括一份10折交叉驗證的代碼,最終的運行結果為76.69% (+/- 2.95%)。
sklearn結尾的代碼為用sklearn包的KerasClassifier進行多分類,通過10折交叉驗證,得到最終的精度為0.7681989076737664
GridSearch結尾的代碼為用sklearn包的GridSearchCV搜索超參,得到最終的結果為Best: 0.781250 using {‘batch_size’: 10, ‘epochs’: 150, ‘init’: ‘normal’, ‘optimizer’: ‘rmsprop’}
Iris數據集為鳶尾花數據集,是一個擁有4個特征的3分類問題,數據集共有150個樣本,最終的精度為Accuracy: 83.33% (0.30)
Boston House Price數據集為1978年波士頓房價的統計數據,共計14個特征,506個樣本。最終的精度為MSE: 12.36 (4.37)。注意:cross_val_score函數當loss函數為mean_squared_error、mae等時,其得分為負數(cross_val_score里用的指標是負均方誤差),所以最終的MSE指標要在交叉驗證的結果上取相反數!
本案例中使用replace對數據集中的英文進行了編碼處理,這是這份代碼的一個亮點!對數據作StandardScaler()處理,使用GridSearchCV搜索超參。最終結果為:Accuracy: 88.92% (0.01) Best: 0.886308 using {‘units_list’: [16]}
使用model.to_json()保存網絡結構,使用model.save_weights()保存權重。使用model_from_json(model_json)加載已經保存好的模型。另一份代碼采用YAML格式對模型進行保存與加載。通過加載模型的方式建立新的模型后,必須先編譯模型,后對新的數據集進行預測。最終結果為acc: 99.33%
先用構建好的模型對部分數據進行訓練,并將網絡的結構以及權重進行保存。然后將保存的網絡加載并對剩余的樣本進行增量訓練。相比于全量更新,這樣可以大大縮短訓練時間。最終結果為:Base acc: 98.33%\Increment acc: 96.67%
本代碼將val上的accuracy提升時候的模型的權重進行保存(不覆蓋前一次的保存結果)。用到了Keras的ModelCheckpoint。最后一次的保存結果為:Epoch 00177: val_acc improved from 0.80000 to 0.83333, saving model to …/model/weights-improvement-177-0.83.h5
本代碼中將val上accuracy表現最好的模型的權重進行保存,并將該權重導入用于計算此時的all_accuracy。最終得分為:acc: 96.00%
通過調用fit返回的history繪制網絡在train/val上accuracy/loss曲線,以觀察模型訓練是否收斂。
通過在網絡中添加Dropout層,隨機使一部分神經元不參與訓練。本代碼中首先對輸入層添加Dropout層,然后對隱層以及輸出層添加Dropout層,經過10折交叉驗證,最終的結果分別為:Accuracy: 74.00% (0.28)/Accuracy: 65.33% (0.29)
本代碼塊包含兩種學習率衰減模式,一種為線性衰減,一種為指數衰減。線性衰減的最終的結果為:loss: 0.4630 - acc: 0.6533/指數衰減的最終結果為loss: 0.3380 - acc: 0.9000
mnist數據集擁有60000個樣本,每張圖片均為28x28。在本案例中首先采用傳統的多層感知器構建手寫體識別的模型,其原理是把每一張圖片看成一個向量,其label為圖片代表的數字,通過構造神經網絡學習feature與label之間的映射關系。其精度為MLP: 98.09%;使用卷積神經網絡:輸入層->卷積層->池化層->Dropout層->Flatten層->全連接層->輸出層。最終的分類精度為:CNN_Small: 99.07%。
本代碼中利用ImageDataGenerator對圖像進行特征標準化、ZCA白化、旋轉、移動、反轉、透視操作,并且介紹了文件路徑的創建(try:/except:)以及圖像的自動保存。
CIFAR-10中包含了60000張圖片用于10分類任務。本代碼中設計了大型卷積神經網絡用于多分類任務。利用model.summary()對模型結構進行輸出,TensorBoard記錄計算過程中的訓練信息,LearningRateScheduler動態調整學習率,GlobalAveragePooling2D進行平均池化處理,將每一個feature map變為一個特征點。最終的分類精度為:0.8796
IMDB數據集包括50000部電影的評價信息,label為黑白樣本。使用Embedding結合一維卷積池化可以達到0.8865的精度。參考鏈接:https://github.com/MoyanZitto/keras-cn/blob/master/docs/legacy/blog/word_embedding.md
AirlinePassengers數據集記錄了1949-1960年的國際旅客人數數據集,通過構造t-3~t與t+1之間的時間序列,利用多層感知機進行預測,最終結果為:_Train Score: 456.09 MSE (21.36 RMSE)/Validation Score: 2021.68 MSE (44.96 RMSE)。_另外,通過LSTM的批次間記憶,構造神經網絡模型,對數據集進行預測。最終結果為:Train Score: 30.70 MSE/Validation Score: 105.41 MSE。
PRSA數據集記錄了北京五年內每天的PM2.5指數以及當天的溫度、風速等情況,通過建立t-1日的各項指標與t日的PM2.5指數,構造多變量的時間序列。利用LTSM進行預測,預測結果為:val_loss: 53.3895。本代碼亮點在于時間數據的處理parse_dates以及訓練數據集的合成shift
代碼地址:https://github.com/wzy6642/Deep_Learning_Keras
更多的代碼作者正在編寫中!
實戰篇
本人于今年參加了DC的房屋租金預測大賽,取得TOP1的成績,所有代碼及數據集都進行了開源:https://github.com/wzy6642/HousePrice
除此之外,利用閑暇時間寫了一個文本編輯器,開源地址如下:https://github.com/wzy6642/TextEdit
希望能結識更多的小伙伴一起學習機器學習知識,可以通過添加QQ群聯系我哦,咱們一起搞事情!點擊鏈接加入群聊【機器學習】:https://jq.qq.com/?_wv=1027&k=582Igkj
總結
- 上一篇: 百度指数cookie不可用解决方案
- 下一篇: 数据的EDA分析