sklearn中的metrics--常见的损失函数

本文梳理了sklearn中常见的分类和回归评估指标,包括准确率、精确率、召回率、F1-score、ROC曲线、AMI指数、MAE、MSE、RMSE和R2等。在分类问题中,介绍了各指标的定义及其应用场景,特别指出在数据不平衡时准确率的局限性。对于回归问题,讨论了不同误差指标的特点,如MAE对异常值的敏感性及MSE和RMSE对预测偏差的惩罚力度。

sklearn中的metric中共有70+种损失函数,让人目不暇接,其中有不少冷门函数,如brier_score_loss,如何选择合适的评估函数,这里进行梳理。

分类评估指标

  • TP:预测为正向(P),实际上预测正确(T),即判断为正向的正确率
  • TN:预测为负向(N),实际上预测正确(T),即判断为负向的正确率
  • FP:预测为正向(P),实际上预测错误(F),误报率,即把负向判断成了正向
  • FN:预测为负向(N),实际上预测错误(F),漏报率,即把正向判断称了负向
Positive Negative
True TP 真阳性 TN 真阴性
False FP 假阳性 FN 假阴性

准确率Accuracy:函数accuracy_score

A C C = T P + T N T P + T N + F P + F N ACC= \frac{TP+TN}{TP+TN+FP+FN} ACC=TP+TN+FP+FNTP+TN

分类准确率分数指的是所有分类正确的百分比。
缺点:(1)无法告知响应值的潜在分布,也无法告知分类器错误。
(2) 在数据集不平衡的时候,不太能反映模型优劣。

例如:分类问题的数据集中本来就有97% 示例是属于X,只有另外3%不属于X,所有示例都被分类成X的时候,准确率仍然高达97%,但这没有任何意义。

  • 形式:
sklearn.metrics.accuracy_score(y_true, y_pred, normalize=True, sample_weight=None)

normalize:默认值为True,返回正确分类的比例;如果为False,返回正确分类的样本数

精确率Precision:函数precision_score

P r e c i s i o n = T P T P + F P Precision = \frac{TP}{TP+FP} Precision=TP+FPTP
作用:

### 回归问题的评估方法 除了使用 `sklearn.metrics` 提供的评估指标,还可以使用其他工具和方法来评估回归模型的性能。例如,可以使用 **statsmodels** 库进行统计建模,它提供了更丰富的统计检验结果和模型诊断信息,适用于需要深入分析模型参数和假设的场景。 ```python import statsmodels.api as sm # 添加常数项 X_train_sm = sm.add_constant(X_train) # 拟合模型 model_sm = sm.OLS(y_train, X_train_sm).fit() # 输出模型摘要 print(model_sm.summary()) ``` 该方法可以提供回归系数的标准误、t统计量、p值等统计信息,有助于判断特征的显著性[^1]。 ### 分类问题的评估方法 对于分类任务,可以使用 **Yellowbrick** 库进行可视化评估。Yellowbrick 是一个基于 `scikit-learn` 的可视化分析扩展库,提供了多种模型评估的可视化工具,例如分类报告图、混淆矩阵热力图、ROC曲线等。 ```python from yellowbrick.classifier import ClassificationReport from sklearn.ensemble import RandomForestClassifier # 训练分类器 model = RandomForestClassifier() model.fit(X_train, y_train) # 可视化分类报告 visualizer = ClassificationReport(model, classes=["Not Spam", "Spam"]) visualizer.fit(X_train, y_train) visualizer.score(X_test, y_test) visualizer.show() ``` Yellowbrick 提供了比 `sklearn.metrics` 更直观的评估方式,便于发现模型在不同类别上的表现差异[^2]。 ### 交叉验证与自定义评估函数 在某些特定任务中,可能需要自定义评估函数来适应业务需求。例如,在金融预测任务中,可以定义基于收益的评估指标,而不仅仅是准确率或均方误差。Python 中可以使用 `scikit-learn` 的 `make_scorer` 函数来自定义评估标准,并将其用于 `GridSearchCV` 或 `cross_val_score`。 ```python from sklearn.metrics import make_scorer, mean_squared_error from sklearn.model_selection import GridSearchCV # 自定义MSE的负值作为评分 neg_mse = make_scorer(lambda y_true, y_pred: -mean_squared_error(y_true, y_pred)) # 使用自定义评分进行网格搜索 param_grid = {'n_estimators': [50, 100]} grid = GridSearchCV(RandomForestClassifier(), param_grid, scoring=neg_mse) grid.fit(X_train, y_train) ``` 该方法允许灵活定义模型优化目标,适用于非标准任务或业务特定指标。 ### 时序模型的评估方法 在处理时间序列预测任务时,除了使用传统的 RMSE、MAE 等指标,还可以使用 **TimeSeriesSplit** 进行交叉验证,以确保模型在时间序列上的泛化能力。此外,一些专门用于时间序列分析的库(如 `statsmodels` 中的 ARIMA 模型)也提供了模型诊断图,如残差图、ACF/PACF 图等,用于评估模型的拟合效果。 ```python from statsmodels.tsa.arima.model import ARIMA from statsmodels.graphics.tsaplots import plot_acf, plot_pacf # 拟合ARIMA模型 model = ARIMA(train_data, order=(1, 1, 1)) results = model.fit() # 绘制残差的ACF和PACF plot_acf(results.resid) plot_pacf(results.resid) ``` 这些诊断图可以帮助识别模型是否充分捕捉了数据中的时间依赖结构[^1]。 ### 深度学习模型的评估方法 对于深度学习模型,除了使用 `Keras` 或 `PyTorch` 内置的评估函数,还可以借助 **TensorBoard** 进行训练过程的可视化分析。TensorBoard 提供了损失曲线、准确率变化、模型结构等信息,有助于理解模型训练过程并进行调优。 在 Keras 中启用 TensorBoard: ```python from tensorflow.keras.callbacks import TensorBoard # 设置TensorBoard回调 tensorboard = TensorBoard(log_dir='./logs') # 训练模型并记录日志 model.fit(X_train, y_train, epochs=10, callbacks=[tensorboard]) ``` 通过浏览器访问 TensorBoard 的可视化界面,可以更直观地分析模型训练过程中的变化趋势。 ###
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值