5_机器学习

505 阅读9分钟

机器学习

主要有三个任务:分类、回归、聚类

2类算法:有监督、无监督

EDA

数据分析包括原始数据分析,构建tablur数据后的数据分析。
一般根据原始数据,构建 features-label 格式的数据后,再进行特征值分析。
做EDA要敢于假设,然后去找寻数据特征

1. 数据分布: label值的分布,如果不满足正态就进行特征转换
2. 异常值统计: 删除或填充,数据范围不合理处理,单位异常等
3. 缺失值统计: 删除或填充,除了nan数据,比如年龄=0,这些也要看。可能缺失值用0代替。
4. 正态性检验:如1,特征检验,如果不满足,考虑做特征转换,特征组合或者删除
5. 相关性分析:和label相关性不大的删除或者转换,特征与特征之间相关性高的考虑做删除或者降维
6. 报表记录


一般根据EDA后,就知道要做哪些特征工程。
挺多再补充一些 类别编码,归一化等操作就行。 

如果是时序预测,可能特征工程比较复杂一点,要做一些时序特征和交互特征
  1. 查看整体数据缺失值,特征类型,数据量大小情况

  2. 单变量分布分析(直方图),是否服从正态性分布(QQ图),用对数,指数,boxcox变换

    • 为什么要正态分布:
      1. 正态分布的信息熵最大,是最没有规律的分布,蕴含更多信息
      2. 线性回归中,用最小二乘法最小偏差进行无偏估计,因此理论上误差是白噪声,满足正态分布。而在给的x的情况下,y也是满足正态分布的。
      3. 中心极限定理:样本取值足够大时,满足正态分布,所以就有对变量的正态分布假设
  3. 单变量异常值统计分析(3sigmoid,模型预测检测),删除或者填充,(删除都是删除整个样本)

    • 模型预测是先用X,y去训练模型,然后用X预测y', 然后设置阈值看y和y'的差别,来区分异常值
  4. 单变量缺失值统计分析,删除或者填充,(填充可以用均值,中值,模型预测)

    • 均值代表一组数据平均水平是多少,中值代表一组数据一般的水平是多少,根据业务选择
  5. 相关性分析:连续和连续直接相关系数,连续和类别看类别对应的连续变量分布(小提琴图),类别和类别用卡方检验或者双向表

    • |r|>0.95 存在显著性相关;|r|≥0.8 高度相关;0.5≤|r|<0.8 中度相关;0.3≤|r|<0.5 低度相关;
    • 多重共线性分析
    变量之间有相关性,且很大,一般回归是希望自变量是线性无关的。
    如果多个有关,多重共线性问题就是指一个解释变量的变化引起另一个解释变量地变化。可能造成以下影响:
    1. 即使预测变量和响应之间存在显著关系,系数也可能看起来并不显著。
    2. 高度相关的预测变量的系数在样本之间差异很大。
    3. 从模型中去除任何高度相关的项都将大幅影响其他高度相关项的估计系数。
    
    衡量:
    - 方差膨胀因子 (VIF)。VIF 用于在您的预测变量相关时,度量估计回归系数的方差增加的幅度。如果所有 VIF 都为 1,则不存在多重共线性,但如果有些 VIF 大于 1,则预测变量为相关。VIF 大于 5 时,该项的回归系数的估计结果不理想。VIF>10就很差
    
    解决:
    1. 删除多余特征
    2. PCA降维消除
    3. 数据过少,找足够多数据
    
  6. 变量分箱分组分析

  7. 查看train和test数据集分布是否一致

  8. label分布看一看

特征工程

数据清洗

- 统一单位,属性判断
- 百分数,国外计数形式,类别特征转换

数据采样

- 正样本>负样本,数据量大,下采样,欠采样,减少正样本使其等于负样本,减少数据可能欠拟合
	也可以用这种方式训练多个模型取平均值。
- 正样本>负样本, 量不大,上采样,过采样,增加负样本使其等于正样本,可能过拟合
- SMOTE:简单复制容易过拟合,SMOTE根据距离计算,使生成的样本更合理
1. 计算少量类别样本x与所有样本距离
2. 设定采样率,
3. 生成新样本

数据转换

- 归一化和标准化
	- 归一化是把数据缩放到某一个区间,比如(0,1), `[-1,1]`
    - 标准化是把数据缩放到服从标准正态分布,μ=0,σ=1
    - 数据较多异常值或者噪声,用标准化减少异常影响。数据稳定,对输出结果有范围要求,用郭艺华。
    - 树模型不需要,但是线性模型,SVR,神经网络都需要,所以特征工程一起做了,方便后续多模型融合
- sklearn里面的转换
	- StandardScaler, 统一量纲,标准化,把特征值转为服从标准正态分布,z-score公式,常用与基于正态分布的算法,比如回归
	- MinMaxScaler,统一量纲,把特征值转化为`[0,1]`之间,提升模型收敛速度,提升模型精度,常见用于神经网络
    ```
    X_std = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0))
	X_scaled = X_std * (max - min) + min
    ```
	- Normalizer,正则化,把特征值转为单位向量,其目的在于样本向量在点乘运算或其他核函数计算相似性时,拥有统一的标准,常见用于文本分类和聚类、logistic回归中也会使用,有效防止过拟合;每个处理后样本的p-范数(l1-norm,l2-norm)等于1。 默认为L2正则。也是归一化的一种
	- Binarizer,定量特征二值化
	- OneHotEncoder,定性特征亚编码
	- Imputer,缺失值处理
	- PolynomialFeatures,多项式数据转换

