Jon*_*Jon 6 classification machine-learning scikit-learn logistic-regression auc
在航班延误数据集的版本中使用LogisticRegression类.scikit-learn
我pandas用来选择一些列:
df = df[["MONTH", "DAY_OF_MONTH", "DAY_OF_WEEK", "ORIGIN", "DEST", "CRS_DEP_TIME", "ARR_DEL15"]]
Run Code Online (Sandbox Code Playgroud)
我NaN用0 填写值:
df = df.fillna({'ARR_DEL15': 0})
Run Code Online (Sandbox Code Playgroud)
确保分类列标有"类别"数据类型:
df["ORIGIN"] = df["ORIGIN"].astype('category')
df["DEST"] = df["DEST"].astype('category')
Run Code Online (Sandbox Code Playgroud)
然后调用get_dummies()来自pandas:
df = pd.get_dummies(df)
Run Code Online (Sandbox Code Playgroud)
现在我训练和测试我的数据集:
from sklearn.linear_model import LogisticRegression
lr = LogisticRegression()
test_set, train_set = train_test_split(df, test_size=0.2, random_state=42)
train_set_x = train_set.drop('ARR_DEL15', axis=1)
train_set_y = train_set["ARR_DEL15"]
test_set_x = test_set.drop('ARR_DEL15', axis=1)
test_set_y = test_set["ARR_DEL15"]
lr.fit(train_set_x, train_set_y)
Run Code Online (Sandbox Code Playgroud)
一旦我调用该score方法,我就会得到0.867.但是,当我调用该roc_auc_score方法时,我得到的数字大约低于0.583
probabilities = lr.predict_proba(test_set_x)
roc_auc_score(test_set_y, probabilities[:, 1])
Run Code Online (Sandbox Code Playgroud)
ROC AUC是否比该score方法提供的要低得多?
des*_*aut 18
首先,说0.583的AUC低于0.867的得分*,就像比较苹果和橙子一样.
[*我认为你的分数是平均准确度,但这对于这个讨论并不重要 - 它原则上可能是其他任何东西]
根据我的经验,至少大多数ML从业者认为AUC分数测量的东西与实际不同:普通(和不幸)使用就像任何其他更高更好的度量,如准确性,可能自然会导致像你自己表达的谜题.
事实是,粗略地说,AUC衡量的是在所有可能的决策阈值中平均的二元分类器的性能.
二元分类中的(决定)阈值是我们决定将样本标记为1的值(回想一下,概率分类器实际上返回p[0,1]中的值,通常被解释为概率 - 在scikit中 - 学习它是什么predict_proba回报).
现在,这个阈值,在像scikit-learn predict这样的返回标签(1/0)的方法中,默认设置为0.5,但这不是唯一的可能性,在一些情况下甚至可能不需要(例如,不平衡的数据).
带回家的重点是:
score(在引擎盖下使用predict,即标签而不是概率)时,你也隐含地将这个阈值设置为0.5predict_proba)时,不涉及阈值,并且您获得(类似)所有可能阈值的平均精度鉴于这些澄清,您的特定示例提供了一个非常有趣的案例:
我的模型得到了足够的准确率~87%; 我是否应该关心这一点,根据0.58的AUC,我的分类器仅仅比随机猜测稍微好一点?
如果数据中的类表示是合理平衡的,那么现在的答案应该是显而易见的:不,你不应该关心; 对于所有实际案例,你关心的是一个使用特定阈值部署的分类器,以及这个分类器在纯粹的理论和抽象情况下所做的事情,当在所有可能的阈值中取平均值时,对于从业者来说应该没什么兴趣(它确实对一位研究人员提出了一种新的算法,但我认为这不是你的情况).
(对于不平衡的数据,参数会发生变化;此处的准确性实际上是无用的,您应该考虑精度,召回和混淆矩阵).
出于这个原因,AUC已经开始在文献中受到严厉的批评(不要误读这一点 - 对ROC曲线本身的分析具有很高的信息量和实用性); 在维基百科条目和提供的参考文献都极力推荐阅读:
因此,AUC测量的实际价值受到质疑,提高了AUC实际上可能在机器学习分类准确性比较中引入更多不确定性而不是分辨率的可能性.
[...]
最近对ROC AUC问题的一个解释是,将ROC曲线减少到单个数字忽略了这样一个事实:它是关于不同系统或性能点之间的权衡,而不是单个系统的性能
强调我的 - 请参阅关于AUC的危险 ......
我不知道究竟AIR_DEL15是什么,您将其用作标签(它不在原始数据中)。我的猜测是这是一个不平衡的特征,即 0 比 1 多得多;在这种情况下,作为度量的准确性没有意义,您应该使用精度、召回率和混淆矩阵来代替 - 另请参阅此线程)。
举一个极端的例子,如果你的标签中有 87% 是 0,那么你可以通过将所有样本分类为 0 来简单地(并且天真地)获得 87% 准确率的“分类器”;在这种情况下,您的 AUC 也会很低(与您的情况相当接近 0.5)。
有关 AUC 究竟是什么的更一般(在我看来非常需要)的讨论,请参阅我的其他答案。
| 归档时间: |
|
| 查看次数: |
7681 次 |
| 最近记录: |