美文网首页
数据挖掘(异常检测)——线性方法

数据挖掘(异常检测)——线性方法

作者: EL33 | 来源:发表于2021-05-18 00:13 被阅读0次

    DataWhale 组队学习 2021.05 组队学习系列笔记三

    异常检测(线性方法)大纲

    补充内容:
    一、PCA实现流程,设有 m 条 n 维数据:

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

    二、sklearn实现及参数说明

    1. 函数原型及参数说明

    相关包 import sklearn.decomposition
    常用类 import sklearn.decomposition.PCA

    其中,
    sklearn.decomposition.PCA(n_components=None, copy=True, whiten=False)

    • n_components: int, float, None 或 string,PCA算法中所要保留的主成分个数,也即保留下来的特征个数,如果 n_components = 1,将把原始数据降到一维;如果赋值为string,如n_components='mle',将自动选取特征个数,使得满足所要求的方差百分比;如果没有赋值,默认为None,特征个数不会改变(特征数据本身会改变),此时n_components=min(样本数,特征数)。这个参数可以帮我们指定希望PCA降维后的特征维度数目。最常用的做法是直接指定降维到的维度数目。
    • copy:True 或False,默认为True,即是否需要将原始训练数据复制。
    • whiten:True 或False,默认为False,所谓白化, 就是对降维后的数据的每个特征进行归一化,让方差都为1。对于PCA降维本身来说,一般不需要白化。如果你PCA降维后有后续的数据处理动作,可以考虑白化。
    • explained_variance_ratio_:返回所保留各个特征的方差百分比,如果n_components没有赋值,则所有特征都会返回一个数值且解释方差之和等于1。
    • svd_solver:即指定奇异值分解SVD的方法,由于特征分解是奇异值分解SVD的一个特例,一般的PCA库都是基于SVD实现的。有4个可以选择的值:{‘auto’, ‘full’, ‘arpack’, ‘randomized’}。randomized一般适用于数据量大,数据维度多同时主成分数目比例又较低的PCA降维,它使用了一些加快SVD的随机算法。 full则是传统意义上的SVD,使用了scipy库对应的实现。arpack和randomized的适用场景类似,区别是randomized使用的是scikit-learn自己的SVD实现,而arpack直接使用了scipy库的sparse SVD实现。默认是auto,即PCA类会自己去在前面讲到的三种算法里面去权衡,选择一个合适的SVD算法来降维。一般来说,使用默认值就够了。

    除了这些输入参数外,有两个PCA类的成员值得关注。第一个是explained_variance_,它代表降维后的各主成分的方差值。方差值越大,则说明越是重要的主成分。第二个是explained_variance_ratio_,它代表降维后的各主成分的方差值占总方差值的比例,这个比例越大,则越是重要的主成分。

    1. PCA常用方法
    • fit(X): 用数据X来训练PCA模型。

    • fit_transform(X):用X来训练PCA模型,同时返回降维后的数据。

    • inverse_transform(newData) :将降维后的数据转换成原始数据,但可能不会完全一样,会有些许差别。

    • transform(X):将数据X转换成降维后的数据,当模型训练好后,对于新输入的数据,也可以用transform方法来降维。

    相关文章

      网友评论

          本文标题:数据挖掘(异常检测)——线性方法

          本文链接:https://www.haomeiwen.com/subject/mmasjltx.html