【问题标题】:Is it okay to normalize by row after running a PCA?运行 PCA 后可以按行归一化吗?
【发布时间】:2017-05-21 08:40:29
【问题描述】:

我有一个包含 50K 行和 26 个特征的数据集。我正在使用 sklearn 的 StandardScaler 对列进行归一化(每列的均值为 0,标准差为 1),然后运行 ​​PCA 以将特征集减少到原始方差的约 90%。然后在运行 sklearn 的 KMeans 算法之前对行进行规范化。

有什么理由我不应该在运行 PCA 后对行进行规范化?如果有,在 PCA 之前对行进行规范化会导致任何问题 - 应该在规范化列之前还是之后进行?

对行进行归一化的原因是从每行中删除“幅度”或“技能水平”,而是查看各个 PCA 减少特征之间的关系。

【问题讨论】:

    标签: scikit-learn normalization pca


    【解决方案1】:

    这非常依赖于数据。由于我不知道这些“技能水平”数字可能对数据形状有什么影响,因此我不愿直接回答。例如,某些行的多个标准化分数超出 [-1, 1] 范围是否合理,而其他行的值较小?听起来这就是您要解决的问题。

    我担心您会有很多行,其中有多个值在 1-2 范围内(+ 或 -),但有些行可能只有一个 +1 值,其余项目接近 0。当如果对“one-hot”行进行规范化,您会得到一个大于 10 的值。您希望它作为异常值聚集,还是包含在空间的中心区域?对于这些数据来说,具有一个超过平庸特征的人是否是异常值

    在 PCA 之后重新规范化没有任何问题。但是,如果您在前后都进行规范化,则不会有太大变化,因为您保留了大部分数据,只删除了那些看起来多余的数据。

    【讨论】:

    • 感谢您的 cmets。也许,将每行的平均值集中在 0,但不对标准偏差做任何事情会导致制造的异常值减少。我将尝试几种不同的方法,看看结果如何。感谢您帮助我思考问题。
    • 很高兴能提供帮助。请让我知道什么有效;我也想从中学习。
    • 所以我尝试规范化行(mean=0,stdev=1),居中行(mean=0,stdev 不变),而不是规范化行。到目前为止,居中的行产生了最有意义的结果。根据经验水平,我的数据集中有 11 个组,按组到最近质心的距离是感兴趣的指标。我计算了每个组之间到最近质心的距离的韦尔奇 T 检验。一个(有点老套的)评估指标是对所有此类 TTest 的绝对值求和。居中数据 tstat absolute val sum 约为 2,100,未更改数据约为 1400,标准化数据约为 380。
    • 感谢您的报告;相当有趣的结果。这些总和绝对数字很能说明问题。它们是否针对使用的标准化(未)进行了校正?如果您只是将所有范围除以 6,那么抱怨一个是另一个 6 倍是不公平的。:-)
    猜你喜欢
    • 2012-04-24
    • 1970-01-01
    • 2013-04-15
    • 2016-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-14
    相关资源
    最近更新 更多