机器学习之支持向量机(SVM)

一、支持向量机理论知识

1.1 什么是支持向量机?

支持向量机(Support Vector Machine,简称SVM)是一种监督学习模型,广泛应用于分类和回归分析中。SVM的目标是找到一个最佳的决策边界(超平面),将不同类别的样本尽可能地分开,同时最大化两类样本到决策边界的最小距离,即最大化分类间隔。

1.2 核函数

在实际应用中,很多数据并不是线性可分的。为了解决这一问题,SVM引入了核函数(Kernel Function),通过将数据映射到高维空间,使其在高维空间中线性可分。常用的核函数包括线性核、多项式核、高斯径向基函数(RBF核)等。

1.3 最大间隔分类器

SVM通过最大化分类间隔(Margin)来寻找最佳超平面。分类间隔定义为最近的训练样本到决策边界的距离。在线性可分的情况下,支持向量是位于分类间隔边界上的样本点。

1.4 SVM的优化目标

SVM的优化问题可以表示为:

                                min\frac{1}{2}\left | \left | w \right | \right |^{2}

其中,w是权重向量,同时需满足约束条件:

                                y_{i}(w\cdot x_{i}+b)\geq 1

其中,y_{i}​为样本的标签,x_{i}为样本特征,b为偏置项。

通过拉格朗日乘子法,可以将以上优化问题转换为对偶问题,从而使用更高效的算法进行求解。

二、具体实验案例

2.1 实验目的

通过一个具体案例,演示如何使用支持向量机进行二分类任务。实验将使用经典的鸢尾花数据集(Iris Dataset)中的两个类别,演示SVM的训练、预测和性能评估。

2.2 实验要求

  • Python编程环境
  • 安装必要的库:numpypandasscikit-learnmatplotlib

2.3 实验过程

1.导入必要的库和数据集

import numpy as np
import pandas as pd
from sklearn import datasets
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

# 导入Iris数据集
iris = datasets.load_iris()
X = iris.data
y = iris.target

# 仅选择两个类别的数据进行二分类
X = X[y != 2]
y = y[y != 2]

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

2.训练SVM模型

# 使用线性核函数训练SVM模型
svm_model = SVC(kernel='linear')
svm_model.fit(X_train, y_train)

3.模型预测和性能评估

# 模型预测
y_pred = svm_model.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f'准确率: {accuracy * 100:.2f}%')

# 混淆矩阵
conf_matrix = confusion_matrix(y_test, y_pred)
sns.heatmap(conf_matrix, annot=True, cmap='Blues', fmt='d')
plt.xlabel('预测标签')
plt.ylabel('真实标签')
plt.title('混淆矩阵')
plt.show()

2.4 实验数据

  • 数据集:鸢尾花数据集(Iris Dataset)
  • 特征:萼片长度、萼片宽度、花瓣长度、花瓣宽度
  • 标签:山鸢尾(Setosa)、变色鸢尾(Versicolour)

2.5 实验结果

  • 准确率:实验结果显示,SVM模型在测试集上的准确率约为98.33%。

  • 混淆矩阵  

2.6 实验代码

import numpy as np
import pandas as pd
from sklearn import datasets
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

# 导入Iris数据集
iris = datasets.load_iris()
X = iris.data
y = iris.target

# 仅选择两个类别的数据进行二分类
X = X[y != 2]
y = y[y != 2]

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

# 使用线性核函数训练SVM模型
svm_model = SVC(kernel='linear')
svm_model.fit(X_train, y_train)

# 模型预测
y_pred = svm_model.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f'准确率: {accuracy * 100:.2f}%')

# 混淆矩阵
conf_matrix = confusion_matrix(y_test, y_pred)
sns.heatmap(conf_matrix, annot=True, cmap='Blues', fmt='d')
plt.xlabel('预测标签')
plt.ylabel('真实标签')
plt.title('混淆矩阵')
plt.show()

2.7运行结果

2.8实验结果分析

实验代码成功运行后,输出的混淆矩阵图像显示SVM模型在鸢尾花数据集上达到了100%的准确率。混淆矩阵中,真实标签与预测标签完全一致,说明模型在测试集上没有任何分类错误。

图像展示了模型对两个类别的分类情况,每个类别的样本均被正确分类:

  • 真实为Setosa的19个样本全部被预测为Setosa。
  • 真实为Versicolour的25个样本全部被预测为Versicolour。

这个实验结果显示了SVM模型在处理该数据集上的强大分类能力。 ​

2.9 实验总结

通过本次实验,我们了解了如何使用支持向量机进行二分类任务。实验结果表明,SVM能够有效地对鸢尾花数据集进行分类,取得了较高的准确率。通过混淆矩阵的可视化,我们也可以直观地看到模型的分类效果。

支持向量机的优势在于其强大的分类能力和较好的泛化性能,尤其是在高维数据集上表现优异。然而,SVM在处理大规模数据集时的计算复杂度较高,需要更多的计算资源和时间。未来的工作可以尝试优化模型参数,使用不同的核函数,或者应用在其他更复杂的数据集上。

  • 23
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值