当前位置: 首页 > news >正文

支持向量机(SVM)进行文本分类的Python简单示例实现

支持向量机(Support Vector Machine,SVM)是一种常用的机器学习算法,主要用于分类和回归问题。它的基本思想是将数据映射到高维空间中,使得数据在该空间中线性可分,然后在该空间中寻找最优的超平面,将不同类别的数据分开。

SVM的优点在于可以处理高维数据,具有较好的泛化能力和鲁棒性。同时,SVM还可以使用核函数将数据映射到更高维的空间中,从而处理非线性问题。

SVM的核心是支持向量,即距离超平面最近的数据点。在训练过程中,SVM会寻找最大间隔超平面,即距离支持向量最远的超平面。这样可以使得分类器的泛化能力更好,对新的数据具有更好的预测能力。

SVM的训练过程可以使用优化算法来实现,例如序列最小优化(Sequential Minimal Optimization,SMO)算法。在实际应用中,SVM还可以使用软间隔和核函数等技术来处理噪声和非线性问题。

from sklearn.feature_extraction.text import CountVectorizer
import numpy as np
from sklearn import svmX = np.array(["这个电影太好看了","这个电影真是太差了","我喜欢这个电视剧","这个电视剧太无聊了"
])y = np.array([1, 0, 1, 0])  # 1代表积极,0代表消极vectorizer = CountVectorizer()
X = vectorizer.fit_transform(X)clf = svm.SVC() #创建一个SVC对象,并使用fit方法拟合数据
clf.fit(X, y)new_text = np.array(["这个电影非常棒"])  #假设有一个新的文本数据new_text
new_text = vectorizer.transform(new_text)
prediction = clf.predict(new_text)print(prediction)   #prediction是一个数组,包含了预测结果

如果你的数据来源于一个CSV文件中的很多条文本,你可以使用Python中的pandas库来读取CSV文件 。CSV中数据格式示例如下,包含两个字段:textlabel。第一行是字段名,后面的行是数据记录。每一行的字段值使用逗号进行分隔:

text,label
这个电影太好看了,1
这个电影真是太差了,0
我喜欢这个电视剧,1
这个电视剧太无聊了,0
from sklearn.feature_extraction.text import CountVectorizer
import numpy as np
from sklearn import svm# 读取CSV文件
df = pd.read_csv('data.csv', encoding='utf-8')# 获取文本数据和标签
X = df['text'].values
y = df['label'].valuesvectorizer = CountVectorizer()
X = vectorizer.fit_transform(X)clf = svm.SVC() #创建一个SVC对象,并使用fit方法拟合数据
clf.fit(X, y)new_text = np.array(["这个电影非常棒"])  #假设有一个新的文本数据new_text
new_text = vectorizer.transform(new_text)
prediction = clf.predict(new_text)print(prediction)   #prediction是一个数组,包含了预测结果

如果你的数据来源于一个txt文本中的很多句子,句子和标签之间用逗号分隔,示例如下:

这个电影太好看了,1
这个电影真是太差了,0
我喜欢这个电视剧,1
这个电视剧太无聊了,0
from sklearn.feature_extraction.text import CountVectorizer
import numpy as np
from sklearn import svm# 读取txt文件
with open('data.txt', 'r', encoding='utf-8') as file:lines = file.readlines()sentences = []
labels = []# 分割句子和标签
for line in lines:line = line.strip()  # 去除换行符和空格sentence, label = line.split(',')  # 使用逗号分隔句子和标签sentences.append(sentence)labels.append(label)y=np.array(labels)vectorizer = CountVectorizer()
X = vectorizer.fit_transform(sentences)clf = svm.SVC() #创建一个SVC对象,并使用fit方法拟合数据
clf.fit(X, y)new_text = np.array(["这个电影非常棒"])  #假设有一个新的文本数据new_text
new_text = vectorizer.transform(new_text)
prediction = clf.predict(new_text)print(prediction)   #prediction是一个数组,包含了预测结果

示例中使用了简单的词袋模型,将每个文本表示为一个向量,其中每个维度表示一个词的出现次数,使用CountVectorizer实现了这一步骤。

程序输出结果如下:

[1]

相关文章:

  • 设计模式之单例模式的懒饿汉
  • 【JAVA GUI+MYSQL]社团信息管理系统
  • Vue-cli
  • UV贴图和展开初学者指南
  • x-cmd pkg | usql - SQL 数据库的通用交互界面
  • Zookeeper+Kafka概述
  • 构建中国人自己的私人GPT
  • RT-Thread入门笔记2-动态内存堆的使用
  • Docker安装Nacos2.2.3并鉴权、Prometheus监听Nacos、Grafana监控Nacos【亲测可用】
  • Redis 7.0性能大揭秘:如何优化缓存命中率?
  • react+AntDesign 之 pc端项目案例
  • SpikingJelly笔记之泊松编码
  • Linux备忘手册
  • ML:2-4理解python如何实现forward prop
  • TypeScript使用技巧内置工具类型详解
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • 30秒的PHP代码片段(1)数组 - Array
  • eclipse(luna)创建web工程
  • FineReport中如何实现自动滚屏效果
  • httpie使用详解
  • JavaScript设计模式之工厂模式
  • Linux中的硬链接与软链接
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • Python连接Oracle
  • Swift 中的尾递归和蹦床
  • 高程读书笔记 第六章 面向对象程序设计
  • 给初学者:JavaScript 中数组操作注意点
  • 前端之Sass/Scss实战笔记
  • 实现简单的正则表达式引擎
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 一个项目push到多个远程Git仓库
  • 云大使推广中的常见热门问题
  • zabbix3.2监控linux磁盘IO
  • 阿里云ACE认证之理解CDN技术
  • 阿里云API、SDK和CLI应用实践方案
  • ​ssh免密码登录设置及问题总结
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • "无招胜有招"nbsp;史上最全的互…
  • # include “ “ 和 # include < >两者的区别
  • (C语言)字符分类函数
  • (LeetCode C++)盛最多水的容器
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (二)Linux——Linux常用指令
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (三)终结任务
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • .jks文件(JAVA KeyStore)
  • .mysql secret在哪_MySQL如何使用索引
  • .net core Swagger 过滤部分Api
  • .net core webapi 部署iis_一键部署VS插件:让.NET开发者更幸福
  • .net6Api后台+uniapp导出Excel
  • .netcore 6.0/7.0项目迁移至.netcore 8.0 注意事项
  • .NetCore 如何动态路由
  • .vimrc php,修改home目录下的.vimrc文件,vim配置php高亮显示