【问题标题】:TruncatedSVD - Explained VarianceTruncatedSVD - 解释方差
【发布时间】:2014-01-01 00:42:07
【问题描述】:

对于sci-kit learn 中的RandomizedPCA,我可以在explained_variance_ratio_ 属性中看到每个组件解释的差异。我可以从TruncatedSVD 那里得到等价的东西吗?我想知道是否值得让TruncatedSVD 返回更多组件。

注意:我什至不知道“解释方差”的概念是否适用于 TruncatedSVD 技术。

【问题讨论】:

    标签: python scikit-learn


    【解决方案1】:

    我需要检查,但即使是 RandomizedPCAexplained_variance_ratio_ 也可能会损坏。我认为在截断 SVD 时没有原则性的方法来计算它。

    编辑:我刚刚检查了this notebook,通过从数据中计算出真实的解释方差率,确实RandomizedPCA 在撒谎。

    最后,如果您想计算真实的解释方差,您可以从数据中完成:

    import numpy as np
    from sklearn.decomposition import TruncatedSVD
    
    model = TruncatedSVD(n_components=10).fit(X)
    X_proj = model.transform(X)
    explained_variances = np.var(X_proj, axis=0) / np.var(X, axis=0).sum()
    

    第二次修改:我在这里报告了这个问题:https://github.com/scikit-learn/scikit-learn/issues/2663

    【讨论】:

    • 这种方法有意义吗?假设我从 0.5 万维的训练集开始。我执行 TruncatedSVD 以将其减少到 200 个组件。每个主成分都是旧特征(其中 0.5 万)的线性组合。对于每个旧功能,我将每个新组件的绝对系数(我认为也称为负载)相加,并将这个总和解释为“重要性分数”。为每个原始特征绘制这个“重要性分数”,并根据图表的“肘部”位置,确定我是否需要更多组件。有意义还是无意义?
    • 按照我在编辑中解释的经验计算解释的方差,并寻找你的肘部或阈值(例如,只保留第一个分量以达到 75% 的方差)。那应该可以。
    猜你喜欢
    • 2016-05-19
    • 2020-08-27
    • 2019-12-09
    • 1970-01-01
    • 2019-05-05
    • 2017-09-30
    • 2015-05-13
    • 2020-04-13
    • 2021-10-15
    相关资源
    最近更新 更多