我有以下场景:我必须分析大量的文本文档(大约3000个),并执行一些聚类技术以获得对它的一些洞察。为了提取特征,我使用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技术的理论中了解到,要降维到的组件数量是无限的,并且直观地,我认为使用更接近于特征数量的组件比使用少于四分之一的组件更好,因为它将需要更少的概念分组到更高级别的概念中。如果我错了,请改正。
https://stackoverflow.com/questions/51264478
复制相似问题