【Sklearn】基于支持向量机算法的数据分类预测(Excel可直接替换数据)

news2024/11/25 16:37:43

【Sklearn】基于支持向量机算法的数据分类预测(Excel可直接替换数据)

  • 1.模型原理
    • 1.1 数学模型
    • 1.2 模型原理
  • 2.模型参数
  • 3.文件结构
  • 4.Excel数据
  • 5.下载地址
  • 6.完整代码
  • 7.运行结果

1.模型原理

支持向量机(Support Vector Machine,SVM)是一种用于分类和回归的监督学习算法,其基本思想是在特征空间中找到一个能够最大化分类间隔(Margin)的超平面,从而将不同类别的样本正确分类。以下是SVM的数学模型和模型原理的解释:

1.1 数学模型

假设我们有一个训练数据集,包含 N N N个样本,每个样本由特征向量 X i X_i Xi和对应的标签 y i y_i yi组成,其中 X i X_i Xi是一个 n n n维特征向量, y i y_i yi是样本的标签(+1表示正例,-1表示负例)。

SVM的分类目标是找到一个超平面,它可以将不同类别的样本分开,并且使得两个类别的样本都尽可能远离这个超平面。这个超平面可以表示为:

w ⋅ x + b = 0 w \cdot x + b = 0 wx+b=0

其中, w w w是法向量(权重向量)决定了超平面的方向, b b b是偏差(截距), x x x是特征向量。

SVM的基本分类问题可以定义为:

Minimize 1 2 ∣ ∣ w ∣ ∣ 2 Subject to y i ( w ⋅ x i + b ) ≥ 1 for all  i = 1 , 2 , … , N \begin{align*} \text{Minimize} \quad & \frac{1}{2} ||w||^2 \\ \text{Subject to} \quad & y_i (w \cdot x_i + b) \geq 1 \quad \text{for all } i = 1, 2, \ldots, N \end{align*} MinimizeSubject to21∣∣w2yi(wxi+b)1for all i=1,2,,N

这里的目标是最小化 w w w的范数(求解一个最大间隔),约束条件确保每个样本都在正确的一侧,距离超平面足够远。

1.2 模型原理

  1. 最大间隔: SVM的核心思想是寻找一个能够最大化分类间隔(Margin)的超平面。Margin是指离超平面最近的样本点到超平面的距离之和,SVM试图找到一个超平面,使得Margin最大。

  2. 支持向量: 在分类问题中,离超平面最近的样本点被称为支持向量(Support Vectors)。它们是决定超平面位置的关键点,而其他样本点对于超平面的位置没有影响。

  3. 软间隔与松弛变量: 在实际数据中,样本不一定总是线性可分的。为了应对这种情况,SVM引入了松弛变量(Slack Variables),允许一些样本处于Margin内部,甚至错分。这就是软间隔(Soft Margin)的概念。

  4. 核函数: SVM可以通过核函数将低维特征映射到更高维的特征空间,从而可以处理非线性分类问题。常用的核函数有线性核、多项式核、高斯核等。

  5. 优化问题: SVM的分类问题可以转化为一个凸优化问题,可以使用凸优化算法(如序列最小优化算法、SMO)求解。

  6. 对偶问题: SVM的优化问题可以通过拉格朗日对偶性转化为对偶问题,这可以使得求解过程更高效,尤其在高维空间中。

总之,SVM通过找到一个最大化分类间隔的超平面,利用支持向量和核函数等方法,实现了对线性和非线性分类问题的有效解决。其模型原理基于凸优化和最大间隔思想,使得它在许多实际问题中都表现出色。

2.模型参数

