分类模型的评价

1、从案例出发

假如某个班级有男生80人,女生20人,共计100人。目标是找出所有女生。

现在某人挑选出50个人,其中20人是女生,另外还错误的把30个男生也当作女生挑选出来了。评估(evaluation)下他的工作。

(1)accuracy(准确率):0-1损失。分类器(某人)正确分类的样本数/总样本数,即20+50/100=70%

不适合不均衡数据集。举例,总人数100人,男生1人,女生99人,现调出男生。假设都是女生,那么accuracy:99/100=99%

虽然accuracy很高。但是我的目的是要调出男生,它没有做到。差评。 

(2)precision(精确率):成功查询到的样本/总查询的样本

前面案例中分别是20/20+30=40%    0/100=0%

(3)recall(召回率):成功查询到的样本/目标样本总数

前面案例中分别是20/20=100%    0/20=0%

2、损失函数

(1)0-1损失

(2)log损失:log_loss,logistic/负log似然损失。

3、不均衡样本的评价指标

(1)混淆矩阵

可以用于二分类,有可以用于多分类(如shou手写数字识别)

(2)前面介绍的precision、recall

(3)ROC:面积AUC

不仅仅只考虑precision或者recall,而是综合考虑。ROC:TPR(就是recall)+FPR(将多少个假的预测成了真的)

          

通常,如A、B曲线,我们会选择A。

但如果曲线是不规则的,我们会计算AUC值(曲线的面积),判别大小,取AUC最大的曲线。

(4)PR:面积AP

当负样本非常多时,FPR很小。

       

(5)在现代web信息检索中,recall意义不大了(进本上都能查到,但是查到的信息很多,人们只关心部分)。

改用Precision@K,如Precision@10,意味着只关注前10个查询到的数据。

(6)将precision和recall值结合在一起:F1分数,称为precision和recall的调和平均。

4、sklearn中的评价指标

(1)每一个学习器都有一个score函数(回归中缺省的就是R2 Score),分类中缺省的是正确率(Mean accuracy)。

from sklearn.linear_model import LinearRegression

lr = LinearRegression()

lr.fit(X_train, y_train)

#方式1

y_test_pred_lr = lr.predict(X_test)

y_train_pred_lr = lr.predict(X_train)

print('测试集的评价指标:', r2_score(y_test, y_test_pred_lr))

print('训练集的评价指标', r2_score(y_train, y_train_pred_lr))

#方式2(必须先fit才行)

print("test:",lr.score(X_test,y_test))

print("train:",lr.score(X_train,y_train))

(2)在交叉验证时(评估模型性能),scoring参数,它就可以指定选用哪种评价指标。

model_selection.cross_val_score、model_selection.GridSearchCV、xxCV类中有scoring参数(最佳参数为最大scoring模型对应的参数)。

由于要评价模型,交叉验证GridSearchCV会自动保留最佳的参数、最佳的分数、最佳的模型。scoring的评价指标要越大越好。

如果采用损失/误差(损失越小越好)类函数的话,需要加上负号,即负损失越大越好。如:log_loss==>net_log_loss

          

(3)Metric模块,提供了一些其他的评价指标

(4)一个特定的任务,sklearn不支持,怎么办?

NO1:Metric里面定义了一些积分函数,如fbeta_score,对其进行变换,将beta设定为2。

NO2:自己写评价函数

(5)Classification metrics模块:PR、ROC等

一般竞赛中,会规定我们用哪个评价指标。我们就可以将这个评价指标作为交叉验证中的scoring参数即可。

猜你喜欢

转载自blog.csdn.net/xiaogao2017/article/details/81461828
今日推荐