【AI知识】有监督学习分类任务之支持向量机

server/2024/12/18 1:21:25/

1.支持向量机概念

支持向量机(Support Vector Machine, SVM) 是一种有监督学习算法,主要用于分类任务(也可用于回归任务,即支持向量回归,SVR)。SVM的核心思想是找到一个最优的超平面(hyperplane) 来将不同类别的数据分开,且最大化类别间边界(间隔),从而提高模型的泛化能力。

如,在二分类问题中,SVM的目标是找到一个最优的超平面(即决策边界),该平面能够将数据集中的正负类样本分开,下面都以二分类问题为例说明:

支持向量机的几个概念:

  • 超平面(Hyperplane) : 超平面将数据空间分割成两个部分。在二维空间中,超平面是一条直线;在三维空间中,超平面是一个平面;在高维空间中,超平面是一个维度比数据空间少1的超平面。对于一个二维空间中的分类问题,SVM的任务就是找到一个直线(超平面),将正负类样本分开。

  • 最大化间隔: SVM的关键思想是最大化分隔正负类的间隔。间隔是指从数据点到超平面的垂直距离。在SVM中,支持向量是距离决策边界最近的那些点,这些点决定了超平面的最优位置。假设我们的数据点有两个类别,+1 和 -1 类,我们希望找到一个超平面,使得这个平面把两类数据完全分开,并且两类数据到超平面的距离最大。

细节我有点看不懂了。。。。

SVM实例+可视化:

import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler# 创建线性可分数据集
def generate_linear_data():# 使用sklearn生成一个线性可分的数据集X, y = datasets.make_classification(n_samples=200, n_features=2, n_informative=2,n_redundant=0, n_clusters_per_class=1, class_sep=2)return X, y# 创建非线性可分数据集
def generate_nonlinear_data():# 使用sklearn生成一个非线性可分的数据集# 它生成的是一个包含两个类别的数据集,其中样本数据分布在两个同心圆形状的区域内X, y = datasets.make_circles(n_samples=200, noise=0.1, factor=0.5)return X, y# 绘制SVM的决策边界
def plot_decision_boundary(X, y, clf):h = 0.02  # 网格间距x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])Z = Z.reshape(xx.shape)plt.contourf(xx, yy, Z, alpha=0.3)plt.scatter(X[:, 0], X[:, 1], c=y, marker='o', edgecolors='k', s=50)plt.title("SVM Decision Boundary")plt.show()# 训练并可视化SVM模型
def train_and_visualize(X, y, kernel_type='linear'):# 切分数据集为训练集和测试集X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 数据标准化scaler = StandardScaler()X_train = scaler.fit_transform(X_train)X_test = scaler.transform(X_test)# 初始化SVM分类器clf = SVC(kernel=kernel_type)# 训练SVMclf.fit(X_train, y_train)# 打印支持向量信息print(f"Number of support vectors: {len(clf.support_)}")# 可视化决策边界plot_decision_boundary(X_train, y_train, clf)# 主函数
def main():# 1. 线性可分数据print("Training with linearly separable data...")X_linear, y_linear = generate_linear_data()train_and_visualize(X_linear, y_linear, kernel_type='linear')# 2. 非线性可分数据print("Training with non-linearly separable data...")X_nonlinear, y_nonlinear = generate_nonlinear_data()train_and_visualize(X_nonlinear, y_nonlinear, kernel_type='rbf')if __name__ == "__main__":main()

在这里插入图片描述
在这里插入图片描述


http://www.ppmy.cn/server/151044.html

相关文章

Redis Cluster 分片机制

Redis 集群是 Redis 提供的一种分布式实现,用于水平扩展数据存储能力。通过 Redis 集群,可以将数据分片存储在多个 Redis 节点上,同时提供高可用性和故障转移功能。 分片(Sharding): Redis 集群将数据划分…

leetcode---mysql

619. 只出现一次的最大数字 - 力扣(LeetCode) MyNumbers 表: ------------------- | Column Name | Type | ------------------- | num | int | ------------------- 该表可能包含重复项(换句话说,在SQL中&…

外卖开发(八)—— SpringTask(定时任务) 和 WebSocket网络协议

外卖开发(八)—— SpringTask 和 WebSocket 一、利用SpringTask完成定时任务1、cron表达式2、springtask实现 二、使用webSocket实现接单、催单提醒1、代码分析2、催单提醒 一、利用SpringTask完成定时任务 Spring Task是Spring框架提供的任务调度工具&…

Scala——泛型

背景:你是一个程序员,老板让你写一个函数,用来获取列表中的中间元素 定义函数的格式: def 函数名字(参数1:类型1):返回值的类型{} package test40 //泛型 //List(1,2,3…

ADB在浏览器中:ya-webadb项目安装与配置完全指南

ADB在浏览器中:ya-webadb项目安装与配置完全指南 ya-webadb ADB in your browser [这里是图片001] 项目地址: https://gitcode.com/gh_mirrors/ya/ya-webadb 项目基础介绍与编程语言 ya-webadb 是一个由 Yume-chan 开发的开源项目,它实现了ADB&#x…

取证工具 iOS Forensic Toolkit: macOS\Windows\Linux 不同版本的比较

ElcomSoft 公司致力于提供符合许可法规的数据取证解决方案,满足所有相关的法律要求。 Elcomsoft iOS Forensic Toolkit 软件提供面向 iPhone/iPad/iPod 设备的取证功能。该软件有三种版本,分别用于 macOS、Windows 和 Linux 版本系统。 macOS、Windows…

OpenCV图片矫正

在计算机视觉领域,图片矫正是一项非常重要的技术,特别是在处理因拍摄角度问题导致的图像失真时。 实验原理 图片矫正主要依赖于透视变换(Perspective Transformation)。透视变换是一种几何变换,可以将图像中的一个四…

每日十题八股-2024年12月16日

1.垃圾回收算法哪些阶段会stop the world? 2.minorGC、majorGC、fullGC的区别,什么场景触发full GC 3.垃圾回收器 CMS 和 G1的区别? 4.什么情况下使用CMS,什么情况使用G1? 5.G1回收器的特色是什么? 6.GC只会对堆进行GC吗&#x…