SVC类的构造函数可以接受多个参数来配置支持向量机模型的行为。以下是一些常用的参数及其说明:

  1. C: 正则化参数,控制了决策边界的平衡,较小的值会使模型倾向于更大的边界,较大的值会使模型尽量正确分类每个样本。默认为1.0。

  2. kernel: 核函数,用于将数据映射到高维空间。常见的核函数包括’linear’(线性核)、‘poly’(多项式核)、‘rbf’(高斯核)等。默认为’rbf’。

  3. degree: 当使用多项式核函数时,表示多项式的次数。默认为3。

  4. gamma: 核函数系数,控制了数据点的影响范围。对于’rbf’和’poly’核函数,较小的gamma值将导致决策边界平滑,较大的值将导致决策边界适应训练数据。默认为’scale’,即1 / (n_features * X.var())。

  5. coef0: 核函数的独立项,在’poly’和’sigmoid’核函数中使用。默认为0.0。

  6. shrinking: 是否使用收缩启发式算法来加速训练。默认为True。

  7. probability: 是否启用概率估计。默认为False。

  8. tol: 停止优化的容忍度。默认为1e-3。

  9. class_weight: 类别权重,用于处理不平衡数据集。

  10. verbose: 控制模型的详细程度。默认为False。

以下是使用SVC构造函数的一个例子:

from sklearn.svm import SVC
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 加载Iris数据集
iris = load_iris()
X = iris.data
y = iris.target

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 创建SVM模型
model = SVC(C=1.0, kernel='linear', gamma='scale')

# 在训练集上训练模型
model.fit(X_train, y_train)

# 在测试集上进行预测
y_pred = model.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)

在这个例子中,我们加载了Iris数据集,然后使用SVC模型进行训练和预测。你可以根据你的数据和任务需求,调整不同的参数来获得更好的模型性能。

3.文件结构

在这里插入图片描述

iris.xlsx						% 可替换数据集
Main.py							% 主函数

4.Excel数据

在这里插入图片描述

5.下载地址

- 资源下载地址

6.完整代码

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score, confusion_matrix
import matplotlib.pyplot as plt
import seaborn as sns

def svm_classification(data_path, test_size=0.2, random_state=42):
    # 加载数据
    data = pd.read_excel(data_path)

    # 分割特征和标签
    X = data.iloc[:, :-1]  # 所有列除了最后一列
    y = data.iloc[:, -1]   # 最后一列

    # 划分训练集和测试集
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=test_size, random_state=random_state)

    # 创建SVM模型
    # 1. ** C: ** 正则化参数,控制了决策边界的平衡,较小的值会使模型倾向于更大的边界,较大的值会使模型尽量正确分类每个样本。默认为1.0。
    # 2. ** kernel: ** 核函数,用于将数据映射到高维空间。常见的核函数包括'linear'(线性核)、'poly'(多项式核)、'rbf'(高斯核)等。默认为'rbf'。
    # 3. ** degree: ** 当使用多项式核函数时,表示多项式的次数。默认为3。
    # 4. ** gamma: ** 核函数系数,控制了数据点的影响范围。对于'rbf'和'poly'核函数,较小的gamma值将导致决策边界平滑,较大的值将导致决策边界适应训练数据。
    # 默认为'scale',即1 / (n_features * X.var())。
    # 5. ** coef0: ** 核函数的独立项,在'poly'和'sigmoid'核函数中使用。默认为0.0。
    # 6. ** shrinking: ** 是否使用收缩启发式算法来加速训练。默认为True。
    # 7. ** probability: ** 是否启用概率估计。默认为False。
    # 8. ** tol: ** 停止优化的容忍度。默认为1e - 3。
    # 9. ** class_weight: ** 类别权重,用于处理不平衡数据集。
    # 10. ** verbose: ** 控制模型的详细程度。默认为False。

    model = SVC(C=1.0, kernel='linear', gamma='scale')

    # 在训练集上训练模型
    model.fit(X_train, y_train)

    # 在测试集上进行预测
    y_pred = model.predict(X_test)

    # 计算准确率
    accuracy = accuracy_score(y_test, y_pred)
    return confusion_matrix(y_test, y_pred), y_test.values, y_pred, accuracy

