机器学习之支持向量机(SVM)算法详解

机器学习之支持向量机(SVM)算法详解

文章目录

引言

支持向量机(Support Vector Machine, SVM)是一种经典的监督学习算法,广泛应用于分类和回归问题。SVM以其强大的数学基础和优异的性能在机器学习领域占据重要地位。本文将详细介绍SVM的原理、数学推导、应用场景以及Python实现。

一、 什么是支持向量机(SVM)

支持向量机是一种二分类模型,其基本思想是找到一个超平面,将不同类别的数据分隔开,并且使得两类数据点到超平面的距离(即间隔)最大化。SVM不仅可以处理线性可分问题,还可以通过核函数处理非线性可分问题。

二、 SVM的基本原理

SVM的核心目标是找到一个最优超平面,使得两类数据点的间隔最大化。这个超平面可以表示为:

其中,(w) 是法向量,决定了超平面的方向;(b) 是偏置项,决定了超平面的位置。

对于线性可分的数据,SVM的目标是找到 (w) 和 (b),使得所有样本点满足:

在这里插入图片描述

其中,(yi) 是样本的标签(取值为 +1 或 -1),(xi) 是样本特征。

三、数学推导

1.线性可分情况

对于线性可分的数据,SVM的优化目标是最大化间隔。间隔的定义为:

在这里插入图片描述

因此,SVM的优化问题可以转化为:

在这里插入图片描述

这是一个凸二次规划问题,可以通过拉格朗日乘子法求解。

2. 非线性可分情况

对于非线性可分的数据,SVM引入松弛变量 (\xi_i),允许部分样本点不满足约束条件。此时,优化问题变为:

在这里插入图片描述

其中,(C) 是正则化参数,用于控制分类错误和间隔的平衡。

3. 核函数

对于非线性问题,SVM通过核函数将数据映射到高维空间,使其在高维空间中线性可分。常用的核函数包括:

  • 高斯核(RBF核):

多项式核:

在这里插入图片描述

线性核:

在这里插入图片描述

核函数的选择对SVM的性能有重要影响。

四、SVM的优缺点

优点:

  • 在高维空间中表现优异。
  • 适用于小样本数据集。
  • 通过核函数可以处理非线性问题。

缺点:

  • 对大规模数据集训练速度较慢。
  • 对参数和核函数的选择敏感。
  • 难以直接用于多分类问题(需要通过组合多个二分类器实现)。

五、 应用场景

SVM广泛应用于以下领域:

  • 文本分类(如垃圾邮件过滤)
  • 图像分类(如手写数字识别)
  • 生物信息学(如基因分类)
  • 金融风控(如信用评分)

六、 Python实现示例

以下是使用Python和Scikit-learn库实现SVM的示例代码:

import pandas as pd data = pd.read_csv("iris.csv",header=None)"""可视化原始数据""" import matplotlib.pyplot as plt data1 = data.iloc[:50, :] data2 = data.iloc[50:, :]# 原始数据是四维,无法展示,选择两个进行展示 plt.scatter(data1[1], data1[3], marker='+') plt.scatter(data2[1], data2[3], marker='o')"""使用SVM进行训练""" x = data.iloc[:, [1,3]] y = data.iloc[:, -1]# 标准化数据# from sklearn.preprocessing import StandardScaler# scaler = StandardScaler()# x = scaler.fit_transform(x) from sklearn.model_selection import train_test_split x_train,x_test,y_train,y_test =\ train_test_split(x,y,test_size=0.2,random_state=42) from sklearn.svm import SVC svm = SVC(kernel='linear',C=float('inf'),random_state=0) svm.fit(x_train,y_train)"""可视化SVM结果""" # 参数w[原始数据为二维数组] w = svm.coef_[0]# 偏置项[原始数据为一维数组] b = svm.intercept_[0]### w 和 b 决定了模型的决策边界import numpy as np x1 = np.linspace(0, 7, 300)# 在 0 到 7 之间生成 300 个等间距的点# 超平面方程 x2 = -(w[0] * x1 + b) / w[1]# 上超平面方程 x3 =(1 - (w[0] * x1 + b)) / w[1]# 下超平面方程 x4 =(-1 - (w[0] * x1 + b)) / w[1]# 可视化超平面 plt.plot(x1, x2, linewidth=2, color='r') plt.plot(x1, x3, linewidth=1, color='r', linestyle='--') plt.plot(x1, x4, linewidth=1, color='r', linestyle='--')# 进行坐标轴限制 plt.xlim(4, 7) plt.ylim(0, 5)# 找到支持向量[二维数组]可视化支持向量# svm.support_vectors_是 SVM 模型中的一个属性,返回所有支持向量。# vets 是一个二维数组,每一行表示一个支持向量的特征值 vets = svm.support_vectors_ # vets[:, 0] 和 vets[:, 1] 分别表示支持向量的第一个和第二个特征值(假设数据是二维的)。 plt.scatter(vets[:, 0], vets[:, 1], c='b', marker='x') plt.show()