连续特征和离散特征

- 连续特征直接用或者分箱
- 离线特征二值化或者哑变量或者onehot或者类别编码
(树模型一般类别编码即可)

异常值缺失值处理

1. 删除
2. 均值,中值,线性填充

特征选择与降维

- 选择:尽量选特征发散的,包含信息多的,符合正态分布的
1. 过滤法(filter):根据阈值选择,可以是方差的阈值,相关系数阈值等
2. 包装法(wrapper):通过目标函数,每次在特征子集中选择优秀特征,需要启发式搜索来加速
3. 嵌入法(embedded):通过学习期自身选择特征,正则化使每个特征系数变化(Lasso),决策树,深度学习
(树模型一般就不用特征选择了)
4. Null importance:

- 删除训练集和测试集分布不一致的特征,连续型看分布,离散型也可以看分布,也可以看出现比例
1. KS检验。看两个数据的累积分布曲线的距离
2. KL散度。度量两个分布的相似程度
3. KDE核密度估计,看分布曲线

- 降维:
1. PCA: 主成分分析,无监督
2. LDA: 线性判别,fisher线性判别,有监督

模型训练

  • 模型
    1. 线性模型
    2. K近邻模型
    3. SVM模型
    4. 决策树模型
    5. 集成模型

模型验证

欠拟合和过拟合

正则化

评估指标

评估 1. 回归 - mae:直观衡量真实值和预测值的误差,平均绝对误差 - mse:均方误差,带了平方,对异常值比较敏感 - rmse:均方根误差,mse开根号,就有点类似于mae了,使误差数据和衡量数据在一个级别,也是衡量上真实和预测的误差 - mape:相对误差的占比 (y-y')/y - R方:衡量和瞎猜的差距,主要用来比较不同模型的效果 2. 分类: zhuanlan.zhihu.com/p/43405406

    ```
    P和R是trade-off
    召回率表示对要预测的事物能预测对准,比如地震,宁愿发生100次假警报也要把10次真地震预测准。
    精确率表示模型预测为真的事物中是准确的,比如给一些罪犯定罪,那么就希望模型输出的结果是准确的,罪名是实际成立的。哪怕召回低一点,即有罪的没有预测出来,也要使预测出来是犯法的确实有罪
    ```
  二分类:
  - acc:准确率, 即预测对了的个数占比,
  - precision:精确率,预测的正样本中,有多少是预测对的
  - recall:召回率:实际的正样本中,有多少是预测正确的(分子只看正样本P预测对的T- F1-score:是精确率P和召回率R的调回平均
  - roc曲线
  	纵坐标是 TPR, 横坐标是 FPR
    不受 imbalanced data 影响,比较客观。前面的指标1是要设定阈值来分类,2是受不平衡影响
    越靠左上角越好(0,1),即FPR=0,TPR=1
  - auc: AUC就是ROC曲线下的面积,衡量学习器优劣的一种性能指标
  - logloss: 对数损失函数,衡量预测值和真实概率分布的差异,越小越好
  
  多分类:
  - macro-f1
  - micro-f1,
  

模型调参,网格搜索

- 该部分用于寻找最优参数
- 数据集划分:train,valid,test
```
注意这里的test并不是线上比赛的测试集,而是从训练集里面划分出来做测试的。
比如data用train_test_split划分成x_train和x_valid。
这里x_valid就是测试集。
然后用x_train去训练模型,不管是gridsearch还是kfold,都是从x_train划分出训练集和验证集来评估模型或者选择参数
```

交叉验证

- 该部分用户评估最优参数下当前模型线下结果的指标

特征优化

  1. 合成特征:根据业务经验,将特征相乘,相加,相除, 线性组合
  2. 数值特征:多项式特征,比例,绝对值,两个特征的最大最小
  3. 类别特征与数值特征:根据类别特征聚合连续特征,得到统计特征
  4. 决策树创建:每个样本经过每一颗树映射后的index
  5. 特征分桶

模型融合

  • 模型层面
  1. bagging
  2. boosting
  • 数据层面
  1. voting
  2. average
  3. blending
    • 70%进行train和valid训练,得到的结果再进行训练
  4. stacking
    • 每个模型在已经调好参数的情况下,分别进行5折训练
    • 每一折数据(4折)训练一个模型,然后对valid(1折)预测,保存记录结果,一共有5份valid的预测结果。合并起来就是 n_train x 1 的数据,m个模型就有 n_train x m 数据。作为最后一个模型的训练集输入特征,label和原始数据label一致进行训练
    • 每一折数据训练一个模型,对test(所有测试数据)预测得到 n_test x 1,m个模型就是 n_test x m 数据,作为最后一个模型测试集的输入特征,进行测试预测

比赛和工业落地区别

  1. 比赛有一个最优值,工业不一定有
  2. 比赛可以根据多次提交构建一个线下验证集,工业只能用交叉验证保证任何场景下模型预测稳定(除非时间序列类,都可以拿相似时间段的数据作为验证集)