第二次面试总结

主题: 特征工程

1.缺失值

  • 删除

如果某一列缺失非常严重(超过80%)可以直接删除该列,或者数据量足够大而缺失不多的情况下删除该行。

  • 插补

缺失值占比在可接受的范围以内,可以插补,常见①用均值/众数/中位数插补(如果偏态最好用众数或者中位数插补);②模型插值(例如knn 利用其它变量进行相似插补,但可能会引起变量自相关问题)

  • 直接离散化

即离散特征,把缺失当做一个新的category。

  • random

如果缺失特别少(比如1%)可以随机生成;或者假定该列服从某种分布,可以按照分布随机生成。

2.归一化

2.1 常用归一化方法

  • (真正的归一化)减去最小值,除以极差 xminmaxmin\frac{x - min}{max - min}
  • (标准化,有时被当做归一化)减掉均值,除以标准差 xμσ\frac{x - \mu}{\sigma}

2.2 归一化的作用

  • 涉及到有关距离的算法时,比如 knn/svm,使不同量纲的特征处于同一数值量级,具有可比性,以免模型过分关注方差大的特征。
  • 影响迭代算法收敛,不进行归一化学习率比较难把握,而且算法可能收敛很慢,比如逻辑回归。

2.3 不需要归一化

  • 树模型。因为树模型寻找的是最优分割点,而归一化前后分位点不变,不会影响树模型的结构
  • 有解析解,不涉及算距离或者梯度迭代时候,比如求逆计算最小二乘估计。

3. 连续变量离散化 / 数据分箱

3.1 连续变量离散化的方法

  • 无监督:按照实际意义、等宽、分位点
  • 有监督:(联系回归树)给定箱子数,最小化分割后的平方误差——找到最优分割点

3.2 离散化的原因

合理性在于小范围连续数据的差别没有太大意义,可以看做一类,好处是:

  • 避免异常点,模型更加 robust,也算是消除了量纲影响。
  • 对于线性模型来说(比如逻辑回归),如果特征和y不是线性的关系的话,进行离散化相当于为模型引入了非线性,加大拟合
  • 离散变量的计算相对于连续变量更快
  • 缺失值处理时,可以把缺失当做一个新的category

3.3 问题

  • 显而易见,丢失部分信息。
  • 增加了特征的个数(整体上降低了bias,增大了variance)(这一点可以结合正则化解决)

4.异常值

4.1 异常值识别

  • 某个特征(一元):3sigma原则、箱线图
  • (多元)基于距离:马氏距离/库克距离,看看与中心的距离远近
  • 线性模型,具有大残差的数据可能是异常值
  • 主成分分析,定义outlier scores衡量“原数据与映射回来的数据的差别”(考虑不同主成分所需乘以的权重,第一主成分所代表的数据中正常数据更多,所以权重越小;当j取到最后一维的主成分下,我们认为权重最高,达到1)
  • isolation forest
    基于二叉树,单颗树每次随机选择特征+分割点,离群数据很容易被划分到最终子节点。用节点深度来衡量数据异常的可能性。再构建多棵树消除随机的影响。
  • one class svm
    训练出一个最小的超球面把训练集把包起来,判断一个新的数据点落在内外。

4.2 异常值处理

  • 删除观察值
  • 分箱/离散化
  • 变换(比如右偏 Log变换)
  • 估算(类似缺失值处理,用分位点或者模型比如knn)

5. 偏态

  • 识别:偏态系数、画图比如直方图
  • 问题:线性模型(比如逻辑回归)不符合分布假设
  • 处理:boxcox变换(常见的比如对数变换、平方根)

6. 降维 & 特征选择

  • 降维/投影:PCA
  • 特征选择:系数显著性、随机森林变量重要性、向前向后选择、正则项

主题:算法

7. SVM原理

相关问题见教材 & 链接

主题:代码

10.python 和 r 常用的预处理的函数

python pandas:

  • df.loc / iloc
  • df.duplicated
  • df.isnull().sum(axis=0), df.dropna
  • pd.cut
  • value_counts / sort

r baseR

  • na.omit / unique
  • table / arrange / apply&aggregate...
  • tidyr pivot_longer group_by+mutate

11.sql 常用的函数

  • 聚合函数 + groupby
  • 窗口函数 rank xx over(partitions by <用于分组的列名> order by <用于排序的列名>)
  • 字符串、日期、数值函数

主题:其他

12.给你一些数据,你的处理步骤

  1. 定义问题
  2. 理解数据:特征、清洗(预处理)、选择(相关性)
  3. 选择算法 + 调参
  4. 评估模型