1. 数据处理的主要操作
映射与收集数据 :我们获得数据后需要对数据的每一列都定义属性,这样才方便我们接下来的数据处理。
缩放大型数据:对于使用数据不一定要全部使用,我们应该根据情况选择我们需要的数据,或者说根据我们的需求增加数据。
处理噪声与错误:主要分为两种问题,内部错误:由于模型设计问题产生的错误;外部错误:随机错误与噪声。
处理未知属性:我们需要关注未知的源 1. 是否是被遗忘 2. 某些属性是不恰当的 3. 属性实不恰当的4. 数据库的设计者不关心的变量。
数值离散化: 有些算法只能使用分类数据,那么我们需要将连续变量转化为离散变量。
数值连续化:有些算法只能处理连续变量,因此我么你需要将分类变量转化为连续变量,我们采用哑变量 的手法或者 WOE的手段来实现。
属性选择:有时数据维数过多,存在非常强的相关性,不利于模型拟合,因此我们使用属性选择法筛检数据。
属性构造和变换:如果属性过少或者原本数据不太好用,我们可以对数据进行构造,形成新的数据来进行模型分析。
数据选择与构造:很多时候数据存在大量的干扰和不均衡的数据,我们需要对数据进行筛选。
2. 离散化与连续化
1)离散化的主要方法
2.1 分箱法
通常有等宽法与等频法,一个是按照边界划分,一个是按照元素数量划分。
2.2 基于熵的离散化
类似于决策树的方法,计算熵值或者基尼系数,划分数据集。
2.3 卡方分布法
通过卡方假设检验,通过计算每一个区间的显著性来判断两个区间是否可以合并。 判断两个相邻区间的独立性。具体步骤如下所示:
2.3.1 将原始数据按照递排列。
2.3.2 确定初始区间,是的每个特征在一个独立区间内。
2.3.3 合并区间。使用卡方分布,判断两个相邻区间的独立性,如果$\\chi_2 $ 的结果小于阈值,那么就合并。
2)连续化的主要方法
2.1 虚拟变量的选用
虚拟变量的使用主要是因为在逻辑回归中,分类变量不具有特别的代表意义,因此使用虚拟变量,将分类变量转化为可以使用逻辑斯特回归的变量。
大致方法就是将我们的分类变量中的每一类形成一个样本,使用这个样本进行训练回归,得到的回归参数是 这个分类变量中两个类别的对于y的差异!
2.2 WOE方法的使用
这个方法更加直接 直接上公式:
$WOE_i= In \\frac{B_i/B_t}{G_i/G_t}$
其中 B表示bad,G表示good,$B_i$表示第i个bad类,$B_t$表示B的总数,同理,$G_i$表示第i个good的数量,$G_t$表示good的总数。
具体详见 <<精通数据科学>> ,这个作者也写了 博客 https://zhuanlan.zhihu.com/p/39361047 。大家可以多参考参考。
3. 特征提取和构造
我们使用特征提取和构造的原因
1. 可以进行一次,计算开销比模型训练小。
2. 是离线进行的,因此可以尝试很多算法
特征提取的主要方法:
3.1. PCA主成分分析法。
PCA的方法大家肯定不会陌生,使用PCA,找出属性中的特征值,并选出特征值的最大的前几个,为什么我们可以这么做呢。如果大家学习过矩阵分析便很容易知道,PCA是求出矩阵的谱,本质上是将一个矩阵做一次线性变化,换句话将,就是对当前的标准正交基变成另外一组标准正交基,这个变化是可以让组内方差最大,也就是说,PCA是将原来的属性做出一组线性变化,成为新的一个属性。
3.2. 奇异值分解法
奇异值分解和PCA非常相似,其实就是一个矩阵变换,将一个矩阵变成3个矩阵的乘积 $A=U \\Sigma D $,和PCA非常相似,但是值得注意的是,PCA主要是为了保持数据之间的差异,SVD主要是尽可能还原矩阵,但是,他们的本质都是矩阵的谱。PCA主要用于数据可视化,和降低数据中的随机因素的干扰,而奇异值主要用于生成更高效的向量来表示数据。
3.3. Fisher Score 分析法
又称LDA判别法,在使用PCA方法进行降维的基础上考虑到训练样本的类间信息。FLD的基本原理就是找到一个最合适的投影轴,使各类样本在该轴上投影之间的距离尽可能远,而每一类内的样本的投影尽可能紧凑,从而使分类效果达到最佳,即在最大化类间距离的同时最小化类内距离。所以主要思想就是将系统分为类内散度和类间散度两类判别,就是希望寻找的投影方向使投影以后两类尽可能分开,而各类内部又尽可能聚集。公式如下
$F(x^i)=\\frac{\\sum_{j=0}^{numC}n_j(\\mu_{j}^i-\\mu^i)^2}{\\sum_{j=0}^{numC}n_j(\\sigma_{j}^i )^2}$
其中,$x_i$表示第i个属性,$n_j$表示标签列中,每一个属性都有不同的类,取值为第j个类的对应的行数,$(\\sigma_j^{i})^2 $表示第i个属性中第j个类的集合在第i个属性上的方差。$\\mu_j^{i}$表示第i列第j个属性的集合的均值,$\\mu^i$表示第j个列的均值。
通过计算,可以得到得分前几个得分最高的属性。
3.4. 基尼系数选择法
基尼系数选择法 和熵值判别法大多类似,求出每一列的基尼系数,然后选取其中基尼系数较小,或者熵值较大的属性。
3.5.T检验法与卡方分布判别法
t检验法和卡方检验法非常相似,主要是通过t分布或者卡方分布,进行假设检验,比较两个属性之间是否显著。下面为t分布检验法(Welch\'s T-test):
$t=\\frac{\\bar{x_1}-\\bar{x_2} }{\\sqrt{\\frac{S_{1}^2}{N_1}+\\frac{S_{2}^2}{N_2}}}$
其中$\\bar{x_1},S_1^2,N_1$是第一个样本的均值,样本方差,和样本大小。同理其余三个变量。
3.6.线性前向选择法
ToDo
3.7.基于系数多项式回归的属性选择法
ToDo
这两个算法比较难,我还没有完全搞懂,也不敢随意乱写,这里先放着,等我搞懂了再来补充。
4. 数据选择与构造
从数据角度,通常会遇到两种问题,第一种是数据不平衡问题,第二种就是数据缺失问题。以下内容主要围绕数据不平衡问题。
我们必须重视这个问题,因为不均衡的数据会带来我们模型的错误,会让我们模型误判真实的结果,并且稍不注意我们就会陷入准确率陷阱,表现出准确率高但是模型效果不好的假象,使用ROC曲线则可以显示出数据不均衡的问题,但是要解决的话,通常有以下方法:
4.1.修改类别权重
这个方法是最常用也是最简单的方法,,将不重要的数据的权重降低,将重要的数据的权重升高,权重的改变主要是在损失函数中加入。
4.2.RUS(Random Under-sampling随机下采样)
这个方法也是常用方法之一,我们只要将多余的数据部分随机删除,就可以达到我们需要的要求。
4.3.CNN(Condense的Nearest Neighbor Decision Rule)
CNN是对NN规则的改进。其实使用的也是最邻近的思想,具体算法如下:
1) 两个数据容器,grabbag 和store
2)先选第一个数据放入grabbag中,取第二个数据,如果符合NN规则,那么放入grabbag,否则放入store。
3)遍历一遍后如果这一轮没有一个放入grabbag,那么循环结束
4)重复步骤2,3直到grabbag中没有数据。
4.4.SMOTE(Synthetic Minority Over-sampling Technique)
一般来说,我们使用抽样,并不能很好的满足我么你的需求,更多的时候我们要生成一些数据,一般我们可以用我们重要的数据和距离他近的不重要的数据,生成原本不存在的样本$c=(a+b)*\\gamma$ 其中$\\gamma$ 为一个随机数,将a,b各个维度相加然后乘以一个随机数,便是我们需要的数据。
5.OSS(One side selection)
这个算法就比较高大上了,主要思路如下所示:
1) S为初始训练集
2) 最初的时候,C包含了S中所有的少数类,并且随机挑选了一个多数类实例
3)使用C中的实例,使用1-NN规则最邻近方法对S进行预测,将预测标签与原始标签对比,将未能正确预测的标签放入C
4) 最终将所有处于C中的所有符合Tomek links 的多数类全部移走,而少数类留下,最终就是我们需要的标签。
Tomek links: 取两个x,y,这两个具有不同标签,x,y的距离为$delta(x,y),如果不存在实例$z$,是的$delta(x,z)<delta(x,y)$或者$delta(y,z)<delta(x,y)$我们就把 $(x,y)$称为Tomek links。
5. 缺失值的处理
缺失值其实是一个很难处理的问题,因为缺失的因素实在是太多了,因此,我们只有判断好数据缺失的原因,才能更好的处理缺失值。
5.1 缺失值的机制
实际上数据缺失通常有三种性质:
1)数据完全随机缺失:这就意味着数据缺失与其他值完全无关
2)数据随机缺失:缺失仅仅依赖于其他变量
3)非随机缺失:$P(y缺失|Y,X)=P(Y缺失|X)
5.2 数据缺失如何处理
我们必须解决一下三个问题:
1) 如何比较两个具有不同数目的缺失值样本
2)在划分数据集是未知数据该如何处理
3) 在分类阶段,样本具有缺失值该如何处理
那么我们首先可以抛弃数据,但这样做在有大量数据缺失的情况下是不能容忍的,
第二种情况便是使用可以处理缺失数据的模型:决策树,在决策树,中处理缺失数据主要有两个方面。决策树建立环节和决策树预测环节
1)决策树建立环节:这个地方主要参照了<<数据挖掘基础教程>>这本书,大多数书都没有提到过这个问题。在决策树建立环节,我们通常使用基尼系数或者熵值来确定分叉,推广来讲就是我们的增益,XGBOOST也不例外,熵值的计算是通过计算每一类的熵。这是如果我么你具有一个缺失的数据,我们恰好使用其缺失的参数,我我么你可以先对未缺失的数据进行分类,然后将这个缺少数据的依次放入每个类中,当然,此时我们需要给我们的分类加上权重。通常来说,如果数据不具有缺失,那么系数为1,否则系数为这一类占总树的百分数。
$\\omega_new=\\omega_old*P(T_i)$
$P(T_i)=\\frac{c_i}{\\sum_{i=1}^{numC}c_i}$
其中$c_i$为当前列的第i个属性的列数,$numC$为当前列的总的属性个数。
通过这种加入权重的方法,最后我们得出的树的结果将以百分数表示,通常表示为具有多少可能性会被分到当前类。
2)决策树预测环节: 如果重要的数据缺失,那么此时决策树可以使用两个节点都走的策略,当然,这里两个节点都走是具有权重的,那么最终结果就会是得到的结果乘以他们的权重!
6.多重共线性和内生性
6.1 多重共线性:
我们知道,数据的属性很多情况下具有极强的线性相关性,同时我们选择数据是如果我们使用虚拟变量,极其容易产生多重共线性,这种情况对于模型建立时十分不利的,因此我们要消除多重共线性,首先我们要检验是否存在多重共线性。
1. 使用皮尔逊相关度或者斯皮尔曼相关度检验相关度
2. 使用联合检验假设:如果几个变量分别不显著,但是联合显著,那么他们存在多重共线性。
3. 方差膨胀因子法。
而我们想要解决这个问题,可以使用以下手段
1. 增加数据量
2. 去掉数据变量:这样会带来很多的信息损失,去掉了变量,因此我们不建议这么做。
3. 降维: 使用PCA等方法降维
4. 加入惩罚项:使用l1,l2 正则化。
5. 有一种特别的情况,叫做结构化地方共线性,类似于 $x_1,x_1^2$两个参数,在远离远点的位置二者的值呈线性分布[2],因此使用中心位置置0可以解决这种问题,即是用 $x_1-\\bar{x_1} (x_1-\\bar{x_1})^2$。
6.2 内生性:
与多重共线性类似,内生性也同样来自于线性模型,数学上表示为由于模型中一个或者两个变量。由于受到扰动的影响,导致变量与扰动之间存在某种联系,致使模型重要的假设:扰动是一个独立的相矛盾,这样的后果就是模型预测失准。从表现上来看,就是因变量与自变量互为因果,例如学区房与升学率之间的关系就是互为因果。
我们要解决这个问题,主要是使用工具变量,工具变量就是变量要是与引起内生性变量相关,其次与随机扰动不相关。,找到随机变量后使用二阶最小二乘法,便可以消除内生性。
7.参考文献
[1] 唐亘<<精通数据科学--从线性回归到深度学习>> [2] 张重生<<大数据分析-数据挖掘散发实例详解>> [3] <<集体智慧编程>>