大纲梳理
一 数据预处理/数据清洗
描述性统计
作用:查看数据分布特点,获取明显异常点
df.describe()
连续型变量
箱线图
频率分布直方图
离散型变量
熟练使用DataFrame.groupby().size(), agg(), apply() 函数
计算不同组别分布数量
缺失值处理
缺失值判断
df.info(), 基本统计
sum(df.isnull())
df.isnull().any() 含缺失值的列
df,loc[:,df.isnull().any()] 缺失值定位
常见处理方式
- 删除:缺失较多(70%)
- 简单填充: 均值,众数
- 作为单独类别处理:缺失有特殊意义,如透露样本信息等
问题:xgboost缺失值处理 - 专业算法预测:
问题: 什么时候有必要使用算法预测? - 重测数据
异常值处理
异常值判断:
统计学方法:
标准化残差 |( x - mean(x) ) / np.std(x) | >3,
前提(缺陷):满足正态分布
专业算法:(待完善)
非监督算法 (聚类)
处理方式
可以当作缺失值处理
连续变量离散化
问题:(1)连续变量离散化好处? (2)什么时候使用one-hot编码?
问题:模型复杂度与特征工程关系
类型转换
- 连续型: 归一化
问题:为什么要归一化?
梯度下降速率,支持向量机要求 - 离散变量:编码方式
2.1 无序离散变量(待完善):
one-hot编码 pd.get_dummies()
适用:无序变量,
特点:n取值返回n列
优点:给模型增加非线性特性
缺点:产生大量稀疏矩阵,计算耗内存,时间,除非算法本身有相关优化,如svm
bin count: 用不同取值出现的频数编码,再归一化
embedding:
2.2 有序离散变量:
因子化: pd.factorize(), LabelEncoder()
适用:有序变量
特点:n取值返回1列(0,1,2,…,n-1)
优点:只返回一列,节省内存,时间
局限性:取值必须有序
缺点:对于y而言,依然为线行不可分,简单模型易欠拟合,复杂模型容易过拟合
相关性矩阵
df.corr()
查看特征与标签相关性,初步预估模型结果
二 确定评估指标
确定最终模型适合的评估指标(优化模型的依据)
常见的模型评估指标:
分类
- 准确率(accuracy):
公式:(TP+TN)/(TP+TN+FP+FN) - 精度(precision,查准率):
公式: TP/(TP+FP) - 召回率(recall,查全率):
公式: TP/(TP+FN) - f1_score:
公式: 2/(1/precision +1/recall)
优点:综合考虑precision和recall - ROC曲线:
横轴: FPR 没病的人有多少判断为有病 FPR=FP/(FP+TN)
纵轴: TPR 有病的人有多少判断为有病 TPR=TP/(TP+FN)
auc越大,FPR越低,TPR越高
问题:(1)数据平衡性会影响auc吗?(2)什么样的roc图像最优? - PR曲线:
横轴:Recall
纵轴:Precision - 混淆矩阵
常用,最真实
回归
- MSE
- MAE
- R^2
问题:什么时候用什么指标?
三 特征构造
实践中理解
头脑风暴,尽可能多,初次尝试先不筛选特征
问题:如何确定特征数量信息足够解决任务?过拟合训练
特征组合
特征交叉
问题:特征组合和交叉区别?
四 训练集类别平衡性处理
数据不平衡的后果
Naive behavor,在训练集数据类别差异较大的情况下,模型容易将所有样本判断为占比较多的类别。
DataFrame.y.value_counts()
问题:
一定有影响吗?什么时候影响较大?
网上数据:10:1 引起注意,20:1必须处理
个人经验:
(1)与特征工程完善度有关;
(2)与网上数据稍有出入;
常见处理方式
-
数据重采样(均改变样本分布)
(1)过采样:随机过采样,合成少数类过采样技术(smote)
过采样运行速度慢
(2)欠采样:随机欠抽样,集成欠采样(EasyEnsemble)
欠采样运行速度快,但可能丢失关键信息(集成欠采样在全局看来不会丢失)
问题:
(1)常规机器学习假设?
(2)训练集,验证集,测试集数据分布一定要一致吗?
(吴恩达:机器学习笔记)
(3)什么是数据不匹配问题?如何解决?
(4)数据不匹配如何调参?
(5)如何判断训练集和测试集样本分布是否相同?对抗训练 -
代价敏感学习
(1)样本加权(模型训练中)
当小比例样本划分错误时候,给予更大的罚分
实践: 调节class_weight参数
(2)阈值移动(模型训练后)
计算出某标签概率后,大于标签先验概率才视作该标签
注意:比较重采样与代价敏感学习效果差距(O2O实践PPT)
五 模型训练
掌握常见模型推导(代价函数),理论,优缺点及应用场景
普通最小二乘法 vs lasso回归 vs 岭回归
问题:
(1)什么是正则化?
(2)l1正则化 vs l2正则化? 应用场景?
(3)梯度下降推导,问题,改进
逻辑回归
问题:
(1)为什么不用二次代价函数?
(2)交叉熵代价函数推导
(3)应用场景
(4)风控问题的对模型的优化
svm
问题:
(1)优缺点;
(2)适用场景
(3)推导
随机森林vs极端随机森林
问题:
(1)决策树相关:信息增益ID3,信息增益率C4.5,gini系数Cart,不同版本树区别;
(2)随机森林vs极端随机森林;
(3)如何理解bagging:“好而不同”,“方差”,“并行”,“投票”
(4)增大模型多样性方法:特征扰动,抽样扰动,输出扰动,输入参数扰动,融合多个扰动(随机森林)
adaBoost vs gbm vs xgboost
问题:
(1)推导
(2)理论思路:
adaboost:分错样本在下一个学习器加大权重;
gbm,xgboost:下一个学习器针对上一个学习器的预测參差进行预测(加法模型)
(3)xgboost vs gbm 重要
(4)bagging vs boosting
(5)泛化误差的分解
神经网络
问题:
(1)感知机模型;
(2)推导;
(3)代价函数的选择:
二次代价函数缺陷,交叉熵代价函数优点
(4)常见代价函数优缺点
分类模型
(1)线性模型:lasso回归,岭回归
问题:
l1,l2正则化?
各自适用场景
(2)广义线性模型:逻辑回归(sigmoid函数,交叉熵代价函数)
问题:
为什么选择sigmod函数?
为什么交叉熵函数?
推导交叉熵函数,梯度下降求解
优缺点,适用场景,如何引入给模型非线性
(2)支持向量机SVM
问题:
目标函数?
硬间隔,软间隔?
非线性可分数据如何处理?
常用核函数(线性核,高斯核,多项式核,拉普拉斯核)
优缺点,适用场景
(3)决策树
问题:
信息熵,条件熵
信息增益(互信息),信息增益比率,gini系数
ID3,C4.5,Cart树比较
缺失值处理
优缺点,适用场景
(4)KNN
(5)集成模型:
bagging:随机森林,极端随机森林
boosting:adaBoost,GBM,XGBoost,lightGBM
(6)神经网络
感知机模型
二次代价函数存在的问题
交叉熵代价函数
回归模型
(1)线性模型:普通最小二乘法线性回归,Lasso回归,岭回归
(2)支持向量机回归
(3)随机森林回归
(4)集成模型:bagging,boosting
六 调参
相关参数
线性模型:正则化程度C,学习率
支持向量机:
- 正则化参数:C, 越大表示分类犯错罚分越大,越容易过拟合
- 核函数:
线性核:C
高斯核:gamma,与C调节方向一致,调节相似函数宽度
多项式核:degree 阶数
决策树:
- 最大深度:max_depth
- 叶节点最小样本数:min_samples_leaf
- 最大特征数: max_features
- 内部节点再划分最小样本数:min_samples_split
KNN:
- 邻居数:K
- 邻近点权重:等权重/依据距离赋权
随机森林:
- 最大深度:
- 叶节点最小样本数
- 最大特征数:
- 抽样比例:
- 估计器数目:n_estimators
XGBoost:
1.boost参数: learning_rate, n_estimators
2.树参数: max_depth, min_class_weight, max_features
3. 其他参数:n_jobs, random_state
GBM
1.boost参数: learning_rate,n_estimators
2.树参数: max_depth,min_samples_leaf,max_features
3.其他参数: n_jobs,random_state
- 注意:XGBoost与GBDT调参比较特殊(多轮调参)
调参方法
网格搜索GridSearchCV:给定范围,遍历所有参数组合
优点:简单
方式:先确定大范围,再确定小范围
缺陷:慢,对于非凸代价函数,可能陷入局部最优解
随机搜索RandomizedSearchCV:
优点:快速
缺点:对于非凸代价函数,可能陷入局部最优解
贝叶斯优化:
思路:依据后验信息不断更新目标函数先验分布,预测最优参数可能出现的位置
优点:(1)迭代次数少,速度快; (2)对于非凸代价函数依然稳健
七 模型评估
泛化误差分解
期望泛化误差=偏差+方差+噪声
偏差:学习算法的性能(在数据充分前提下,算法预测输出与实际值偏离程度)
方差:数据是否充分(数据扰动的影响)
噪声:学习任务本身的难度(数据集标注与实际值偏离)
判断模型状态
学习曲线learning_curve
过拟合
表现:在训练集与验证集服从同一分布下,低trainSet error 高testSet error
解决:
(1)增加训练集数量;
(2)减少特征数目;
(3)调参:
正则化程度:增大模型正则化程度
模型参数:svm,树类,xgboost,神经网络
(4)早停法
(5)数据清洗:剔除异常值等
欠拟合
表现:高trainSet error 高testSet error
解决:
(1)增加特征数量,构造特征(组合,交叉);
(2)调参
数据不匹配
吴恩达:机器学习笔记
八 特征选择
特征选择常用方法:
过滤式filtering
特点:
(1)统计学方法过滤,衡量特征与输出的关系;
(2)特征选择后再进行训练,两者独立
方法:
a. 相关系数
b. 方差
c. 卡方检验
d. 互信息
在没有什么思路时,优先使用c.d.
包裹式wrapper
特点:训练模型后,以训练模型结果确定是否加入/减少该特征 (评估指标:AIC,BIC等)
方法:启发式搜索(递归消除特征法RFE)
嵌入式embeding
特点:模型训练结束后,同时也完成特征的选择,一般选择可以获取特征系数以及特征重要程度的算法
方法:
(1)基于L1,L2正则化选择(如逻辑回归,lasso回归,岭回归);
(2)树类模型:特征重要度,越接近根节点越重要;
九 重跑模型
根据选择的特征重跑,重新调參