如何缩减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
相关产品推荐
相关产品推荐

