【案例共创】线性分类器与支持向量机 - 新闻标题主题分类 (SVM)

最新案例动态,请查阅【案例共创】线性分类器与支持向量机 - 新闻标题主题分类(SVM)。小伙伴们快来领取华为开发者空间进行实操吧!
本案例由:梅科尔工作室提供
1 概述
1.1 案例介绍
在机器学习领域,分类的目标是指将具有相似特征的对象聚集。而一个线性分类器则透过特征的线性组合来做出分类决定,以达到此种目的。
支持向量机(Support Vector Machine, SVM)是一种广泛应用于机器学习的监督学习模型,主要用于分类和回归任务。其核心思想是通过寻找一个最优超平面,将不同类别的样本分开,并最大化类别之间的间隔。
本案例通过在开发者空间 Notebook 中,基于 SVM 并使用 MindSpore 框架进行数据预处理和词向量训练,对新闻标题进行预测分类。
通过本案例可以对线性分类器与⽀持向量机进行学习,同时了解 MindSpore 框架的使用。
1.2 适用对象
企业
个人开发者
高校学生
1.3 案例时间
本案例总时长预计 30 分钟。
1.4 案例流程
说明:
登录开发者空间,启动 Notebook;
在 Notebook 中编写代码运行调试。
1.5 资源总览
本案例预计花费总计 0 元。
2 资源与开发环境准备
2.1 启动 Notebook
参考“DeepSeek模型API调用及参数调试(开发者空间Notebook版)”案例的第 2.2 章节启动 Notebook。
2.2 安装依赖库
在 Notebook 的新执行框中输入如下代码并运行,安装所有依赖库。
3 新闻标题主题分类
导入必要的库
jieba:用于中文文本的分词处理。
numpy (np):用于数值计算和数组操作。
pandas (pd):用于数据处理和分析。
subprocess:用于执行系统命令,例如下载数据集。
mindspore:深度学习框架,用于构建和训练模型。
gensim.models.word2vec.Word2Vec:用于训练词向量模型。
sklearn.model_selection.train_test_split:用于划分训练集和测试集。
sklearn.metrics.accuracy_score, classification_report:用于评估模型性能。
joblib:用于保存和加载模型。
在 Notebook 的新执行框中输入如下代码并运行,导入所有使用到的库。
3.1 下载数据集
使用 Git 命令从远程仓库下载新闻标题分类的数据集。如果下载成功,打印“文件下载成功!”;如果失败,打印错误信息。
在 Notebook 的新执行框中输入如下代码并运行:
3.2 加载数据
使用 Pandas 读取两个文本文件,一个是文化体育类新闻标题(正类),另一个是生态环境类新
闻标题(负类)。
在 Notebook 的新执行框中输入如下代码并运行:
3.3 数据预处理
对每个新闻标题进行分词处理,将标题切分成一个个的词。
在 Notebook 的新执行框中输入如下代码并运行:
合并数据和标签
将正类和负类的分词结果合并为一个数组 x,创建标签数组 y,正类标签为 1,负类标签为 0。
在 Notebook 的新执行框中输入如下代码并运行:
3.4 训练词向量
使用 Word2Vec 模型训练词向量,将每个词映射到 300 维的向量空间,并保存训练好的词向量模型。
在 Notebook 的新执行框中输入如下代码并运行:
3.5 定义函数将词向量转换为特征向量
定义函数 total_vector ,将每个新闻标题的词向量相加,得到一个固定长度的特征向量。
在 Notebook 的新执行框中输入如下代码并运行:
3.6 生成训练数据的特征向量
将所有新闻标题转换为特征向量,形成训练数据。
在 Notebook 的新执行框中输入如下代码并运行:
3.7 划分训练集和测试集
将数据集划分为训练集和测试集,测试集占 20%。
在 Notebook 的新执行框中输入如下代码并运行:
X_train, X_test, y_train, y_test = train_test_split(train_vec, y,test_size=0.2, random_state=42)
3.8 转换为 MindSpore tensor
将 NumPy 数组转换为 MindSpore 的 Tensor,以便在 MindSpore 框架中使用。
在 Notebook 的新执行框中输入如下代码并运行:
3.9 定义 SVM 模型(使用逻辑回归替代)
定义一个简单的线性模型,用于二分类任务。
在 Notebook 的新执行框中输入如下代码并运行:
3.10 初始化模型、损失函数和优化器
初始化模型、二分类交叉熵损失函数和 Adam 优化器。
在 Notebook 的新执行框中输入如下代码并运行:
3.11 定义训练网络
使用 MindSpore 的 WithLossCell 和 TrainOneStepCell 构建训练网络。
在 Notebook 的新执行框中输入如下代码并运行:
3.12 训练模型
定义训练循环,训练模型 50 个 epoch,并每 5 个 epoch 打印一次损失值。
在 Notebook 的新执行框中输入如下代码并运行:
3.13 创建数据集
使用 MindSpore 的 GeneratorDataset 创建数据集,并设置批量大小为 32。
在 Notebook 的新执行框中输入如下代码并运行:
3.14 训练模型
调用训练函数,开始训练模型。
在 Notebook 的新执行框中输入如下代码并运行:
训练结果打印如下(每次运行结果不尽相同,内容仅作参考):
3.15 在测试集上评估模型
将模型设置为评估模式,对测试集进行预测,并计算准确率和分类报告。
在 Notebook 的新执行框中输入如下代码并运行:
评估结果参考如下(每次运行结果不尽相同,内容仅作参考):
3.16 定义预测函数
定义预测函数,对新输入的文本进行分类预测。
在 Notebook 的新执行框中输入如下代码并运行:
3.17 测试预测
测试两个示例文本的分类结果。
在 Notebook 的新执行框中输入如下代码并运行:
测试结果参考如下(每次运行结果不尽相同,内容仅作参考):
4 总结
根据上述训练预测结果,总结如下:
4.1 模型性能
模型在测试集上的准确率达到 97.54%,表明模型具有很高的分类准确性。
分类报告显示,模型对两个类别的精确度(precision)、召回率(recall)和 F1 分数都非常高。
4.2 预测能力
模型能够对新的新闻标题进行准确分类,并给出分类的概率值。例如:
对于标题“文化体育融合新发展,全民共享健康生活”,模型预测其属于“文化体育类”,
概率为 0.8426。
对于标题“生态修复与保护加速推进,绿色发展绘就美丽未来”,模型预测其属于“生态环
境类”,概率为 0.9994。
4.3 模型保存与部署
保存训练好的词向量模型,便于后续的应用和部署。
MindSpore 提供了丰富的工具和模块,支持模型的进一步优化和部署。
至此,新闻标题主题分类案例结束。点击链接参考完整案例代码。







评论