组件数量Trucated SVD

时间:2018-01-24 13:49:01

标签: machine-learning scikit-learn statistics svd

可以通过使用截断的SVD来降低维度。它通过截断奇异值分解(SVD)执行线性降维。但是,必须在分解之前选择组件数量。

n_comp = 25
tfidf_vec = TfidfVectorizer(analyzer="word", max_features=5000, ngram_range=(1,2))
svd = TruncatedSVD(n_components=n_comp, algorithm='arpack')
tfidf_df = tfidf_vec.fit_transform(values)
df = svd.fit_transform(tfidf_df)

如何选择组件数量?

3 个答案:

答案 0 :(得分:3)

var_explained = svd.explained_variance_ratio_.sum()

上面的行将帮助您确定25个组件是否足够好地捕获数据的可变性。 有时,var_explained> = 0.9或var_explained> = 0.95会减少分析中需要的变量数量。

答案 1 :(得分:1)

学术答案:https://en.wikipedia.org/wiki/Johnson%E2%80%93Lindenstrauss_lemma

  

在数学中,Johnson-Lindenstrauss引理是关于从高维到低维欧几里德空间的低失真嵌入点的结果。该引理指出,高维空间中的一小组点可以嵌入到更低维度的空间中,使得点之间的距离几乎保持不变。用于嵌入的地图至少是Lipschitz,甚至可以被视为正交投影。

实际答案:尝试多个维度,为您的目标找到最佳价值。

https://cstheory.stackexchange.com/a/21489

答案 2 :(得分:1)

一种方法是生成组件数,按组件数解释方差,并在添加额外数量的组件时返回。

这里我有一个Tfidf数据帧,最多有5000个功能。我们将以这种图表结束:

enter image description here

可以任意选择满足其时间 - 效率权衡的组件数量。 我正在寻找规则来避免这种类型的操作。