Loading

数据预处理

数据预处理

处理数据缺失

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

离群点检测 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\times Precision\times 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}{\sum\limits_{i=1}^{m}(a_i-μ_a)(b_i-μ_b)}\)

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

\(Cov(a,b)=\frac{1}{m-1}{\sum\limits_{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[\begin{matrix}Cov(a,a)&Cov(a,b)\\Cov(b,a)&Cov(b,b)\end{matrix}\right]\)

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

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

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

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

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

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

\(\left\{\begin{matrix}max\{\omega ^T S \omega\} \\ s.t.\omega^T\omega =1\end{matrix}\right\}\)

\(L(\omega)=\omega ^TS\omega+\lambda(1-\omega ^T\omega)\)

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

求导之后的值是:\(S\omega = \lambda\omega\)

此时\(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}\sum\limits_{x∈X_j}x(i=0,1)\)

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

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

表示同一类别数据的散度

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

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

\(J(\omega)=\frac{||\omega ^T\mu_0-\omega^T\mu_1||_2^2}{\omega^T\sum_0\omega+\omega^T\sum_1\omega}=\frac{\omega^T(\mu_0-\mu_1)(\mu_0-\mu_1)^T\omega}{\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)}\)

posted @ 2021-09-30 14:17  折木家的招财猫  阅读(246)  评论(0编辑  收藏  举报