sklearn Truncated SVD(LSA)实现的局限性

问题描述 投票:1回答:1

我有以下场景:我必须分析大量文本文档(大约3,000个)并执行一些集群技术以获得一些洞察力。要提取我正在使用tf-idf的功能,但它会产生超过20,000个功能,这使得使用群集很难获得良好的结果。所以我开始使用LSA来降低维度并改善结果。以下是使用sci-kit learn实现的示例代码:

dataset = fetch_20newsgroups(subset='all', categories=categories, 
                              shuffle=True, random_state=42)
data = dataset.data
labels = dataset.target

vectorizer =TfidfVectorizer(use_idf=True, stop_words='english', ngram_range=(1,1), 
                             min_df=2, max_df=0.5, strip_accents='unicode',
                             smooth_idf=1, sublinear_tf=1)
X = vectorizer.fit_transform(data)

svd = TruncatedSVD(n_components=k)
normalizer = Normalizer(copy=False)
lsa = make_pipeline(svd, normalizer)

X = lsa.fit_transform(X)

# clustering over X

正如我上面所描述的,我有更多的20,000个功能,我希望我可以减少到一半,但是,如果我使用n_components这么大的值,lsa.fit_transform(X)返回正好n_components = n_documents。按预期工作的唯一值是文档数量以下的值。这是我在理论中缺少的东西还是实施有这个限制?据我所知,从LSA技术的理论来看,减少维数的组件数量无限且直观,我想使用更接近特征数量的多个组件更好,使用少于一个第四,因为它需要较少的概念分组在更高级别的概念中。如果我错了请纠正。

python machine-learning scikit-learn unsupervised-learning dimensionality-reduction
1个回答
0
投票

我只知道这对于主成分分析是肯定的,但我猜它对于LSA来说是类似的,没有其他人回答这个问题,所以我会试试。想象一下,您有2个文档和3个特征,从而产生具有两个数据点的三维坐标系。这两个数据点可以用直线连接,因此只需要描述二维坐标系。

因此,两个主要组件足以解释数据中的所有方差。如果您有更高的维度,则您拥有的文档数量将决定描述数据所需的维度。

© www.soinside.com 2019 - 2024. All rights reserved.