机器学习七———SVM

SVM的介绍

支持向量机(Support Vector Machine,SVM)是一种常用的监督学习模型,主要用于分类和回归问题。在分类问题中,SVM的目标是找到一个决策边界,可以将不同类别的数据点分开,同时最大化分类边界的间隔,这个边界被称为超平面。在回归问题中,SVM试图找到一个超平面,使得它到数据点的距离最小化。

特点

SVM的主要特点包括:

1. 能够处理高维数据空间:SVM通过使用核函数来将低维特征空间映射到高维空间,从而能够处理非线性分类问题

2. 最大化间隔:SVM寻找的超平面能够将数据点分开的同时,最大化分类边界的间隔,这意味着对新数据的分类偏差较小,对于真实数据能够更好地泛化

3. 鲁棒性:SVM在处理小样本数据时表现出较好的鲁棒性,能够更好地避免过拟合的问题

核心

SVM的核心思想是寻找一个可以最优地分割数据的超平面。在二维空间中,超平面就是一条直线,而在更高维的空间中,它可以是一个超平面。为了找到这个最优的超平面,SVM利用支持向量来定义超平面,因此模型的训练结果仅依赖于支持向量,而不依赖于数据空间的其他部分。

实现步骤

1. 数据预处理:首先需要对数据进行预处理,包括特征选择、特征缩放和数据标准化等。如果数据不是线性可分的,可能需要应用核函数将数据映射到更高维的空间

2. 训练模型:通过选择合适的核函数和超参数(如惩罚参数C、核函数参数等),使用训练数据来训练SVM模型。在训练模型时,通常会使用优化算法(如SMO算法)求解支持向量和超平面的权重

3. 评估模型:使用交叉验证或保留独立验证集的方式来评估模型,选择最优的模型参数和核函数类型

4. 预测和应用:使用训练好的模型来对新的数据进行分类或回归预测

SVM实战

完整代码:

import numpy as np
import matplotlib.pyplot as plt

# 生成40个训练样本
np.random.seed(0)
X = np.random.rand(40, 2) * 10
y = np.where(X.sum(axis=1) > 10, 1, -1)

# 初始化权重和偏置
w = np.zeros(X.shape[1])
b = 0

# 学习率
learning_rate = 0.01

# 训练模型
epochs = 1000
for epoch in range(epochs):
    for i, x in enumerate(X):
        # 计算预测结果
        prediction = np.dot(w, x) + b

        # 更新权重和偏置
        if y[i] * prediction <= 0:
            w += learning_rate * (y[i] * x)
            b += learning_rate * y[i]

# 计算支持向量
support_vectors = X[np.abs(np.dot(X, w) + b) / np.linalg.norm(w) <= 1]

# 预测
def predict(x):
    return np.sign(np.dot(w, x) + b)

# 测试
X_test = np.array([[4, 3], [1, 1]])
for x in X_test:
    print(f'对于 {x} 的预测结果: {predict(x)}')

# 绘制训练数据的散点图
plt.scatter(X[y==1][:,0], X[y==1][:,1], label='Class 1')
plt.scatter(X[y==-1][:,0], X[y==-1][:,1], label='Class -1')

# 绘制支持向量
plt.scatter(support_vectors[:, 0], support_vectors[:, 1], s=200, c="r", alpha=0.5, label='Support Vectors')

# 绘制决策边界
x1 = np.linspace(0, 10, 100)
x2 = -w[0]/w[1]*x1 - b/w[1]
plt.plot(x1, x2, label='Decision Boundary')

plt.xlabel('X1')
plt.ylabel('X2')
plt.legend()
plt.show()

运行结果:

总结

总的来说,SVM是一种强大且灵活的机器学习模型,广泛应用于许多领域,如文本分类、图像识别、生物信息学和金融领域等,这次实验展示了如何使用支持向量机(SVM)对随机生成的二维数据集进行训练和预测,并通过可视化展示了模型的决策边界和支持向量。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值