|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
今天接着昨天的代码继续写:
- from sklearn.model_selection import cross_val_score
- cross_val_score(sgd_clf,X_train,y_train_5,cv=3,scoring="accuracy")
复制代码
这是一种验证简写方法,运行后跟昨天的得分一样,结果为:
array([ 0.93895, 0.9566 , 0.9663 ])
看起来这个得分很高,都快接近1了。其实还不行,不信我们自己瞎编一个预测方法:
- from sklearn.base import BaseEstimator
- class Never5Classifier(BaseEstimator):
- def fit(self,X,y=None):
- pass
- def predict(self,X):
- return np.zeros((len(X),1),dtype=bool)
-
- never_5_clf=Never5Classifier()
- cross_val_score(never_5_clf,X_train,y_train_5,cv=3,scoring="accuracy")
复制代码
这个预测方法实际上就返回一个全是false的矩阵,无论猜任何数都不是5,我们看看他的评分:
array([ 0.9094 , 0.90735, 0.9122 ])
这是因为5在所有数据里只占10%,就算全错也有90%的准确率,所以我们要使用迷糊矩阵的方式验证:
from sklearn.model_selection import cross_val_predict
y_train_pred=cross_val_predict(sgd_clf,X_train,y_train_5,cv=3)
以上代码作用是先创造一个跟原来的预测方法一样的数据格式,然后我们使用迷糊矩阵来验证一下:
- from sklearn.metrics import confusion_matrix
- confusion_matrix(y_train_5,y_train_pred)
复制代码
输出结果为:
array([[54208, 371],
[ 2392, 3029]], dtype=int64)
这就是一个方形矩阵,从左到右对角线上的数代表是正确的数量,数越大越好,如果正确率100%就像这样:
array([[54579, 0],
[ 0, 5421]], dtype=int64)
通常我们用另一种方法,就是取事先算好的迷糊矩阵的正确和总数的比值:
- from sklearn.metrics import precision_score,recall_score
- precision_score(y_train_5,y_train_pred)
复制代码
输出为:
0.89088235294117646
其实就是 2392/371+3029,正确率还是挺高的,还有另外一种:
- recall_score(y_train_5,y_train_pred)
复制代码
输出为:
0.55875299760191843
这种是除以底下的2个数相加,然后还有一种方法:
- from sklearn.metrics import f1_score
- f1_score(y_train_5,y_train_pred)
复制代码
输出为:
0.68677020745947182
这其实就是综合了上面2项验证,取一个误差值。公式是2*前两项相乘/前两项相加。 |
|