文本分类与聚类分析代码总结笔记
一、核心任务概述
代码主要围绕文本数据(视频描述、评论内容)开展两类核心任务:
- 分类任务:对文本进行标签预测(如商品名称、情感类别、用户场景等)
- 聚类任务:对特定类别文本进行主题挖掘,提取关键特征词
二、技术栈与工具
- 文本处理:
jieba中文分词工具 - 特征提取:
TfidfVectorizer将文本转换为TF-IDF特征向量 - 分类模型:
SGDClassifier(随机梯度下降分类器) - 聚类模型:
KMeans聚类算法 - 流程封装:
sklearn.pipeline.make_pipeline构建端到端处理流程
三、核心流程解析
1. 分类任务实现
(1)商品名称预测
product_name_predictor = make_pipeline(
TfidfVectorizer(tokenizer=jieba.lcut, max_features=50),
SGDClassifier()
)
# 用非空标签数据训练,预测缺失值
product_name_predictor.fit(训练文本, 训练标签)
video_data["product_name"] = product_name_predictor.predict(全量文本)
(2)评论多维度标签预测
对评论数据的4个维度(情感类别、用户场景、用户问题、用户建议)分别构建分类器:
for col in ['sentiment_category', 'user_scenario', 'user_question', 'user_suggestion']:
predictor = make_pipeline(TfidfVectorizer(tokenizer=jieba.lcut), SGDClassifier())
predictor.fit(非空标签评论文本, 对应标签)
comments_data[col] = predictor.predict(全量评论文本)
2. 聚类任务实现
针对特定分类结果的文本进行聚类,提取主题关键词:
- 构建聚类管道(TF-IDF+KMeans)
- 训练模型并预测聚类标签
- 从聚类中心提取Top N关键词作为主题
kmeans_predictor = make_pipeline(TfidfVectorizer(tokenizer=jieba.lcut), KMeans(n_clusters=2))
kmeans_predictor.fit(目标文本) # 如情感类别为1/3的积极评论
# 提取每个聚类的Top 10关键词
cluster_centers = kmeans_model.cluster_centers_
top_feature_indices = cluster_centers[i].argsort()[::-1] # 按重要性排序
top_word = ' '.join([feature_names[idx] for idx in top_feature_indices[:top_n_words]])
四、优化方向与改进点
-
代码结构优化
- 通过函数封装重复逻辑(如
train_and_predict、find_best_clusters_and_predict) - 减少冗余代码,提高可维护性
- 通过函数封装重复逻辑(如
-
模型性能提升
- 聚类数量动态选择:通过轮廓系数(silhouette_score)在5-8范围内选择最优
n_clusters - 特征工程增强:设置
ngram_range=(1,2)(同时考虑单字和双字)、min_df/max_df过滤低频/高频词 - 增加交叉验证评估分类模型准确性
- 聚类数量动态选择:通过轮廓系数(silhouette_score)在5-8范围内选择最优
-
鲁棒性增强
- 增加数据空值判断,避免空文本输入报错
- 保存中间结果(聚类标签、主题词),便于后续分析
五、输出结果
- 生成包含预测标签的视频数据文件:
submit/submit_videos.csv - 生成包含多维度标签及聚类主题的评论数据文件:
submit/submit_comments.csv - 最终打包为
submit.zip用于提交
六、关键注意事项
- 分类模型依赖有标签数据的质量,需确保训练数据中
~isnull()的标签准确性 - 聚类结果的可解释性依赖关键词提取,
top_n_words参数需根据实际场景调整 - TF-IDF参数(如
max_features)需根据文本数据量和词汇丰富度灵活设置
711

被折叠的 条评论
为什么被折叠?



