首页 > 其他分享 >机器学习-SVM

机器学习-SVM

时间:2023-02-13 11:14:34浏览次数:52  
标签:SVM 机器 self 学习 参数 超平面 最优 数据

前言
  • SVM(支持向量机)是一种常用的机器学习算法,用于分类和回归分析。它的主要目的是寻找一个最优超平面,将不同属性的数据分成不同的类别。SVM是一种有效的分类器,因为它可以处理高维数据,并且可以使用核函数处理非线性可分的数据。
SVM思想
  • 它的核心思想是通过将数据映射到高维空间来找到一个最优的超平面

  • SVM通过找到支持向量来定义最优超平面。支持向量是最接近超平面的数据点,它们对于定义超平面的位置和方向起着重要的作用。因此,SVM寻找最优超平面的过程可以简化为找到能够最大化支持向量到最优超平面的距离的超平面。

SVM流程
  1. 数据预处理

    在使用SVM之前,需要对数据进行预处理,包括数据清洗、特征选择和特征提取等。此外,还需要将数据分为训练集和测试集。

  2. 特征映射

    SVM的核心思想是通过将数据映射到高维空间来找到一个最优的超平面。因此,在这一步中,需要将数据通过核函数进行映射,将原始数据映射到高维空间。

  3. 寻找最优超平面

    在映射到高维空间后,SVM需要寻找一个最优的超平面,将数据分成不同的类别。为了找到最优超平面,需要确定一些参数,如C(惩罚系数)和γ(核函数的参数),以最大化分类器的准确性。

  4. 分类

    在训练好分类器后,需要使用测试数据集对分类器进行测试,并计算分类器的准确率和召回率等指标。

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函数中,计算样本点与超平面的距离,并返回其符号作为预测结果。

标签:SVM,机器,self,学习,参数,超平面,最优,数据
From: https://www.cnblogs.com/alax-w/p/17115622.html

相关文章

  • XML学习笔记2
    1.3DTD约束1.什么是约束:在xml文档中,咱们可以通过一个文件来约束xml文档中的内容规范。、简单来说:约束就是规定xml文件中可以些什么,不可以些什么。为什么要有约束?因为xm......
  • XML学习笔记1
    第二章:XML、http协议、tomcat1.XML概述1.1什么是XML:英文ExtensibleMarkUpLanguage,可扩展的标记语言**可扩展的标记语言:在XML里面的标记是可以扩展的。**XML版本号1.0......
  • HTML学习笔记1
    1.2单标记和双标记1.单标记:空标记,就是没有结束标记的称之为单标记。语法:水平线标记:​​​<hr/>​​​换行标记:​​<br/>​​​2.双标记:体标,就是这个标记有开始和结......
  • 【HMS Core】机器学习服务助力APP快速集成图像分割与上传功能
    ​1、介绍总览机器学习服务(MLKit)提供机器学习套件,为开发者使用机器学习能力开发各类应用,提供优质体验。得益于华为长期技术积累,MLKit为开发者提供简单易用、服务多样......
  • Spring boot 学习笔记:第十章--实现AcApp端
    开启最后一章的学习java-jarmatchingsystem.jar启动jar包ctrl+shift+r浏览器强制刷新重新打包的流程app.vue删去div.windows标签。style加上scoped属......
  • java学习
    Markdown学习一级标题:#+空格+标题名字二级标题:##+空格+加标题名字三级标题:###+空格+加标题名字四级标题####+空格+加标题名字五六级标题以此类推字体Holle,wor......
  • 【博学谷学习记录】超强总结,用心分享 | vue面试1
    vuex的原理是什么?它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。每一个Vuex应用的核心就是store,里面又包括:(1)sta......
  • 【译】使用 ML.NET 进行机器学习 - 集群完整指南
    原文|NikolaM.Zivkovic翻译|郑子铭在之前的几篇文章中,我们探索了一些基本的机器学习算法。到目前为止,我们介绍了一些简单的回归算法,分类算法。我们使用ML.NET实......
  • c语言函数的学习记录
    1、C语言中的函数包括库函数和自定义函数两种,其中库函数有2个较好的学习网站:​​www.cplusplus.com​​​​http://en.cppreference.com​​(有中文版,但建议看英文原版)2、自......
  • python学习——【第七弹】
    前言学习完python中的序列(​​python学习——【第六弹】​​),这篇文章我们开始学习python中的函数。函数函数就是执行特定任何以完成特定功能的一段代码那么我们为什么要使用......