一周算法实践day3:模型评估

本文记录了在数据分析中对7种模型(逻辑回归、SVM、决策树等)进行accuracy、precision、recall、F1-score和AUC值的评估。介绍了sklearn.preprocessing的scale与StandardScaler的差异,强调数据标准化的重要性。同时,详细解释了ROC曲线和AUC值的概念,以及如何使用sklearn.metrics计算。此外,区分了predict和predict_proba的区别,并指出SVM模型中使用decision_function获取预测得分。实践中遇到了模型评估概念混淆及未归一化数据导致的问题。
摘要由CSDN通过智能技术生成

数据说明

使用之前的数据data_all.csv

1任务

  • 记录7个模型(逻辑回归、SVM、决策树、随机森林、GBDT、XGBoost和LightGBM)关于accuracy、precision,recall和F1-score、auc值的评分表格,并画出ROC曲线。

2解决的问题

  1. 关于sklearn.preprocessing中scale和StandardScaler的两种数据标准化方式的区别,其实两者是一样的,只是scale()是一个方法,可以直接将给定数据进行标准化。而StandardScaler是一个实现了Transformer API的类,使用该类的好处在于可以保存训练集中的参数(均值、方差)直接使用其对象转换测试集数据。一般情况下最好只用后者。详细情况参照 参考1。数据标准化主要功能就是消除变量间的量纲关系,从而使数据具有可比性。
  2. 对ROC曲线和AUC值的理解:ROC曲线的线下面积,即AUC值,该值显然是越大,分类器性能越好. 同时注意,计算ROC曲线时,并不是使用分类结果,而是使用预测得分[可以是正类的估计概率置信值或者分类器方法 “decision_function” 的返回值;](一开始就是这里没搞明白)。画ROC曲线时,依次将所有样本的预测得分作为阈值,然后得到TPR(True Positive Rate, True positive/Actual positive )和FPR(False Positive Rate, False positive / Actual negative), 然后作图,详细情况参照参考2
  3. sklearn.metrics.auc和sklearn.metrics.roc_auc_score都可以计算AUC值,roc_auc_score 是 预测得分曲线下的 auc,在计算的时候调用了 auc,需要仔细理解roc_auc_score(y_true, y_score, average=‘macro’, sample_weight=None)中各个参数的意义。详细情况参照参考3
  4. sklearn中的predict与predict_proba的区别: predict返回的是一个大小为n的一维数组,一维数组中的第i个值为模型预测第i个预测样本的标签;predict_proba返回的是一个n行k列的数组,第i行第j列上的数值是模型预测第i个预测样本的标签为j的概率。此时每一行的和应该等于1。所以,若希望预测结果直接是某预测标签,则用predict,若希望预测结果是标签的概率则用predict_proba。
  5. 有一点需要注意:SVM模型中输入 roc_auc_score的预测得分decision_function返回,而不是predict_proba。decision_function(X):返回决策函数值(比如svm中的决策距离),详细情况参照参考5

3完整代码及注释

#导入包
import pandas as pd
import matplotlib.pyplot as plt
#引入要用到的评价函数
from sklearn.metrics import roc_auc_score
from sklearn.metrics import accuracy_score
from sklearn.metrics import precision_score
from sklearn.metrics import recall_score
from sklearn.metrics import f1_score
from sklearn.metrics import roc_curve,auc
#引入用到的分类算法
from sklearn.ensemble import RandomForestClassifier
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.svm import LinearSVC
from xgboost import XGBClassifier
from lightgbm import LGBMClassifier
from sklearn.model_selection import  train_test_split
from sklearn.preprocessing import StandardScaler
import warnings

warnings.filterwarnings('ignore')
#读取数据
data_all = pd.read_csv('data_all.csv')
print('数据的行列',data_all.shape)
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值