文章目录
任务描述
记录7个模型(逻辑回归、SVM、决策树、随机森林、GBDT、XGBoost和LightGBM)关于accuracy、precision,recall和F1-score、auc值的评分表格,并画出Roc曲线。
1. 代码优化 - 数据集加载
由于train_test_split 支持输入为Dataframes格式的数据。所以对于数据的读取代码,建议修正如下:(比较简洁)
data = pd.read_csv("data_all.csv")
# train_test_split支持dataframes格式的数据, 无需将数据转为矩阵
X = data.drop(labels=["status"], axis=1)
y = data[["status"]]
略冗余的代码用到了以下方法:
.values.ravel()、.values 或 .as_matrix()
2. 数据未归一化情况下,LR和SVM求出的precision和recall为0?
@007 同学写的很有道理,可参照一下他的博客:
“如果你不用正则,那么,标准化并不是必须的,如果你用正则,那么标准化是必须的。”(LogisticRegression的默认参数是使用C=1.0, penalty=‘l2’)
因为不用正则时,我们的损失函数只是仅仅在度量预测与真实的差距,加上正则后,我们的损失函数除了要度量上面的差距外,还要度量参数值是否足够小。而参数值的大小程度或者说大小的级别是与特征的数值范围相关的。
此外,测试了一下,如果选用L2正则化,无论惩罚因子C的取值如何变化,最终的precision和recall仍为0。选用L1正则时,precision和recall不为0(或许是因为L1正则只是对系数取绝对值&