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

news/2024/7/9 8:33:26 标签: 支持向量机, 算法, sklearn

【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.niftyadmin.cn/n/4938439.html

相关文章

react组件化开发详解

React是一个流行的JavaScript库,用于构建用户界面,并且以组件化的方式进行开发。下面将详解React组件化开发的概念和步骤: 组件化思维: 组件化开发是将复杂的用户界面划分为独立、可重用的小部件(组件)。…

1.4 数据库管理与优化

数据库管理与优化 文章目录 数据库管理与优化1. 数据库概述1.1 数据库的定义和作用1.2 数据库管理系统(DBMS) 2. 数据库模型2.1 关系型数据库**2.2 非关系型数据库 3. 数据库设计3.1 数据库设计原则3.2 数据库设计步骤 4. 数据库优化4.1 数据库性能优化4…

终极代码随想录 DAY60 最后一天

说是最后一天 其实后面还有图论和等等什么的 不过算是代码训练营的最后一天吧 还是历经整整3个月终于刷完了 主要因为是转行 其中很多算法根本没接触过 耗费了比较多的时间 不过嵌入式对算法的话要求也没那么高 后面就是hot100 和剑指offer之类的 就差不多了 class Solution …

EXCEL按列查找,最终返回该列所需查询序列所对应的值,VLOOKUP函数

EXCEL按列查找,最终返回该列所需查询序列所对应的值 示例:国标行业分类汉字,匹配id 使用VLOOKUP函数 第一参数:拿去查询的值。 第二参数:匹配的数据。 Ps:Sheet1!$C 21 : 21: 21:E 117 ,需要…

新增守护进程管理、支持添加MySQL远程数据库,支持PHP版本切换,1Panel开源面板v1.5.0发布

2023年8月14日,现代化、开源的Linux服务器运维管理面板1Panel正式发布v1.5.0版本。 在这个版本中,1Panel新增了守护进程管理功能;支持添加MySQL远程数据库;支持添加FTP/S和WebDAV的SFTP服务;支持PHP版本切换。此外&am…

Dynamics 365 视图

1 视图分类 如图,视图分为查找视图、关联视图、公共视图三类。其中查找视图又可分为查找视图、高级查找视图、快速查找视图。 查找视图从名称来看,就是查找记录使用的,相当于预置了一些过滤条件,且控制查询的结果展示的列。只不过使用的位置不同,具体如下。 公共视图是最…

从安全角度分析Angular本地存储

随着Web应用程序的不断增长,前端开发人员慢慢意识到使用浏览器提供的本地存储技术可以在不使用外部数据库的情况下方便地保存应用程序的数据。Angular作为目前最流行的前端框架之一,也在其API中提供了许多本地存储技术的支持。但是,在使用本地…

基于LVQ神经网络的乳腺肿癌诊断

1.案例背景 1.1 LVQ 神经网络概述 学习向量量化(Learning Vector Quantization,LVQ)神经网络是一种用于训练竞争层的有监督学习(supervisedlearning)方法的输人前向神经网络,其算法是从Kohonen竞争算法演化而来的。LVQ神经网络在模式识别和优化领域有着广泛的应用。 1…