七、 总结

支持向量机是一种强大且灵活的机器学习算法,适用于多种分类和回归问题。通过核函数,SVM能够处理非线性数据,并在高维空间中表现出色。然而,SVM的训练速度较慢,且对参数选择敏感。在实际应用中,需要根据具体问题选择合适的核函数和参数。

希望本文能帮助你更好地理解SVM算法,并为你的机器学习之旅提供帮助!

Read more

Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=GBK 新版IDEA编码格式GBK问题 maven命令Picked up JAVA_TOOL_OPTION

📋 问题概述 问题现象 在使用新版IDEA执行 Maven 构建项目时,控制台输出警告信息: Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=GBK 🔍 问题排查过程 第一阶段:初步判断与假设 初始假设:系统环境变量设置了 Java 编码为 GBK 第二阶段:环境变量验证 cmd # 检查环境变量 echo %JAVA_TOOL_OPTIONS% # 输出:%JAVA_TOOL_OPTIONS%(表示变量未显式设置) 排查结果:系统环境中并未手动设置 JAVA_TOOL_OPTIONS 变量 第三阶段:深入排查IDEA配置 怀疑方向:IDEA内部设置或配置文件指定了GBK编码 检查项包括: 1. IDEA VM Options:

By Ne0inhk
JDK21安装与配置教程

JDK21安装与配置教程

文章目录 * 一、下载JDK * 1. 下载地址 * 2. 下载JDK21 * 二、JDK21安装及配置 * 1. 解压zip压缩包 * 2. 配置Java环境变量 * 2.1 打开系统属性设置 * 2.2 新建系统环境变量 * 2.3 编辑 PATH 环境变量 * 2.4 验证环境变量是否配置成功 一、下载JDK 1. 下载地址 华为云镜像下载地址: 地址 1(OracleJDK):https://repo.huaweicloud.com/java/jdk/ 地址 2(OpenJDK):https://mirrors.huaweicloud.com/openjdk/ 地址

By Ne0inhk
Java Web开发基础与Servlet核心技术

Java Web开发基础与Servlet核心技术

Java Web开发基础与Servlet核心技术 15.1 学习目标与重点提示 学习目标:掌握Java Web开发的核心概念与Servlet技术的使用方法,包括Web应用的结构、Servlet的定义与使用、HTTP请求与响应的处理、会话管理、过滤器与监听器的使用,学会在实际开发中处理Web应用问题。 重点:Web应用的结构(目录结构、配置文件)、Servlet的定义与使用(Servlet接口、HttpServlet类、注解配置)、HTTP请求与响应的处理(Request、Response对象)、会话管理(Session、Cookie)、过滤器与监听器的使用、Web开发的实际应用场景。 15.2 Web开发概述 Java Web开发是用于处理Web应用的机制。 15.2.1 Web开发的定义 定义:Web开发是用于处理Web应用的机制。 作用: * 实现Web应用的开发。 * 实现客户端与服务器之间的通信。 * 实现动态网页的生成。 * 实现Web应用的部署与维护。 ✅ 结论:Web开发是用于处理Web应用的机制,作用是实现Web应用的开发、客户端与服务器之间的通

By Ne0inhk
Spring AI:Java 生态的 AI 赋能革命,企业级智能应用新标杆

Spring AI:Java 生态的 AI 赋能革命,企业级智能应用新标杆

目录 一、核心定位:不止是框架,更是生态连接器 二、核心架构与关键能力:简化复杂 AI 应用构建 1. 对话交互核心:ChatClient 2. 语义理解基础:EmbeddingClient 与 VectorStore 3. 提示工程利器:PromptTemplate 4. 1.1 版本核心突破 三、典型场景落地:赋能全行业智能升级 四、未来展望:Java 生态的 AI 普及之路 当生成式 AI 与大型语言模型(LLMs)重塑软件开发范式,如何让 AI 能力无缝融入成熟的企业级技术体系,成为全球开发者面临的核心命题。Spring AI 的横空出世,为 Java 生态带来了颠覆性解决方案 —— 它以

By Ne0inhk