if __name__ == "__main__":
    # 使用函数进行分类任务
    data_path = "iris.xlsx"
    confusion_mat, true_labels, predicted_labels, accuracy = svm_classification(data_path)

    print("真实值:", true_labels)
    print("预测值:", predicted_labels)
    print("准确率:{:.2%}".format(accuracy))

    # 绘制混淆矩阵
    plt.figure(figsize=(8, 6))
    sns.heatmap(confusion_mat, annot=True, fmt="d", cmap="Blues")
    plt.title("Confusion Matrix")
    plt.xlabel("Predicted Labels")
    plt.ylabel("True Labels")
    plt.show()

    # 用圆圈表示真实值,用叉叉表示预测值
    # 绘制真实值与预测值的对比结果
    plt.figure(figsize=(10, 6))
    plt.plot(true_labels, 'o', label="True Labels")
    plt.plot(predicted_labels, 'x', label="Predicted Labels")

    plt.title("True Labels vs Predicted Labels")
    plt.xlabel("Sample Index")
    plt.ylabel("Label")
    plt.legend()
    plt.show()

7.运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/876370.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【从零学习python 】20. Python列表操作技巧及实例

文章目录 列表推导式练习 列表的复制列表的copy方法copy模块的使用浅拷贝深拷贝 切片 进阶案例 列表推导式 所谓的列表推导式,就是指的轻量级循环创建列表 基本的方式 在循环的过程中使用if 2个for循环 3个for循环 练习 请写出一段 Python 代码实现分组一…

WebDAV之π-Disk·派盘+Commander One

Commander one是一款为Mac用户设计的双窗格文件管理器,Commander One专业版在原先的版本功能拥有较大的提升。Commander One PRO可以帮助大家将文件从一个地方复制到另一个地方,支持多标签浏览、搜索、自定义热键设置、显示隐藏文件等功能。 π-Disk派盘 – 知识管理专家 派…

VLLM推理流程梳理

0x0. 前言 本文在对VLLM进行解析时只关注单卡情况,忽略基于ray做分布式推理的所有代码。 0x1. 运行流程梳理 先从使用VLLM调用opt-125M模型进行推理的脚本看起: from vllm import LLM, SamplingParams# Sample prompts. prompts ["Hello, my n…

Dedecms V110最新版RCE---Tricks

前言 刚发现Dedecms更新了发布版本,顺便测试一下之前的day有没有修复,突然想到了新的tricks去实现RCE。 文章发布的时候估计比较晚了,一直没时间写了。 利用 /uploads/dede/article_string_mix.php /uploads/dede/article_template_rand.…

ansible入门

ansible入门 一.ansible 背景介绍 Ansible 是一个广受欢迎的 IT 自动化系统。可以用来处理配置管理、应用自动化部署、云资源配给、网络 自动化和多借点部署等任务。其也可以使得复杂的变更如带负载均衡的零停机滚动更新更加容易。Ansible.com 1.1 自动化运维概念 1.1.1 运维…

AMEYA360:DNB1101大唐恩智浦工规级电池管理芯片

大唐恩智浦作为全球领先的半导体供应商,一直致力于为全球客户提供高质量的解决方案。在电池管理芯片领域,大唐恩智浦推出的DNB1101可谓是一款工规级的电池管理芯片,其卓越的性能和可靠性成为市场上备受全球领先的半导体供应商,一直…

背上大书包准备面试之CSS篇

目录 H5 新特性 css3新特性? 为什么要初始化css样式? 浏览器兼容性问题? css sprites(css精灵图)? css盒模型是什么样的? 页面中一个块元素的宽度包含了盒模型中的哪些部分?…

SpringBoot复习:(48)RedisAutoConfiguration自动配置类

RedisAutoConfiguration类代码如下: 可以看到在这个类中配置了2个bean: redisTemplate和stringRedisTemplate. 而它通过EnableConfigurationProperties(RedisProperties.class)注解,把配置文件中配置的Redis相关的信息引入进来了,RedisPrope…

EB配置------PORT(一)

