Python机器学习实战:分类算法之支持向量机-垃圾邮件识别
为了解决特定问题而进行的学习是提高效率的最佳途径。这种方法能够使我们专注于最相关的知识和技能,从而更快地掌握解决问题所需的能力。
目录
支持向量机算法介绍
练习题
Python代码与分析
支持向量机和朴素贝叶斯的联系
支持向量机算法介绍
支持向量机(Support Vector Machine, SVM)是一种监督学习算法,主要用于分类和回归问题。它是一种非常强大的模型,因其在高维空间中进行线性和非线性分类的能力而受到广泛欢迎。以下是SVM的一些基本概念和特点:
-
线性可分性:SVM最初设计用于解决线性可分问题,即数据点可以通过一个超平面清晰地分开成不同的类别。
-
最大间隔:SVM试图找到一个超平面,使得它与最近的数据点(支持向量)之间的距离最大化。这个距离被称为间隔(margin),最大化间隔可以提高模型的泛化能力。
-
核技巧:SVM通过核函数将数据映射到更高维的空间,以解决非线性问题。常用的核函数包括线性核、多项式核、径向基函数(RBF)核等。
-
优化问题:SVM的训练过程可以看作是一个凸优化问题,目标是找到最大化间隔的同时最小化分类误差的解。这保证了找到的解是全局最优解。
-
软间隔和正则化:在实际应用中,数据可能不是完全线性可分的。SVM通过引入软间隔和正则化参数(如C)来允许一定量的误差,以避免过拟合。
-
多类分类:SVM最初是为二分类问题设计的,但可以通过多种策略扩展到多类分类问题,如一对一(OvR)、一对余(OvO)等。
-
回归问题:SVM也可以用于回归问题,称为支持向量回归(SVR),它尝试找到一条曲线,使得实际值和预测值之间的误差在一定阈值内。
-
模型评估:SVM模型的性能通常通过准确率、召回率、F1分数等指标来评估。
SVM是一种非常灵活且强大的算法,适用于许多不同的问题,但它也有一些局限性,比如对核函数和正则化参数的选择敏感,以及在处理大规模数据集时可能需要较长的训练时间。
练习题
对已标注出垃圾邮件和正常邮件的csv文件实现支持向量机算法分类。
Python代码与分析
前6步骤和我们在朴素贝叶斯分类算法介绍的过程一样,主要是数据处理部分。为了分析的完整性,我们将前6步骤再展示一遍。
1、加载必要的Python库。
此时要导入的是sklearn.svm库中的SVC类。
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.svm import SVC # 导入支持向量机的类
from sklearn import metrics
from sklearn.metrics import classification_report, confusion_matrix
import matplotlib.pyplot as plt
2、读取csv文件,把csv文件读入到一个pandas的DataFrame对象里。
然后对数据里面的NULL值,用空字符串(即'')代替。
df1 = pd.read_csv('spamham.csv')
df = df1.where(pd.notnull(df1))
df.head() # 查看数据前5行
3、对Category列进行变换,将取值ham和spam分别改成1或者0,以便进行后续机器学习的训练。
df.loc[df['Category'] == 'ham', 'Category'] = 1
df.loc[df['Category'] == 'spam', 'Category'] = 0
df.head()
4、把Message列作为x,Category列作为y。
df_x = df['Message']
df_y = df['Category']
5、划分数据集,80%用于训练模型,20%用于测试模型。
x_train, x_test, y_train, y_test = train_test_split(df_x, df_y, test_size = 0.2)
6、把Message数据列(x列)转换成机器学习的特征值(关键步骤)。
在这里采用文本的TF-IDF特征。TF表示单个文档里的某个词项的频率,IDF表示整个文集中词项的逆文档频率。IDF把在很多文档中都出现的但对于文档的类别划分没有太多贡献的词项的重要性降低。
tfvec = TfidfVectorizer(min_df = 1, stop_words = 'english', lowercase = True)
x_trainFeat = tfvec.fit_transform(x_train)
x_testFeat = tfvec.transform(x_test)
7、创建支持向量机分类模型,对其进行训练,并且利用模型对测试集进行预测。
在此之前,把训练集中的y转换成整数形式。
y_trainSvm = y_train.astype('int')
classifierModel = SVC(kernel='linear', probability=True)
classifierModel.fit(x_trainFeat, y_trainSvm)
y_pred = classifierModel.predict(x_testFeat)
8、把测试集的y转换成整数形式,对上述模型的预测值进行比较,显示分类器混淆矩阵和分类报告。
y_test = y_test.astype('int')
print(confusion_matrix(y_test, y_pred))
print(classification_report(y_test, y_pred))
从以上混淆矩阵和分类报告中可以看出,该模型在类别0(垃圾邮件)和类别1(正常邮件)上的预测表现非常好,具有较高的精确度、召回率和F1分数。
总体而言,模型的准确度为98%,表明其在大多数情况下能够正确分类样本。
9、绘制ROC曲线
y_pred_prob = classifierModel.predict_proba(x_testFeat)
fpr, tpr, thresholds = metrics.roc_curve(y_test, y_pred_prob[:,1])
auc = metrics.auc(fpr, tpr)
print(auc)
auc = 0.9897103887520279
plt.rcParams['font.sans-serif'] = ['Heiti TC']
plt.rcParams['axes.unicode_minus'] = False
plt.plot(fpr, tpr, lw = 2, label = 'ROC曲线(面积 = {:.2f})'.format(auc))
plt.plot([0,1],[0,1],'r--')
plt.xlabel('假正例率') # False Positive Rate
plt.ylabel('真正例率') # True Positive Rate
plt.title('ROC曲线示例') # Receiver operating characteristic example
plt.legend(loc = 'lower right')
plt.show()
图片中的ROC曲线示例展示了一个具有较高AUC值的分类器的性能,表明该模型在区分正负类方面表现良好。
支持向量机和朴素贝叶斯的联系
-
监督学习:SVM和朴素贝叶斯都是监督学习算法,需要有标签的数据集进行训练。
-
分类问题:两者都可以用于分类问题,尽管它们的工作原理和适用场景不同。
-
模型评估:无论是SVM还是朴素贝叶斯,都可以使用相同的评估指标(如准确率、召回率、F1分数)来评价模型性能。
-
模型选择:在实际应用中,根据问题的特性和数据集的特点,可能会选择SVM或朴素贝叶斯,或者将它们与其他算法结合使用。
-
算法优化:两者都有对应的优化技术,如SVM的核函数选择和朴素贝叶斯的特征选择。
在选择算法时,需要根据具体问题的需求、数据的特性以及预期的性能来决定使用哪种算法。在某些情况下,可能会使用集成方法,结合SVM和朴素贝叶斯的优点,以提高整体的分类性能。
都读到这里了,不妨关注、点赞支持一下吧!
相关文章:
Python机器学习实战:分类算法之支持向量机-垃圾邮件识别
为了解决特定问题而进行的学习是提高效率的最佳途径。这种方法能够使我们专注于最相关的知识和技能,从而更快地掌握解决问题所需的能力。 目录 支持向量机算法介绍 练习题 Python代码与分析 支持向量机和朴素贝叶斯的联系 支持向量机算法介绍 支持向量机&#…...
秒懂Linux之自动化构建工具-make/Makefile
目录 一.前文摘要 二.make/Makefile 一.前文摘要 在学习自动化构建工具前我们先来补充一下动静态库的相关指令 动态库指令 gcc -o 文件(重命名) 源文件 静态库指令 gcc -o 文件(重命名) 源文件 -static 二.make/Makefile 怎么形…...
.net core + vue 搭建前后端分离的框架
目录 步骤一:创建.NET Core后端项目 步骤二:创建Vue.js前端项目 步骤三:集成后端和前端项目 步骤一:创建.NET Core后端项目 安装.NET Core SDK: 确保你的开发环境中已安装了最新版本的.NET Core SDK。你可以从 .NET …...
小阿轩yx-KVM+GFS 分布式存储系统构建 KVM 高可用
小阿轩yx-KVMGFS 分布式存储系统构建 KVM 高可用 案例分析 案例概述 使用 KVM 及 GlusterFS 技术,结合起来实现 KVM 高可用利用 GlusterFS 分布式复制卷对 KVM 虚拟机文件进行分布存储和冗余 分布式复制卷 主要用于需要冗余的情况下把一个文件存放在两个或两个…...
centos安装mysql 5.7版本
因为要继续第二阶段的学习,windows里面的mysql版本,很多设置没有。因此弄了一个虚拟机,安装了centos,在里面安装mysql。 看了《centos安装mysql 5.7版本》里面有设置my.cnf文件,这个在虚拟机里面编辑,手动敲…...
SQL——查询sql执行顺序
在SQL查询中,虽然我们在编写查询时遵循一定的逻辑顺序(SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY),但实际上,数据库在执行这些查询时遵循的是不同的物理执行顺序。这个物理执行顺序是数据库管理系统࿰…...
钉耙编程(3)
1001深度自同构 Problem Description 对于无向图中的点,定义一个点的度为与其相连的边的条数。 对于一棵有根树,定义一个点的深度为该点到根的距离。 对于由若干有根树构成的森林,定义该森林是深度自同构的,当且仅当森林中任意…...
python 线程池处理文件
使用多线程来加速文件复制的过程,可以使用Python的concurrent.futures模块中的ThreadPoolExecutor。代码如下: import glob import os import shutil from concurrent.futures import ThreadPoolExecutordef copy_image(image):imagepath image.replace…...
AI技术和大模型对人才市场的影响
012024 AI技术和大模型 2024年AI技术和大模型呈现出多元化和深入融合的趋势,以下是一些关键的技术方向和特点: 1. 生成式AI 生成式AI(Generative AI)在2024年继续快速发展,它能够创造全新的内容,而不仅仅…...
解释“location”和“position”
Explanation of “Location” and “Position” Location and position are terms often used interchangeably in everyday language, but they can have distinct meanings depending on the context. Below, we explore their definitions, differences, and examples of u…...
Netty 必知必会(三)—— ByteBuf
Netty ByteBuf工作原理,和NIO里ByteBuffer区别? Java NIO 提供了ByteBuffer 作为它 的字节容器,但是这个类使⽤起来过于复杂,⽽且也有些繁琐。 ByteBuf是Netty框架中的一个关键类,专门设计来处理字节数据,…...
芋道以开源之名行下作之事 恬不知耻 标榜自己开源 公开源码+sql 不用再加入知识星球
资源 链接: https://pan.baidu.com/s/1TeuxbAUfLQ5_BqMBF1kniQ?pwdcqud 提 取码: cqud 依次为后端、补充版的sql、前端 此文档内安装部署等一应俱全...
wordpress中,wp_posts 文章的状态 有哪些,分别对应什么数值
在WordPress中,wp_posts 表存储了网站上的所有内容,包括文章(posts)、页面(pages)、自定义文章类型(custom post types)等。这个表有一个名为 post_status 的字段,用于标…...
输入成绩问题(c语言)
1.问题:期中考试开始了,大家想要取得好成绩,争夺前五名,从键盘输入n个学生成绩(不超过40个),输出每组的前五名的成绩 两行,第一行输入一个整数,表示n个学生(…...
基于域名+基于ip+基于端口的虚拟主机+上线商务系统
一、回顾 1.jdk环境 tomcat服务器需要jdk环境 版本对应 tomcat9>jdk1.8 配置系统变量JAVA_HOME sed -i $aexport JAVA_HOME/usr/local/jdk22/ /etc/profile sed -i $aexport PATH$JAVA_HOME/bin:$PATH /etc/profile source /etc/profile java -version java…...
vue每次路由跳转前将页面滚动到顶部
在Vue.js应用中,特别是使用Vue Router进行页面路由管理时,router.beforeEach是一个非常有用的导航守卫(Navigation Guard)。它允许你在路由跳转之前执行一些逻辑,比如权限验证、页面跳转前的数据加载、滚动位置重置等。…...
【Qt】QDateTimeEdit
在Qt中,QDateEdit是用于选择日期的微调框,QTimeEdit是用于选择小时和分钟的微调框 QDateTimeEdit则是基于QDateEdit和QTimeEdit的组合控件,能够同时显示日期和时间,并允许用户以交互方式编辑日期 常用属性 属性说明dateTime时间…...
Redis和Mysql如何保持数据一致性
一般情况下,Redis是用来实现应用和数据库之间读操作得缓存层,主要目的是减少数据库IO,还可以提升数据的IO性能。 当应用程序需要去读取某个数据时,会首先尝试去Redis里面加载,如果命中就直接返回,如果没有…...
Java中Optional相关
Java中Optional相关 orElse 提供默认值以确保不会返回 null。 适用于默认情况下的备选值或简单计算结果。 // 如果 optionalName 为空,返回 "Unknown" Optional<String> optionalName Optional.empty(); String result optionalName.orElse(&q…...
AI在HR候选人关系管理中的革新应用
一、引言 随着人工智能(AI)技术的快速发展,其在人力资源管理(HR)领域的应用也日益广泛。特别是在候选人关系管理方面,AI技术不仅提高了管理效率,还使得候选人体验得到了极大的改善。本文将深入分…...
HTML+CSS+JavaScript制作七夕表白网页(含音乐+自定义文字+烟花特效)
利用HTMLCSSJavaScript制作了一个简单的七夕表白网页: 这是一个简单的表白功能,可以用于小哥哥小姐姐在情人节向心爱的人表白使用点击信封中间的爱心,会出现一封信由信封向外展开,与此同时会有烟花绽放,并且自动播放背…...
【Python机器学习系列】一文教你实现决策树模型可视化(案例+源码)
这是我的第335篇原创文章。 一、引言 决策树是一个有监督分类模型,本质是选择一个最大信息增益的特征值进行输的分割,直到达到结束条件或叶子节点纯度达到阈值。根据分割指标和分割方法,可分为:ID3、C4.5、CART算法。每一种颜色代…...
如何在Python中使用网页抓取API获得Google搜索结果
SERP是搜索引擎结果页的缩写,它是你在百度、谷歌、Bing等搜索引擎中提交查询后所得到的页面。搜索引擎需要给所有页面做排序,把最能解决我们需求的页面展示给我们,企业会非常关注结果页的排序,也就是本企业内容的自然排名情况。手…...
Postman高频面试题及答案汇总(接口测试必备)
Postman在软件测试的面试中,可以说是必考题了,既然是高频考题,当然得为粉丝宝宝们整理一波题库喽~ 一、Postman在工作中使用流程是什么样的? 二、你使用过Postman的哪些功能? 三、Postman如何管理测试环境ÿ…...
JavaEE 初阶(13)——多线程11之“定时器”
目录 一. 什么是“定时器” 二. 标准库的定时器 三. 定时器的实现 MyTimer 3.1 分析思路 1. 创建执行任务的类。 2. 管理任务 3. 执行任务 3.2 线程安全问题 四. 拓展 一. 什么是“定时器” 定时器是软件开发中的一个重要组件,类似于一个“闹钟”࿰…...
2024最新全开源付费进群系统源码二开修复版 支持易支付
内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 全开源付费进群系统源码,开源无加密无授权,优化电脑端访问布局,支持dai理,对接易支付通道,dai理可以配置自己易支付接口&am…...
【奥顺苹果CMS二开泛目录4.X版】PHP站群程序新增首页堆砌关键词新增四套seo模板
演示站(赠送四套模板): https://macfan.qdwantong.com https://macfan2.qdwantong.com https://macfan3.qdwantong.com https://macfan4.qdwantong.com 4.X版程序特色功能: 后台除了可以设置干扰码、转码、插入符号和拼音这…...
day06 项目实践:router,axios
vue组件的生命周期钩子 今天几乎没有讲什么新内容,就是一起做项目,只有一个小小的知识点,就是关于vue组件的生命周期钩子,其中最重要的四个函数—— beforeCreate():组件创建之间执行 created():组件创建…...
⌈ 传知代码 ⌋ 基于矩阵乘积态的生成模型
💛前情提要💛 本文是传知代码平台中的相关前沿知识与技术的分享~ 接下来我们即将进入一个全新的空间,对技术有一个全新的视角~ 本文所涉及所有资源均在传知代码平台可获取 以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦&#x…...
软件测试必备技能
在软件测试领域,以下是一些必备的技能和能力,可以帮助你成为一名优秀的软件测试工程师: 1. 测试基础知识: 熟悉软件测试的基本概念、原则和流程,包括不同类型的测试(如单元测试、集成测试、系统测试&#…...
合肥网站优化/seo建站技术
1. 任务调度线程池 1.1 ScheduledThreadPoolExecutor 延时执行 示例代码(任务都延时1s执行): package com.tian;import java.util.Date; import java.util.concurrent.ExecutionException; import java.util.concurrent.Executors; import java.util.con…...
站嗨免费建站系统/广州最新消息
据外媒 techradar 消息,Linux 系统的发明人 Linus Torvalds 在参加一场活动时发表讲话,抨击英特尔目前禁止消费级平台使用 ECC 自动纠错内存的政策。在一场有关 AMD Ryzen 9 5000 系列处理器的讨论会中,Linus 在另一位参会者否认 ECC 内存的重…...
中英文网站用同域名/网站建设seo
内容摘要多租户容器数据库是Oracle 12c 版本比较重要的一个新特性,也是Oracle 12c OCM认证考试官方考试大纲中的重要考点 。本次课程带大家一起学习Oracle 12c 多租户容器数据库基本结构,介绍容器数据库CDB和PDB的连接访问方式,了解Oracle 12…...
政府网站信息内容建设/推广普通话手抄报模板可打印
在程序执行过程中,操作系统会进行线程调度,同一时刻能同时执行的程序数量跟CPU的内核线程数有关,比如4核CPU,同时最多只能有4个线程。Go 语言中的运行时系统也会对goroutine进行调度,调度器会频繁地让goroutine处于中断…...
做网页和做网站的区别/怎么免费建个人网站
Python第二十一课(反射/元类) >>>思维导图>>>中二青年 反射reflect 什么是反射, 其实是反省,自省的意思 反射指的是一个对象应该具备,可以检测,修改,增加自身属性的能力 反射就是通过字符串操作属性 涉及的四个函数,这四个函数就是普通的内置函数 没有双下…...
佛山网络营销网站/福州网站seo公司
大家自我介绍做的多了,那幽默有个性的自我介绍该怎么写呢?以下是本站小编为大家带来的搞笑自我介绍 3篇,希望能帮助到大家!搞笑自我介绍1大家好!我叫-,有句话说“相聚是缘&r...2020-11-05阅读全文 >>大学生简历中如何自我介绍比较好呢。以下是…...