《Hands-On Machine Learning with Scikit-Learn & TensorFlow》第三章 分類

1. 先做5和非5的單分類

SGD分類器實現單分類,並用交叉驗證,cross_val_score()得到的是kfold的分類accuracy,且裏面進行的是分層抽樣,根據分類的類別來進行的分層抽樣!cross_val_predict()與cross_val_score()類似,但是輸出的不是accuracy,而是分類的結果。再通過conf_result = confusion_matrix(y_train_5, y_train_pred),可以得到混淆矩陣。即利用訓練集進行交叉驗證後,可以得到訓練集的混淆矩陣!

 

 


(1)爲什麼一定要打亂數據集?

讓我們打亂訓練集。這可以保證交叉驗證的時所有的摺疊都差不多(你不會希望某一個摺疊數據集類缺少某類數字)。而且,一些學習算法對訓練樣例的順序敏感當它們在一行當中得到許多相似的樣例,這些算法將會表現得非常差。打亂數據集將保證這種情況不會發生。

評估一個分類器,通常比評估一個迴歸器要困難的多。所以我們將會花大量的篇幅在這個話題上。有許多量度性能的方法,所以拿來一杯咖啡和準備學習許多新概念和首字母縮略詞吧。

使用交叉驗證測量準確性

(2)爲什麼準確率很高?——因爲數據是biased,正類只有10%,負類有90%,所以即使全判錯,也有90%的準確率!!!!處理偏斜類數據時,準確率無法成爲分類器的首要性能指標!!!

將數據集分成了三個摺疊,進行交叉驗證。二分類的交叉驗證,看似準確率還不錯!且使用的StratifiedKFold類實現的交叉驗證,這個類是進行的分層採樣,生成的折包含了各類的相應比例的樣例!

評估classifiers性能一個比較好的方法是查看混淆矩陣。 一般的想法是計算A類實例被分類爲B類的次數。例如,要知道分類器將5與3混淆的次數,您將查看混淆矩陣的第5行和第3列

要計算混淆矩陣,首先需要有一組預測,以便他們可以與實際目標進行比較。 您可以對測試集進行預測,但現在讓它保持不變(請記住,只有在項目的最後才能使用測試集,一旦有了準備啓動的分類器)。 相反,您可以使用cross_val_predict()函數:

樣本不均衡時單分類的評價指標

正樣本的Recall還可以用,但是precision一定不好用了https://blog.csdn.net/zhongjunlang/article/details/79568601 

 

             詳見:http://blog.csdn.net/login_sonata/article/details/54288653                   


一、5與非5的單分類

https://github.com/ageron/handson-ml/issues/360 Chapter 3: ValueError: The number of classes has to be greater than one; got 1 class 

出現錯誤的原因是:y_train_5裏面只有一個類別。因爲使用了fetch_openml()下載的MNIST,它返回的標籤是string類型的,所以的那個定義y_train_5 = (y_train == 5)時,返回值都是false。解決辦法是cast y_train到int8格式。y_train = y_train.astype(np.int8)使用這個語句即可。或者y_train_5 = (y_train == '5') y_test_5 = (y_test == '5')

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章