Scikit-learn 中文教程

第二部分:Scikit-learn 核心基础
第 3 章 Scikit-learn 核心设计与 API 体系
第 4 章 数据集模块与数据划分
第三部分:数据预处理与特征工程
第 5 章 数据预处理核心模块(sklearn.preprocessing)
第 6 章 特征工程:提取、选择与构建
第四部分:模型评估与验证
第 7 章 模型评估指标(按任务类型划分)
第 8 章 模型验证与超参数调优
第五部分:Scikit-learn 核心算法模块
第 9 章 有监督学习:分类算法
第 10 章 有监督学习:回归算法
第 11 章 无监督学习:聚类与密度算法
第 12 章 半监督学习与其他常用算法
第八部分:性能优化与问题解决
第 18 章 Scikit-learn 性能优化
第 19 章 Scikit-learn 常见问题与解决方案

14.3 实战 3:文本分类(新闻 / 评论分类 + 特征提取)

Scikit-learn实战教程:文本分类 - 新闻评论情感分析与特征提取详解

Scikit-learn 中文教程

本教程使用Scikit-learn实战文本分类,从业务需求分析到模型优化,详细讲解新闻/评论分类的情感分析应用,包括数据清洗、特征提取(TF-IDF和Word2Vec)、分类模型训练及优化,适合机器学习初学者快速上手。

推荐工具
PyCharm专业版开发必备

功能强大的Python IDE,提供智能代码补全、代码分析、调试和测试工具,提高Python开发效率。特别适合处理列表等数据结构的开发工作。

了解更多

实战3:文本分类教程 - 新闻/评论分类与特征提取

引言

文本分类是机器学习中的重要应用,广泛应用于新闻分类、评论情感分析等场景。本教程将引导你使用Scikit-learn库,一步步构建一个文本分类模型,适合新手入门。我们将从业务需求开始,到数据预处理、特征提取、模型训练、优化和结果解读,确保你理解每个环节。

1. 业务需求分析

在文本分类中,业务需求决定了模型的目标。常见的需求包括:

  • 情感分析:例如,分析用户评论是积极还是消极,帮助企业了解客户反馈。
  • 新闻类别分类:例如,将新闻文章自动分类到政治、科技、体育等类别,便于内容组织。

通过明确需求,我们才能选择合适的特征和模型。在本教程中,我们将以一个通用案例展开,假设目标是分类新闻文章或评论,你可以根据实际情况调整。

2. 文本数据预处理

预处理是文本分类的第一步,目的是将原始文本转换为干净、结构化的数据。主要包括:

  • 清洗:去除特殊字符(如标点、数字)、转换为小写,或处理缺失值。例如,使用Python字符串操作或正则表达式。
  • 分词:将文本分割成单词或词组。对于中文,可以使用jieba库;对于英文,Scikit-learn的CountVectorizer可以自动处理。
  • 去停用词:移除常见但无意义的词(如“的”、“在”),使用预定义的停用词列表,Scikit-learn提供了英文停用词,中文可以自定义。

示例代码

from sklearn.feature_extraction.text import CountVectorizer
import jieba  # 中文分词

# 假设texts是一个文本列表
texts = ["这是一个新闻文章", "评论很好"]

# 清洗和分词(这里以英文为例)
vectorizer = CountVectorizer(stop_words='english', lowercase=True)
X = vectorizer.fit_transform(texts)
print(X.toarray())

3. 文本特征提取

文本特征提取将预处理后的文本转换为数值特征,以便模型处理。Scikit-learn提供了多种方法:

  • TF-IDF(词频-逆文档频率):衡量词的重要性,适用于大部分文本分类任务。使用TfidfVectorizer
  • Word2Vec:基于词向量表示,捕捉语义信息,可以使用gensim库结合Scikit-learn。

比较:TF-IDF简单高效,适合新闻分类;Word2Vec在情感分析中可能表现更好,因为它考虑了上下文。

示例代码

from sklearn.feature_extraction.text import TfidfVectorizer

vectorizer = TfidfVectorizer(stop_words='english')
X_tfidf = vectorizer.fit_transform(texts)
print(X_tfidf.toarray())

4. 分类模型训练

选择分类器并进行训练。Scikit-learn提供了多种分类算法:

  • 朴素贝叶斯(Naive Bayes):简单快速,适合高维文本数据,如使用MultinomialNB
  • 支持向量机(SVM):在小样本或高维数据中表现好,如LinearSVC
  • 随机森林(Random Forest):集成方法,可减少过拟合,但可能计算成本高。

示例代码

from sklearn.naive_bayes import MultinomialNB
from sklearn.svm import LinearSVC
from sklearn.model_selection import train_test_split

# 假设X是特征,y是标签
X_train, X_test, y_train, y_test = train_test_split(X_tfidf, y, test_size=0.2, random_state=42)

# 训练朴素贝叶斯模型
nb_model = MultinomialNB()
nb_model.fit(X_train, y_train)
accuracy = nb_model.score(X_test, y_test)
print(f"朴素贝叶斯准确率: {accuracy}")

5. 模型优化与结果解读

训练模型后,需要进行优化和评估。

  • 特征降维:如果特征太多,可以使用PCA降维,减少计算成本,但可能损失信息。
  • 参数调优:使用网格搜索(GridSearchCV)找到最佳超参数,例如调整TF-IDF的ngram范围或分类器的参数。

结果解读

  • 使用准确率、召回率、F1分数等指标评估模型性能。
  • 混淆矩阵可视化错误类型,例如使用matplotlib。

示例代码

from sklearn.model_selection import GridSearchCV
from sklearn.decomposition import PCA
from sklearn.metrics import classification_report

# 参数调优示例
param_grid = {'alpha': [0.1, 0.5, 1.0]}  # 朴素贝叶斯的平滑参数
grid_search = GridSearchCV(nb_model, param_grid, cv=5)
grid_search.fit(X_train, y_train)
print(f"最佳参数: {grid_search.best_params_}")

# 结果解读
predictions = grid_search.best_estimator_.predict(X_test)
print(classification_report(y_test, predictions))

总结

本教程介绍了使用Scikit-learn进行文本分类的全流程。从业务需求分析开始,通过数据预处理、特征提取(TF-IDF或Word2Vec)、模型训练(如朴素贝叶斯、SVM、随机森林)和优化(如降维和调优),最终解读结果。希望这能帮助你入门文本分类,并应用到实际项目中。实践是学习的关键,尝试修改数据和模型,探索最佳组合!

如果你有任何问题,参考Scikit-learn官方文档或社区资源,祝你学习顺利!

开发工具推荐
Python开发者工具包

包含虚拟环境管理、代码格式化、依赖管理、测试框架等Python开发全流程工具,提高开发效率。特别适合处理复杂数据结构和算法。

获取工具包