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

如何在Python中对含文本特征的数据集应用PCA降维?

文本特征适配PCA降维的解决方案

一、先将文本特征转为数值特征(必做步骤)

PCA仅支持数值型矩阵,所以必须先把文本特征转换成数值表示,常用方法如下:

1. 词袋模型(Bag of Words)

统计每个文本中词汇的出现频次,生成稀疏数值矩阵:

from sklearn.feature_extraction.text import CountVectorizer
import pandas as pd

# 示例数据集(假设包含text列和其他数值列)
df = pd.DataFrame({
    "text": ["我喜欢机器学习", "PCA是常用降维方法", "文本转数值是关键"],
    "age": [25, 30, 28],
    "score": [85, 90, 88]
})

# 初始化词袋模型并转换文本
vectorizer = CountVectorizer()
text_bow = vectorizer.fit_transform(df["text"]).toarray()

2. TF-IDF

基于词频和逆文档权重生成更具区分度的数值特征,抑制高频无意义词汇:

from sklearn.feature_extraction.text import TfidfVectorizer

tfidf = TfidfVectorizer()
text_tfidf = tfidf.fit_transform(df["text"]).toarray()

3. 词嵌入(Word Embedding)

通过预训练或自定义模型生成带有语义信息的低维向量,比如Word2Vec或BERT句子嵌入:

import jieba
import numpy as np
from gensim.models import Word2Vec

# 先对中文文本分词
df["cut_text"] = df["text"].apply(lambda x: jieba.lcut(x))

# 训练自定义Word2Vec模型
word2vec_model = Word2Vec(df["cut_text"], vector_size=100, window=5, min_count=1)

# 计算单条文本的平均词向量作为文本特征
def get_avg_vec(cut_words):
    valid_vecs = [word2vec_model.wv[word] for word in cut_words if word in word2vec_model.wv]
    return np.mean(valid_vecs, axis=0) if valid_vecs else np.zeros(100)

text_emb = df["cut_text"].apply(get_avg_vec).tolist()

二、合并特征后执行PCA降维

将转换后的文本数值特征与原数据集的其他数值特征拼接,再应用PCA:

from sklearn.decomposition import PCA

# 获取原数值特征
num_features = df[["age", "score"]].values
# 拼接文本特征与数值特征
combined_features = np.hstack([num_features, text_tfidf])
# 执行PCA降维(示例降到2维)
pca = PCA(n_components=2)
reduced_features = pca.fit_transform(combined_features)

三、针对文本的"类PCA"替代方案

不存在直接对原始文本字符串应用PCA的方法,但可以用潜在语义分析(LSA)——它本质是对词-文档矩阵做奇异值分解(SVD),效果类似PCA,专门适配文本场景:

from sklearn.decomposition import TruncatedSVD

# 基于TF-IDF矩阵执行LSA降维
tfidf_matrix = tfidf.fit_transform(df["text"])
lsa = TruncatedSVD(n_components=2)
text_reduced = lsa.fit_transform(tfidf_matrix)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 05:16:22