You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何缩减sklearn 20newsgroups数据集规模?NLP入门kNN实现求助

20newsgroups数据集维度缩减方案

文本数据无法直接做维度缩减,得先把字符串形式的文本转换成数值特征矩阵,再用降维算法压缩到指定维度。下面是完整的实现步骤:

步骤1:导入所需工具库

from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.decomposition import TruncatedSVD

步骤2:加载数据集(你的现有代码)

# 替换成你实际的类别列表
allCategories = ["alt.atheism", "soc.religion.christian", "comp.graphics", "sci.med"] 
trainingData = fetch_20newsgroups(subset="train", categories=allCategories)

步骤3:将文本转换为TF-IDF特征矩阵

TF-IDF是NLP中常用的文本数值化方法,能把文本转换成稀疏的数值特征:

# 初始化TF-IDF转换器,可按需调整参数
tfidf = TfidfVectorizer(stop_words="english", max_features=5000) # max_features可选,先限制初始特征数
X_tfidf = tfidf.fit_transform(trainingData.data)

步骤4:用TruncatedSVD缩减到指定维度

因为TF-IDF矩阵是稀疏的,TruncatedSVD比PCA更适合处理这类数据(支持稀疏输入,效率更高)。比如要缩减到100维:

# n_components设置你需要的目标维度
svd = TruncatedSVD(n_components=100, random_state=42)
X_reduced = svd.fit_transform(X_tfidf)

现在X_reduced就是缩减到指定维度的训练特征矩阵,可直接传入kNN分类器进行训练。

补充说明

  • 若TF-IDF初始特征数较少(如几百维),也可用PCA替代TruncatedSVD,但稀疏矩阵场景下TruncatedSVD速度更快。
  • 修改n_components参数即可调整最终维度,比如改成50就是50维。
  • stop_words="english"会过滤英文停用词(如the、and),减少无效特征,提升降维效果。

内容的提问来源于stack exchange,提问作者wierd23

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 16:09:25