机器学习-SVM
2023-04-18 15:22:13 时间
前言
- SVM(支持向量机)是一种常用的机器学习算法,用于分类和回归分析。它的主要目的是寻找一个最优超平面,将不同属性的数据分成不同的类别。SVM是一种有效的分类器,因为它可以处理高维数据,并且可以使用核函数处理非线性可分的数据。
SVM思想
-
它的核心思想是通过将数据映射到高维空间来找到一个最优的超平面。
-
SVM通过找到支持向量来定义最优超平面。支持向量是最接近超平面的数据点,它们对于定义超平面的位置和方向起着重要的作用。因此,SVM寻找最优超平面的过程可以简化为找到能够最大化支持向量到最优超平面的距离的超平面。
SVM流程
-
数据预处理
在使用SVM之前,需要对数据进行预处理,包括数据清洗、特征选择和特征提取等。此外,还需要将数据分为训练集和测试集。
-
特征映射
SVM的核心思想是通过将数据映射到高维空间来找到一个最优的超平面。因此,在这一步中,需要将数据通过核函数进行映射,将原始数据映射到高维空间。
-
寻找最优超平面
在映射到高维空间后,SVM需要寻找一个最优的超平面,将数据分成不同的类别。为了找到最优超平面,需要确定一些参数,如C(惩罚系数)和γ(核函数的参数),以最大化分类器的准确性。
-
分类
在训练好分类器后,需要使用测试数据集对分类器进行测试,并计算分类器的准确率和召回率等指标。
SVM优缺点
- 优点
- 高维数据处理能力:SVM可以很好地处理高维数据,并且可以使用核函数处理非线性可分的数据,因此适用于处理许多实际问题。
- 鲁棒性:SVM对于噪声数据有很好的处理能力,因为它只关注最接近超平面的数据点。
- 适用于小样本:SVM只需要找到支持向量而不是所有的数据点,因此适用于处理小样本问题。
- 可调参数:SVM具有许多可调参数,如C(惩罚系数)和γ(核函数的参数),以最大化分类器的准确性。
- 缺点
- 计算复杂度高:在处理大规模数据时,SVM的计算复杂度较高,因此训练时间较长。
- 需要选择适当的核函数:选择适当的核函数对于SVM的性能非常重要,但这往往需要进行一定的试验和调整。
- 对缺失数据敏感:SVM对于缺失数据比较敏感,因此需要在预处理数据时进行处理。
- 总结
- SVM在处理高维数据和非线性数据时表现出色,并且对于噪声数据和小样本问题也有很好的效果。但是,SVM的计算复杂度较高,并且需要选择适当的核函数,因此在实际应用中需要仔细考虑其优缺点,以选择合适的机器学习算法。
底层代码实现
import numpy as np
class SVM:
def __init__(self, learning_rate=0.01, lambda_param=0.01, n_iters=1000):
self.lr = learning_rate # 学习率
self.lambda_param = lambda_param # 正则化参数
self.n_iters = n_iters # 迭代次数
self.w = None # 参数w
self.b = None # 参数b
def fit(self, X, y):
n_samples, n_features = X.shape
# 将标签y转换为{-1, 1},便于后续计算
y_ = np.where(y <= 0, -1, 1)
self.w = np.zeros(n_features) # 初始化参数w为全零向量
self.b = 0 # 初始化参数b为0
# 使用梯度下降法求解最优参数w和b
for _ in range(self.n_iters):
for idx, x_i in enumerate(X):
condition = y_[idx] * (np.dot(x_i, self.w) - self.b) >= 1 # 判断样本点是否位于Margin之内
if condition:
self.w -= self.lr * (2 * self.lambda_param * self.w) # 如果在Margin之内,更新参数w
else:
self.w -= self.lr * (2 * self.lambda_param * self.w - np.dot(x_i, y_[idx])) # 如果在Margin之外,更新参数w和b
self.b -= self.lr * y_[idx] # 更新参数b
def predict(self, X):
approx = np.dot(X, self.w) - self.b # 计算样本点到超平面的距离
return np.sign(approx) # 返回样本点的类别,即其符号
在__init__
函数中,定义了学习率、正则化参数和迭代次数等超参数。
在fit
函数中,使用梯度下降法求解最优参数w和b,其中当样本点位于Margin之外时,更新参数w和b。
在predict
函数中,计算样本点与超平面的距离,并返回其符号作为预测结果。
相关文章
- EasyCVR对接华为iVS订阅摄像机和用户变更请求接口介绍
- 精选 | 腾讯云CDN内容加速场景有哪些?
- 模块化网络防止基于模型的多任务强化学习中的灾难性干扰
- 用搜索和注意力学习稳健的调度方法
- 用于多变量时间序列异常检测的学习图神经网络
- 助力政企自动化自然生长,华为WeAutomate RPA是怎么做到的?
- 使用腾讯轻量云搭建Fiora聊天室
- TSRC安全测试规范
- 云计算“功守道”
- 助力成本优化,腾讯全场景在离线混部系统Caelus正式开源
- Flink 利器:开源平台 StreamX 简介
- 腾讯云实践 | 一图揭秘腾讯碳中和?解决方案
- 深度学习中的轻量级网络架构总结与代码实现
- 信息系统项目管理师(高项复习笔记三)
- Adobe国际认证让科技赋能时尚
- c++该怎么学习(面试吃土记)
- 面试官问发布订阅模式是在问什么?
- 面试官:请实现一个通用函数把 callback 转成 promise
- 空中悬停、翻滚转身、成功着陆,我用强化学习「回收」了SpaceX的火箭
- 中山大学林倞解读视觉语义理解新趋势:从表达学习到知识及因果融合