今天学习了PortPinInputPullResistor 这个配置。 虽然它配置为输出后显示不可更改,但是它默认的配置依然有效。 该参数允许为所选端口引脚配置内部拉电阻[向上/向下]。 注意:此参数的默认值设置为相应SFR的重置值。 PORT_PIN_IN_NO_PULL:…

python 异步任务框架 Celery 入门,速看!

一、简介 Celery 是使用 python 编写的分布式任务调度框架。 它有几个主要的概念: celery 应用 用户编写的代码脚本,用来定义要执行的任务,然后通过 broker 将任务发送到消息队列中 broker 代理,通过消息队列在客户端和 worke…

Java有哪些应用领域?

Java是一种广泛使用的编程语言,它在全球范围内拥有数百万的开发者,Java既简单又强大,它可以用于开发各种类型的应用程序,从桌面应用程序到大型企业级系统。Java主要应用于金融、电商、嵌入式、大数据技术等领域。 1.金融行业。许多…

【校招VIP】产品深入分析之电商运营

考点介绍: 电商类产品运营分析是面试里经常遇到的问题,作为产品经理,需要对主流电商,比如淘宝、京东、拼多多等模式、打法有深入的理解。 在分析问题的时候,可以从场景(如618)、用户群体和模式、…

大专同事,7天开发了一套应用管理系统

目录 一、前言 二、如何基于工具实现应用开发? 三、低代码基本功能及操作 体验过程: 01、连接数据源 02、设计表单 03、流程设计 04、图表呈现 05、组织架构设置 五、效率评价 六、小结 一、前言 众所周知,每家公司在发展过程中都需要构建大量…

ChatGPT: 提升程序员开发效率的秘密武器!

引言 在现代软件开发中,时间和效率显得尤为重要。程序员们需要在尽可能短的时间内编写高质量的代码,并使之处于状态良好的维护周期。为满足这些需求,人工智能技术逐渐成为软件开发的一项核心能力。ChatGPT作为自然语言生成模型中的佼佼者&am…

uniapp开发微信小程序底部地区选择弹框

个人项目地址: SubTopH前端开发个人站 (自己开发的前端功能和UI组件,一些有趣的小功能,感兴趣的伙伴可以访问,欢迎提出更好的想法,私信沟通,网站属于静态页面) SubTopH前端开发个人站…

你选的产品真的适合做独立站吗?用这5种方法测试一下吧!

跨境电商行业圈里流行一句话“七分靠选品,三分靠运营”,一个独立站新手卖家要想在跨境电商这个庞大的行业体系里分得一块蛋糕,不深入了解一些选品的技巧恐怕很难做出成绩来。 很多独立站赚不到钱的原因在于选品上的失败,如果你的…

蓝绿灰度发布的介绍

背景介绍 蓝绿灰度发布 介绍 蓝绿部署中,一共有两套系统:一套是正在提供服务系统(也就是上面说的旧版),标记为绿色;另一套是准备发布的系统,标记为蓝色。两套系统都是功能完善的,并且正在运行的系统&…

个微CRM管理系统,都有哪些功能?

微信CRM管理系统是一种优化整个公司的工作流程以改善客户管理的工具。 不仅可以提升微信CRM管理系统的创建,还可以提升现有客户的质量。 那么很多人就想问,微信CRM管理系统都有哪些功能呢? 1、多个微信号聚合聊天,解决微信来回…

通达信接口怎么调用?(通达信量化接口)准确吗?

通达信(DXFeed/TDX)接口是一个常用的股票行情数据接口,在中国股市数据分析和量化交易中应用广泛。下面我将介绍一种通达信接口的调用方式,但请注意,该方式可能存在变化和不准确之处,具体的调用方式还需参考官方文档或其他可靠来源…

Redis数据结构——字典

字典是一种用来保存键值对的数据结构。 在字典中,一个key与一个value相对应,字典中的key是唯一的。 在Redis中字典使用哈希表作为底层实现,用数组来表示一个哈希表,每个元素都是一对key-value 同样,在Redis中字典由三…