当数据是极度偏差的话,我们仅仅是靠准确率(account_score)是远远不够的
例如:某癌症的发病率是万分之一,如果我们的样本是10000人,那我们可以直接猜想发病的人是1人,那我们预测的准确率为99.99%。那还有啥意义呢???
混淆军阵:TN FP
FN TP
我们只关注为1的数据:
精准率(precision = TP / (FP + TP)):我们预测的有多准
召回率(recall = TP / (FN + TP)):我们只关注为真的预测率
def TN(y_true, y_predict):
return np.sum( (y_true == 0) & (y_predict == 0) )
def FP(y_true, y_predict):
return np.sum( (y_true == 0) & (y_predict == 1) )
def FN(y_true, y_predict):
return np.sum( (y_true == 1) & (y_predict == 0) )
def TP(y_true, y_predict):
return np.sum( (y_true == 1) & (y_predict == 1) )
def cofusion_matrix(y_true, y_predict):
return np.array([
[TN(y_true, y_predict), FP(y_true, y_predict)],
[FN(y_true, y_predict), TP(y_true, y_predict)]
])
def precision(y_true, y_predict):
return TP(y_true, y_predict) / (TP(y_true, y_predict) + FP(y_true, y_predict))
def recall(y_true, y_predict):
return TP(y_true, y_predict) / (TP(y_true, y_predict) + FN(y_true, y_predict))
#sklearn中的混淆矩阵,精准率和召回率
from sklearn.metrics import confusion_matrix
from sklearn.metrics import precision_score
from sklearn.metrics import recall_score
F1 = 2 * (precision * recall) / ( recall + precision) 这样而已啦