模型评估与选择

分类模型性能度量

1.精度(accuracy)
分类正确样本占总样本的比例
2.混淆矩阵
在分类任务中,预测结果与真实结果之间存在4中不同的组合,由这4中组合就构成了分类结果的混淆矩阵。对于二分类任务只有一个混淆矩阵,对于多分类任务,需对每个类别分别建立混淆矩阵。
在这里插入图片描述
3.准确率(查准率:precision)
预测为正例的样本中真实为正例的比例
在这里插入图片描述
在这里插入图片描述
4.召回率(查全率:recall)
真实为正例的样本中预测结果为正例所占的比例(体现了对正样本的区分能力,常用)
在这里插入图片描述
R r e c a l l = T P T P + F N R_{recall}=\frac{TP}{TP+FN} Rrecall=TP+FNTP

5.F1-score与Fβ-score
F 1 − s c o r e F_{1-score} F1score是基于查准率与查全率的调和平均,其出发点是在准确率与召回率之间找到一个平衡点,因此一定程度反映了模型的稳健性。 F 1 − s c o r e = P ∗ R P + R F_{1-score}=\frac{P*R}{P+R} F1score=P+RPR

F β − s c o r e F_{\beta-score} Fβscore是基于查准率与查全率的加权平均,可以表达我们对于准确率与召回率的不同偏好。β大于0度量了查全率对于查准率的相对重要性。如下表所示: F β − s c o r e = ( 1 + β 2 ) ∗ P ∗ R ( β 2 ∗ P ) + R F_{\beta-score}=\frac{(1+\beta^2)*P*R}{(\beta^2*P)+R} Fβscore=(β2P)+R(1+β2)PR

注:当 0 < β < 1 0<\beta<1 0<β<1时,偏重准确率;当 β = 1 \beta = 1 β=1时, F β F_{\beta} Fβ退化为 F 1 F_1 F1,即同等看待准确率与召回率;当 β > 1 \beta > 1 β>1时,偏重召回率

6.ROC与AUC曲线
ROC名为“受试者工作特性曲线”,其横轴为“假正例率”,FPR(False Positive Rate),即真实为反例的样本中将其预测为正例所占的比例;纵轴为“真正例率”,TPR(True Positive Rate),即真实为正例的样本中预测为正例所占的比例等同于召回率;ROC曲线下的面积即为AUC(Aera Under Curve),曲线下面积越接近1表示模型预测效果越好。
T P R = T P T P + F N                   F P R = F P T N + F P TPR = \frac{TP}{TP+FN} \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ FPR=\frac{FP}{TN+FP} TPR=TP+FNTP                 FPR=TN+FPFP
在这里插入图片描述

from sklearn.metrics import roc_curve,auc
fpr,tpr,thresholds = roc_curve(y_true,y_score) # 计算ROC曲线的所有点
auc_value = auc(fpr,tpr)  # 计算ROC曲线下的面积AUC
回归模型性能度量
  1. 均方误差(Mean Square Error)
  2. R 2 R^2 R2标准
模型评估
  1. 留出法
    将数据集划分为训练集和测试集,二者互斥且分布近似。
    在这里插入图片描述
  2. 交叉验证
    采用留出法将数据集划分为训练集和测试集,再将训练集划分为k个大小相似的互斥子集,每次用k-1个子集作为训练集,余下的那个子集作为验证集。将得到的k个测试结果的均值作为最终结果。此方法也称为k折交叉验证。
    在这里插入图片描述
  3. 网格搜索
    用于同一模型超参数调优,通过对不同参数的组合,得出不同参数的测试结果,找出模型最优参数。
"""交叉验证与网格搜索sklearn实现"""
from sklearn import datasets
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split,GridSearchCV
from sklearn.preprocessing import StandardScaler
def knn_classifier():
    """加载数据集"""
    data = datasets.load_iris()
    """划分数据集(留出法)""" 
    x_train,x_test,y_train,y_test = train_test_split(\
    							data.data,data.target,test_size=0.25)
    """特征工程"""
    # 标准化
    sds = StandardScaler()
    x_train = sds.fit_transform(x_train)
    x_test = sds.transform(x_test)
    """估计器"""
    # 交叉验证和网格搜索
    knn = KNeighborsClassifier()
    gc = GridSearchCV(knn,param_grid={"n_neighbors":[1,3,5,7,9]},cv=10)
    gc.fit(x_train,y_train)
    print("准确率:",gc.score(x_test,y_test))
    print("最高准确率:",gc.best_score_)
    print("最好模型:",gc.best_estimator_)
    print("交叉验证结果:",gc.cv_results_)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值