马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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*前两项相乘/前两项相加。 |