背景介绍
由Datawhale组织的「一周算法实践」活动,通过短期实践一个比较完整的数据挖掘项目,迅速了解相关实际过程
Link
GitHub - Datawhale Datamining Practice - awyd234
任务描述
【任务1.1 - 模型构建】给定数据集,数据三七分,随机种子2018。(在任务1中什么都不用考虑,即不需数据处理和模型调参)调用sklearn的包,简单构建逻辑回归、SVM和决策树3个模型,评分方式任意(e.g. 准确度和auc值)。
1. 环境搭建
1.1 Virtualenv安装Python3.6虚拟环境
1 | virtualenv --python=python3.6 --prompt='(datawhale_dm_practice)' .env |
1.2 安装sklearn
1 | pip install -i install -i https://pypi.doubanio.com/simple/ sklearn |
由于python官方源访问不太稳定,此处选用豆瓣Python源
2. 数据划分
根据要求,三七分数据,7成数据作为训练集,三成数据作为测试集,并选取随机种子2018
1 | from sklearn.model_selection import train_test_split |
2.1 X和y值划分
此题将status列作为y值,其它列作为X值
2.2 train_test_split函数
2.2.1 源码函数说明
1 | Split arrays or matrices into random train and test subsets |
2.2.2 参数说明
- test_size,测试集大小,可以int,float或者None,此处指定为0.3
- 值为int时,取样本数目
- 值为float时,取样本占比
- 如果没有指定,或者说为None,如果没有指定train_size参数,则取默认值0.25,否则取除了train_size余下的数据
- train_size,训练集大小,同样可以int,float或者None,默认值None,与test_size区别处,如果train_size不设置,则直接取除了test_size余下的数据
- random_state,随机数种子,也就是该组随机数的编号
- 随机数的产生取决于种子,随机数和种子之间的关系遵从以下两个规则
- 种子不同,产生不同的随机数,如果设置为None,每次都会产生不一样的随机数
- 种子相同,即使实例不同也产生相同的随机数,对于重复数据很有帮助
- 具体原理暂时不具体研究
- 随机数的产生取决于种子,随机数和种子之间的关系遵从以下两个规则
3. 逻辑回归LogisticRegression
1 | from sklearn.linear_model import LogisticRegression |
输出
1 | LR fit finished, score: 0.7484232655921513 |
3.1 初始化随机树
此处仍然选择随机种子2018,其它参数暂不详述
3.2 训练模型
LogisticRegression.fit() 函数源码说明如下
1 | Fit the model according to the given training data. |
- X, y以矩阵形式传入
- sample_weight是每条测试数据的权重,同样以array形式传入,作为可选参数,如果不指定,则默认权重相同,都为1个单元
3.3 模型评价
3.3.1 准确率计算
此处使用ClassifierMixin.score()函数,源码中说明如下
1 | Returns the mean accuracy on the given test data and labels. |
给定测试数据以及标签,计算平均准确率
3.3.2 AUC计算
1 | from sklearn.metrics import auc, roc_curve |
此模型输出结果
1 | LR fit finished, auc: 0.5674574609036754 |
predict_proba()函数根据模型生成各个测试数据在各class的概率,源码中说明如下
1 | Compute probabilities of possible outcomes for samples in X. |
4. 支持向量机SVM
1 | from sklearn.svm import SVC |
输出
1 | SVM fit finished, score: 0.7484232655921513 |
5. 决策树DecisionTreeClassifier
1 | from sklearn import tree |
输出
1 | DecisionTree fit finished, score: 0.6846531184302733 |