1、如何解决类别不平衡问题
从数据角度
-
主动获取:获取更多的少量样本数据
针对少量样本数据,可以尽可能去扩大这些少量样本的数据集,或者尽可能去增加他们特有的特征来丰富数据的多样性。譬如,如果是一个情感分析项目,在分析数据比例时发现负样本(消极情感)的样本数量较少,那么我们可以尽可能在网站中搜集更多的负样本数量。
-
算法采样:上采样、下采样、生成合成数据
ADASYN采样方法:
基本思想是根据学习难度的不同,对不同的少数类的样本使用加权分布。其中,更难学习的少数类的样本比那些更容易学习的少数类的样本要产生更多的合成数据。因此,ADASYN方法通过以下两种方式改善了数据分布的学习:(1)减少由于类别不平衡带来的偏差;(2)自适应地将分类决策边界转移到困难的例子。
SMOTE采样方法:
从少数类创建新的合成点,以增加其基数。但是SMOTE算法也有一定的局限性。
具体有两项,一是在近邻选择时,存在一定的盲目性。在算法执行过程中,需要确定K值,即选择几个近邻样本,这个需要根据具体的实验数据和实验人自己解决。二是该算法无法克服非平衡数据集的数据分布问题,容易产生分布边缘化的问题。由于负类样本的分布决定了其可选择的近邻,如果一个负类样本处在负类样本的边缘,则由此负类样本和近邻样本产生的样本也会处在边缘,从而无法确定正负类的分类边界。
从评价指标角度
谨慎选择AUC作为评价指标:对于数据极端不平衡时,可以观察观察不同算法在同一份数据下的训练结果的precision和recall,这样做有两个好处,一是可以了解不同算法对于数据的敏感程度,二是可以明确采取哪种评价指标更合适。针对机器学习中的数据不平衡问题,建议更多PR(Precision-Recall曲线),而非ROC曲线,具体原因画图即可得知,如果采用ROC曲线来作为评价指标,很容易因为AUC值高而忽略实际对少两样本的效果其实并不理想的情况。
不要只看Accuracy:Accuracy可以说是最模糊的一个指标了,因为这个指标高可能压根就不能代表业务的效果好,在实际生产中,我们可能更关注precision/recall/mAP等具体的指标,具体侧重那个指标,得结合实际情况看。
从算法角度
选择对数据倾斜相对不敏感的算法。如树模型等。
集成学习(Ensemble集成算法)。首先从多数类中独立随机抽取出若干子集,将每个子集与少数类数据联合起来训练生成多个基分类器,再加权组成新的分类器,如加法模型、Adaboost、随机森林等。
将任务转换成异常检测问题。譬如有这样一个项目,需要从高压线的航拍图片中,将松动的螺丝/零件判断为待检测站点,即负样本,其他作为正样本,这样来看,数据倾斜是非常严重的,而且在图像质量一般的情况下小物体检测的难度较大,所以不如将其转换为无监督的异常检测算法,不用过多的去考虑将数据转换为平衡问题来解决。
2、数据不符合正态分布怎么办?
可以做box-cox变换
如何确定λ呢?假设经过转换后的因变量就是服从正态分布的,然后画出关于λ的似然函数,似然函数值最大的时候,λ的取值就是这里需要确定的值。
3、K-Means算法原理及改进,遇到异常值怎么办?评估算法的指标有哪些?
-
k-means原理
在给定K值和K个初始类簇中心点的情况下,把每个点(亦即数据记录)分到离其最近的类簇中心点所代表的类簇中,所有点分配完毕之后,根据一个类簇内的所有点重新计算该类簇的中心点(取平均值),然后再迭代的进行分配点和更新类簇中心点的步骤,直至类簇中心点的变化很小,或者达到指定的迭代次数。 -
改进
a. K-means++:假设已经选取了n个初始聚类中心(0<n<K),则在选取第n+1个聚类中心时:距离当前n个聚类中心越远的点会有更高的概率被选为第n+1个聚类中心。在选取第一个聚类中心(n=1)时同样通过随机的方法。从而让K个聚类中心离得尽可能远。
b. mini batch kmeans:每次取一小部分数据集对簇中心进行更新,加快收敛速度
c. ISODATA:对于难以确定k的时候,使用该方法。思路是当簇内样本数目小于阈值或者两个簇的中心点距离小于阈值,则进行融合;当簇内标准差大于阈值或者簇内样本数目超过最小样本数目的两倍时,进行拆分
d. kernel kmeans:kmeans用欧氏距离计算相似度,也可以使用kernel映射到高维空间再聚类 -
遇到异常值
a. 有条件的话使用密度聚类先聚类,剔除异常值
b. 多元高斯分布异常点检测
c. 使用PCA或自动编码机进行异常点检测:使用降维后的维度作为新的特征空间,其降维结果可以认为剔除了异常值的影响(因为过程是保留使投影后方差最大的投影方向)
d. isolation forest:基本思路是建立树模型,一个节点所在的树深度越低,说明将其从样本空间划分出去越容易,因此越可能是异常值。 -
评估聚类算法的指标
a. 外部法(基于有标注):Jaccard系数、FM指数、Rand指数
b. 内部法(无标注):DB指数、Dunn指数
c. 此外还要考虑到算法的时间空间复杂度、聚类稳定性等
4、GBDT(梯度提升树)
GBDT是提升树的一种,与提升树一样,采用前向优化算法,即从前往后,不断建立基模型来优化目标目标函数。每次训练一个新的基模型时,都是去拟合目标函数对于当前模型(所有训练好的基模型加和)的梯度的负数。若目标函数为平方损失函数,则负梯度即为真实值与当前拟合值的残差。为什么不直接去拟合残差呢而是去拟合负梯度呢?这是因为平方损失函数对异常值比较敏感,需要用到一些更加稳健的损失函数,拟合负梯度从而让目标函数沿着梯度相反的方向下降。
5、余弦距离与欧式距离求相似度的差别
- 欧氏距离能够体现个体数值特征的绝对差异,所以更多的用于需要从维度的数值大小中体现差异的分析,如使用用户行为指标分析、用户价值的相似度或差异。余弦距离更多的是从方向上区分差异,而对绝对的数值不敏感,更多的用于使用用户对内容评分来区分兴趣的相似度和差异,同时修正了用户间可能存在的度量标准不统一的问题(因为余弦距离对绝对数值不敏感)。
- 总体来说,欧氏距离体现数值上的绝对差异,而余弦距离体现方向上的相对差异。
①例如,统计两部剧的用户观看行为,用户A的观看向量为(0,1),用户B为(1,0);此时二者的余弦距很大,而欧氏距离很小;我们分析两个用户对于不同视频的偏好,更关注相对差异,显然应当使用余弦距离。
②而当我们分析用户活跃度,以登陆次数(单位:次)和平均观看时长(单:分钟)作为特征时,余弦距离会认为(1,10)、(10,100)两个用户距离很近;但显然这两个用户活跃度是有着极大差异的,此时我们更关注数值绝对差异,应当使用欧氏距离。
6、判别模型和生成模型的区别?
7、异常检测方法
1、基于模型的方法
单维情况下:
- 3σ法则
- 箱线图
- Grubbs test
高维情况下:
- 多元高斯分布
2、基于距离的方法
- k最近邻
3、基于聚类的方法
- 密度聚类
4、基于划分的方法
- 孤立森林
5、基于线性的方法
- PCA
6、基于非线性的方法
- 自编码器
7、基于时间序列的方法
- 环比
- 同比
- 同比振幅
与其用x(t)的值,不如用x(t) – x(t-1)的值,也就是把绝对值变成变化速度。可以直接利用这个速度值,也可以是 x(t) – x(t-1) 再除以 x(t-1),也就是一个速度相对于绝对值的比率。比如t时刻的在线900人,t-1时刻的在线是1000人,那么可以计算出掉线人数是10%。这个掉线比率在历史同时刻是高还是低?那么就和前面一样处理了。
优点是比绝对值要敏感,规避了业务曲线内在的线性趋势;缺点是容易在低峰期误警。
- 动态阈值
参考过去一段时间内的均值、最大值以及最小值
8、特征选择的方法
- 多元线性回归中:前向搜索、后向搜索、逐步回归
- 过滤:计算特征与标签之间的卡方、互信息、相关系数(只能识别线性关系),过滤掉取值较低的特征。或者使用树模型建模,通过树模型的importance进行选择
- 包裹:把最终将要使用的学习器的性能作为特征子集的评价标准,如LVW
- 嵌入法:L1正则化可以将不重要的特征降到0、树模型抽取特征
- 降维:PCA、LDA等
9、树模型降低过拟合的方法
- 增加数据
- 特征选择、特征降维
- bagging
- 正则项
- early stopping
- 剪枝
- 控制树深
- subsampe & subfeature
9、PCA与LDA的异同点
- 相同点
- 两者均可以对数据进行降维
- 两者在降维时均使用了矩阵特征分解的思想
- 两者都假设数据符合高斯分布
独立一定不相关,不相关不一定独立,“只有”高斯的时候,两者才等价。
- 不同点
- LDA是有监督的降维方法,而PCA是无监督的降维方法
- LDA降维最多降到类别数k-1(k为类别数)的维数,而PCA没有这个限制
- LDA除了可以用于降维,还可以用于分类
- LDA选择分类性能最好的投影方向,而PCA选择样本点投影具有最大方差的方向