1.加载数据,查看总体情况pandas。如果文件过大则用chunck分块
- head()
- info()
- describe() 注意缺失值
2.数据预处理
- 离群点 根据数据说明判断是否要去除
- 数据是否符合正态分布。如果用回归模型则考虑转换
- 数据之间关联性 使用corr
- 如果数据有id这样的自增数据,删除 。抽取label字段
3.特征工程
-
丢失值
- 填充0 或者None看数据说明
- Counter后如果分布很少,缺失的非常多考虑去除该列
- 填充:中位数 平均数 众数(考虑使用groupby对相似列分组后进行填充。
-
编码
- one-hot 编码
- 数字编码 LabelEncoder
- 增加新的特征 组合特征等
4.建立模型准备
-
训练集标准化 fit_transform(train) transform(test)
-
kfold 分组交叉验证
-
参数网格搜索
-
评价函数定义
-
回归mse mae
-
分类 混淆矩阵
- 精度(查准率) 检测出来的正样本有多少是真的正样本
- 召回率 (查全率)所有的正样本有多少被检测到了
- F1score (1/(1/精度 + 1/召回)) 综合精度和召回的缺点
- ROC 召回和负实例曲线 AUC ROC的面积 越大越好
这里可以将所有的样本准确率从高到底排序,那么精度越高就是顶端的数据。如果阈值设置很高精度是高了。但是丢掉了很多正样本,所以调低阈值可以让召回增大,但是这样势必会增很多错误的,精度下降。所以f1score或roc目的是使得准确率的排序质量越来越高。
-
5.建立模型
-
岭回归 损失函数+l2范式也就是平方 缩小不重要特征 但不会消除
-
Lasso回归 损失函数+l1倾向消除不重要的特征 一次项容易达到拐点
-
ElasticNet弹性网络 综合岭回归和lasso
-
SVM
- SVR 回归
- SVC 分类
- 非线性SVM可以添加特征 使用核技巧对输入x增加变换 例如x^2等
min1/2 * w^2 t(wx+b)>=1 使用拉格朗日乘子法
使用SMO求解 基本思想是限定两个变量求取
svm损失函数 类似hinge函数 最小化损失函数 使得每个点都在边界两边。
-
决策树
- ID3信息增益
- 信息增益率
- CART jini系数 进行的是二值划分 gini-0说明该分支是纯的
-
bagging 采样放回 pasting采样不放回 产生多个分类器预测再汇总结果
-
随机森林 随机取样本+随机取特征
-
GBRT梯度提升树(残差)GBDT梯度决策树 样本-tree1->–残差–>tree2
-
Adaboost 不同于GBRT ,这里是对分类错的样本调整权重 样本-tree1->–调整权重–>tree2
-
XGBoost 样本->tree1->根据一个复杂的公式->tree2->…
f = rT+1/2 * d* sum(w^2) r叶子个数 w叶子权重 即分枝时考虑树的复杂度
-
Lightbgm 处理大数据集更具优势
-
catboost 自动处理类别变量