数据预处理

数据预处理

处理数据缺失

方法 具体措施
忽略 直接删除,简单粗暴,缺失数据少的时候很管用
手动填充 重新收集数据,需要某些领域的专业知识,可行性不高
自动填充 取中位数或者平均数

离群点检测 OUTLIER

世界之大,无奇不有,有时候明显和其他数据格格不入的数据,并不一定是错误的点,比如我们身边平时很少有身高超过2m的人,但是这是的的确确存在的。

尽管如此,我们在训练模型的时候为了更加符合常识,囊括更多的情况,就不能让这些点干扰我们的模型,此时这些点就被界定为“离群点”。

下面介绍课程中的一种算法:基于密度的局部离群点检测

定义

(reachdistance_k(A,B)):可达距离,理解为定义一个A到B的距离的度量即可

(k-distance(B)):对象B的第k领域距离

(d(A,B)):A点到B点的距离(可以是欧式距离)

(reachdistance_k(A,B) = max{k-distance(B),d(A,B)})

(lrd(A)=frac{|N_kA|}{sum_{B∈N_k(A)}reachdistance_k(A,B)})

(N_k(A))表示临近点的集合

(lrd(A))表示度量A点到相邻点的相近程度

单单看lrd(A)并不能得出什么,需要采用相对的概念对其进行描述

(LOF_k(A) = frac{sum_{B∈N_k(A)}{frac{lrd(B)}{lrd(A)}}}{{N_k(A)}})

如果A和相邻的点比较远,除了A点之外的点和它们各自的近邻比较近,相比之下A就可以被认为是一个离群点。

更多的参照这个博客:https://blog.csdn.net/mw21501050/article/details/75389267

重复数据判别

有时候,由于网络原因,客户可能重复提交数据,导致数据库中出现相同的数据,又或者同名同姓的人在同一个数据库中提交了记录。这些情况都要视各个领域的不同而具体制定不同的处理方案。

对于简单的完全重复数据,可以采用滑动窗口的方法对其进行剔除。但是这是基于重复的数据互相挨得很近的假设,毕竟现在是大数据时代,对于如此海量的数据维持一个滑动窗口实在是不太可能。

数据类型编码

数据可以是连续的、离散的、抽象的、具体的,可以是文本数据,可以是音频数据,对于无法转换成数值数据的需要将他们进行编码,才可以导入模型进行计算。

one-hot 编码

区别于{low,media,high}这样的有序数据,更多的数据是像{医生、工程师、老师}这样的数据,数据类型之间是平等的,并不存在先后排名。

one-hot编码则是形成一个矩阵,每个特征作为单独的一列

这种编码方式的缺点也很明显,特征维数高了之后矩阵的规模是巨大的。

数据采样

数据量很大时

受限于IO,读取所有的数据太费时费力,而且是不必要的,但是读取部分数据的同时又要保持数据的完整特征,才能保证训练出来的模型的正确性。

不平衡数据集

数据的不平衡指的是数据集中一种类别的样本远超另一种类别。

衡量不平衡度

(G-mean = (Acc^{+} + Acc^{-})^{1/2})

其中(Acc^{+}=frac{TP}{TP+FN} ,Acc^{-}=frac{TN}{TN+FP})

(F-measure = frac{2 imes Precision imes Recall}{Precision + Recall})

其中(Precision = frac{TP}{TP+FP} ,Recall = frac{TP}{TP+FN})

解决方案

SMOTE算法:手动生成较少的类的数据,一种简单的做法就是按照随机正态分布在每个点的周边生成点

描述数据

协方差、中位数、平均数、方差

数据可视化

见本人博客:https://www.cnblogs.com/seaman1900/p/15356531.html

特征选择

信息&熵&信息增益

往信息增益高的特征选择

参见我的博文:https://www.cnblogs.com/seaman1900/p/15314895.html

以随机森林剪枝为例:

搜索算法

模拟退火、贪心搜索、遗传算法

PCA——主成分分析

网课中省略了太多知识点,在这里进行一一详细说明

首先引入协方差

(Cov(a,b)=frac{1}{m-1}{sumlimits_{i=1}^{m}(a_i-μ_a)(b_i-μ_b)})

一般来说,数据的处理需要去除平均值,也就使得

(Cov(a,b)=frac{1}{m-1}{sumlimits_{i=1}^{m}(a_ib_i)})

对于协方差来说:

(Cov(a,b)>0,a,b正相关)

(Cov(a,b)<0,a,b负相关)

(Cov(a,b)=0,a,b关系不确定)

网课上还有一个难以理解的问题,突然给出了(S(x)=frac{1}{n-1}XX^T)

现在看来豁然开朗,这个(frac{1}{n-1})来自于协方差,将上面的式子展开就可以得到一个协方差矩阵,同时也是对称阵,对角线上表示的是方差,下面以二维矩阵为例子展示:

