机器学习(七)——SVM

目录

一、SVM概述

二、基本思想

三、相关知识

3.1   最大化间隔

3.2   核函数

3.3    正则化

四、SVM实现

五、实验总结


一、SVM概述

支持向量机是一种监督学习算法,其基本目标是找到一个最优超平面或者称为决策边界,可以在不同类别的数据点之间进行最佳分类。SVM在数据分类、回归分析和异常检测等领域都有广泛的应用。

二、基本思想

SVM的基本思想是通过找到一个能够将样本正确划分并且能够具有最大间隔的超平面来进行分类任务。这个超平面使得不同类别的样本点之间的间隔最大化,从而提高分类的准确性和泛化能力。 具体来说,SVM的基本思想包括以下几个关键点:

1. 最大化间隔:SVM试图找到一个超平面,使得它与不同类别的样本点之间的间隔最大化。这样可以提高分类的鲁棒性,使得分类器对新样本的泛化能力更强

2. 使用支持向量:SVM通过寻找支持向量(即离超平面最近的样本点),来确定超平面的位置和方向。这些支持向量决定了超平面的最优位置,并且对分类起到关键作用

3. 引入核函数:对于非线性可分的情况,SVM使用核函数将样本映射到高维空间,从而使得原本在低维空间中分隔困难的样本在高维空间中变得线性可分

4.正则化:对模型增加正则化项,可以有效控制模型的复杂度,提高模型的泛化能力,对于处理高维数据和大规模数据时会更加有效。

三、相关知识

3.1   最大化间隔

超平面方程:w^{T}+b=0

分类间隔为:   \frac{2}{\left \| w \right \|}

最大化间隔: 寻找参数wb , 使得

最大

3.2   核函数

核函数是支持向量机中用于处理非线性分类问题的重要概念。在原始的特征空间中,某些问题可能是线性不可分的,也就是说无法用一个超平面将不同类别的样本正确分类。为了解决这个问题,引入了核函数的概念。 核函数能够将原始的特征空间中的数据映射到更高维的特征空间中,通过这种映射,原本在低维空间中线性不可分的问题可能在高维空间中变得线性可分。而在高维空间中,我们可以更容易找到一个超平面来划分数据。 在SVM中,核函数通常用于计算样本之间的内积,从而避免了显式地进行高维空间的特征转换,节省了计算资源。常用的核函数包括线性核函数、多项式核函数、高斯核函数等。

3.3    正则化

在SVM中,正则化通常通过引入正则化项来实现。正则化项会在损失函数中添加一个惩罚项,以阻止模型参数过大的增长,从而使得模型更加平滑和泛化能力更强。 常用的正则化项有L1正则化和L2正则化:

L1正则化:通过向损失函数添加参数向量的L1范数,可以使得部分参数变为零,从而达到特征选择和稀疏性的作用。

L2正则化:通过向损失函数添加参数向量的L2范数,可以避免参数过大,保持参数的平滑性和稳定性。

四、SVM实现

import numpy as np
import matplotlib.pyplot as plt


np.random.seed(10)
X = np.r_[np.random.randn(20, 2) - [2, 2], np.random.randn(20, 2) + [2, 2]]
Y = [0] * 20 + [1] * 20

# 将Y转换为±1
Y = np.array([-1 if y == 0 else 1 for y in Y])

# 根据权重和偏置绘制决策边界
def plot_decision_boundary(X, y, w, b):
    plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.coolwarm, s=30)
    ax = plt.gca()
    xlim = ax.get_xlim()
    ylim = ax.get_ylim()
    xx, yy = np.meshgrid(np.linspace(xlim[0], xlim[1], 50), np.linspace(ylim[0], ylim[1], 50))
    Z = w[0] * xx + w[1] * yy + b
    Z = np.sign(Z)
    Z = Z.reshape(xx.shape)
    plt.contour(xx, yy, Z, colors='k', levels=[-1, 0, 1], alpha=0.5, linestyles=['--', '-', '--'])
    plt.show()

# 训练SVM模型
def train_svm(X, y, learning_rate=0.1, n_iterations=1000):
    n_samples, n_features = X.shape
    w = np.zeros(n_features)
    b = 0
    for _ in range(n_iterations):
        for idx, x_i in enumerate(X):
            condition = y[idx] * (np.dot(x_i, w) - b) >= 1
            if condition:
                w -= learning_rate * (2 * 1/n_iterations * w)
            else:
                w -= learning_rate * (2 * 1/n_iterations * w - np.dot(x_i, y[idx]))
                b -= learning_rate * y[idx]
    return w, b

# 训练模型并绘制决策边界
w, b = train_svm(X, Y)
plot_decision_boundary(X, Y, w, b)

运行结果



五、实验总结

SVM被广泛应用在模式识别、机器学习和数据挖掘领域的监督学习方法。 主要用于二分类问题,但也可以通过一对多或一对一的方法进行多类分类,除了用于分类,SVM也可用于解决回归问题。

支持向量机的优点:对于含有大量特征属性的小样本有很强的鲁棒性、对于简单和复杂的分类模型都有很强的学习能力、如果采用复杂的数学模型可以避免过拟合现象

训练好的模型的算法复杂度是由支持向量的个数决定的,而不是由数据的维度决定的。所以 SVM 不太容易产生 overfitting。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值