问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

机器学习基础算法 (三)支持向量机(SVM)

创作时间:
作者:
@小白创作中心

机器学习基础算法 (三)支持向量机(SVM)

引用
CSDN
1.
https://blog.csdn.net/liu1983robin/article/details/144918775

支持向量机(SVM)是一种在机器学习领域广泛应用的经典算法,主要用于分类和回归任务。其核心思想是在高维空间中寻找一个最佳的分割超平面,以实现对不同类别数据的有效区分。本文将从SVM的基本原理出发,深入探讨其在Python中的具体实现,并通过实际案例进行演示。

一、SVM的基本原理

支持向量机的目标是通过选择一个最优的超平面来划分不同类别的样本点。这个超平面能够使得两类样本之间的间隔(即“边界”)最大化,从而提高模型的泛化能力。

在SVM中,我们不仅仅是寻找一个超平面来划分样本,而是希望找到一个最大化类别间隔的平面。这个间隔的最大化可以用以下公式来表达:

SVM通过解决这个二次优化问题,找到最优的超平面并将数据点分类。

1. 线性SVM

当数据是线性可分时,SVM能够通过一个简单的线性超平面来分割数据。假设数据集为 ({(x_i, y_i)}),其中 (x_i) 为输入数据,(y_i) 为标签,SVM的目标是找到一个最佳的超平面 (w \cdot x + b = 0),使得数据点满足间隔最大化的条件。

2. 非线性SVM

当数据不可线性分割时,SVM可以通过引入核函数将数据从原始空间映射到高维空间,进而在高维空间中找到一个线性超平面来进行分类。这种映射过程通过使用核技巧(Kernel Trick)来避免显式计算高维空间的特征。

常见的核函数包括:

二、SVM的Python实现

SVM可以通过Python中的scikit-learn库实现,该库提供了简单易用的API来进行SVM分类和回归任务。

1. 导入必要的库

import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report, confusion_matrix

2. 加载数据集

我们将使用sklearn中的鸢尾花(Iris)数据集进行分类实验。

# 加载鸢尾花数据集
iris = datasets.load_iris()
X = iris.data  # 特征
y = iris.target  # 标签

3. 数据集划分

将数据集划分为训练集和测试集。

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号