(frac{1}{n-1}XX^T=left[egin{matrix}Cov(a,a)&Cov(a,b)\Cov(b,a)&Cov(b,b)end{matrix} ight])

联系协方差的特性,我们的目标和工具也就逐渐清晰起来:将一组 N 维向量降为 K 维,其目标是选择 K 个单位正交基,使得原始数据变换到这组基上后,各变量两两间协方差为 0(即除了对角线上的数,其他都尽量接近0即可),而变量方差则尽可能大(在正交的约束下,取最大的 K 个方差)

那么如何才能使得变换后的协方差尽可能小,方差尽可能大呢?

将这个问题转换为拉格朗日问题

我们给定原始矩阵(X)(去除过均值),给定变换之后的基为(omega),变换后的坐标为(Xomega)样本的方差描述为(推导过程看这里:https://zhuanlan.zhihu.com/p/77151308)

(D = omega ^T (frac{1}{n-1}XX^T) omega)

中间的不就是原样本的协方差矩阵嘛,列成拉格朗日问题的形式

(left{egin{matrix}max{omega ^T S omega} \ s.t.omega^Tomega =1end{matrix} ight})

(L(omega)=omega ^TSomega+lambda(1-omega ^Tomega))

(omega)进行求导,这里就涉及了矩阵求导的知识,这里列了一个表格可以快速查询:https://blog.csdn.net/a493823882/article/details/81324037

求导之后的值是:(Somega = lambdaomega)

此时(D=lambda)

因此,(X)投影后的方差就是协方差矩阵的特征值。我们要找到最大方差也就是协方差矩阵最大的特征值,最佳投影方向就是最大特征值所对应的特征向量,次佳就是第二大特征值对应的特征向量,以此类推

求解步骤

设有 m 条 n 维数据。

  1. 将原始数据按列组成 n 行 m 列矩阵 X;
  2. 将 X 的每一行进行零均值化,即减去这一行的均值;
  3. 求出协方差矩阵(C = frac{1}{n-1}XX^T)
  4. 求出协方差矩阵的特征值及对应的特征向量;
  5. 将特征向量按对应特征值大小从上到下按行排列成矩阵,取前 k 行组成矩阵 P;
  6. (Y=PX)即为降维到 k 维后的数据。

LDA——线性判别分析

区别于PCA,LDA是无监督的降维技术,中心思想:投影后类内方差最小,类间方差最大

二类LDA——分两类

我们定义

(mu_i=frac{1}{N_j}sumlimits_{x∈X_j}x(i=0,1))

表示同类数据的中心点的距离

(sum_j=sumlimits_{x∈X_j}(x-mu_j)(x-mu_j)^T(j=0,1))

表示同一类别数据的散度

由于LDA需要让不同类别的数据的类别中心之间的距离尽可能的大,也就是我们要最大化(||omega ^Tmu_0-omega^Tmu_1||_2^2),同时我们希望同一种类别数据的投影点尽可能的接近,也就是要同类样本投影点的协方差(omega^Tsum_jomega)尽可能的小,即最小化(omega^Tsum_0omega+omega^Tsum_1omega)

因此定义一个数用来描述我们的优化目标:

(J(omega)=frac{||omega ^Tmu_0-omega^Tmu_1||_2^2}{omega^Tsum_0omega+omega^Tsum_1omega}=frac{omega^T(mu_0-mu_1)(mu_0-mu_1)^Tomega}{omega^T(sum_0+sum_1)omega})

为了简化计算,定义类内散度矩阵

(S_omega=(sum_0+sum_1))

同时定义类间散度矩阵

(S_b=(mu_0-mu_1)(mu_0-mu_1))

简化之后的东西又叫做广义瑞利熵,根据这个东西的性质可以求得,有能力还可以直接求导获得

(omega = S_omega ^{-1}(mu_0-mu_1))

具体分析过程见这个博客:https://www.cnblogs.com/pinard/p/6244265.html

LDA流程

输入:数据集(D={(x1,y1),(x2,y2),...,(x_m,y_m)}),其中任意样本(x_i)(n)维向量,(y_i∈{C1,C2,...,Ck},y_i∈{C_1,C_2,...,C_k}),降维到的维度(d)

输出:降维后的样本集(D′)

  1. 计算类内散度矩阵(S_omega)

  2. 计算类间散度矩阵(S_b)

  3. 计算矩阵(S^{−1}_wS_b)

4)计算(S^{−1}_wS_b)的最大的(d)个特征值和对应的(d)个特征向量((w_1,w_2,...w_d)),得到投影矩阵(W)

  1. 对样本集中的每一个样本特征(x_i),转化为新的样本(z_i=W^Tx_i)

  2. 得到输出样本集(D′={(z1,y1),(z2,y2),...,(zm,ym)})

原文地址:https://www.cnblogs.com/seaman1900/p/15356565.html