机器学习(五)——支持向量机SVM(支持向量、间隔、正则化参数C、误差容忍度ε、核函数、软间隔、SVR、回归分类源码)

news2024/11/27 4:03:42

目录

  • 关于
  • 1 间隔与支持向量
  • 2 对偶问题
  • 3 核函数
  • 4 软间隔与正则化
  • 5 支持向量回归
  • 6 核方法
  • X 案例代码
    • X.1 分类任务
      • X.1.1 源码
      • X.1.2 数据集(鸢尾花数据集)
      • X.1.3 模型效果
    • X.2 回归任务
      • X.2.1 源码
      • X.2.2 数据集(加州房价数据)
      • X.2.3 模型效果


关于

  • 本文是基于西瓜书(第六章)的学习记录。内容包括SVM模型间隔、支持向量、正则化参数C、误差容忍度 ε ε ε、核函数、软间隔、SVR模型、Python实现分类和回归的源码。
  • 西瓜书电子版:百度网盘分享链接

1 间隔与支持向量

  • 支持向量机(SVM)是一种监督学习算法,用于分类和回归分析。

  • 分类学习最基本的想法就是基于训练集D在样本空间中找到一个划分超平面,将不同类别的样本分开.

  • 怎样的超平面是最好的?——找位于两类训练样本“正中间”的划分超平面,这样的超平面对训练样本的局部扰动的“容忍性”最好。
    在这里插入图片描述

  • 支持向量机的基本思想是找到样本空间中的最佳划分超平面,以区分不同类别的样本。

  • 支持向量:距离超平面最近的训练样本点,它们决定了超平面的位置。

  • 间隔:两个异类支持向量到超平面的距离之和,称为间隔,SVM的目标是最大化这个间隔。
    在这里插入图片描述

  • 支持向量机的基本型:
    在这里插入图片描述
    在这里插入图片描述

2 对偶问题

  • SVM的优化问题可以通过拉格朗日乘子法转化为对偶问题,这样可以更高效地求解。
  • 问题的求解不是本文重心所在,在此不介绍,大家可参考电子书学习。

3 核函数

  • 在现实任务中,原始样本空间内也许并不存在一个能正确划分两类样本的超平面,可将样本从原始空间映射到一个更高维的特征空间,使得样本在这个特征空间内线性可分

  • 但是映射到高维空间意味着更大的计算量,这时候就引出了核函数:核函数允许SVM在高维空间或无穷维空间中寻找最优超平面,而无需显式地映射样本。

  • 核函数生效的技巧:通过核函数计算原始样本空间中的内积,避免了直接在高维空间中计算。
    在这里插入图片描述

  • 哪些函数可以作为核函数:只要一个对称函数所对应的核矩阵半正定,它就能作为核函数使用。

  • 常用核函数:包括线性核、多项式核、高斯核等。
    在这里插入图片描述

4 软间隔与正则化

  • 在现实任务中,训练样本往往不是线性可分的(即便恰好找到了某个核函数使训练集在特征空间中线性可分,也很难断定这个貌似线性可分的结果不是由于过拟合所造成的.),这时可以引入软间隔和正则化来提高模型的泛化能力。

  • 软间隔:允许一些样本不满足硬间隔的约束,通过引入松弛变量来实现。

  • 替代损失函数:如hinge损失、指数损失和对率损失,用于代替0/1损失函数,使得问题更容易求解,常用的替代损失函数:
    -

  • 如果使用对率损失函数替代0/1损失函数,则几乎得到了对率回归模型。实际上两者确实优化目标相近,性能相近。

  • 正则化参数C:这个参数控制着模型对误分类的惩罚程度。C值越大,模型对误分类的惩罚越高,可能导致过拟合;C值越小,模型对误分类的惩罚越低,可能导致欠拟合。
    在这里插入图片描述

5 支持向量回归

  • 支持向量回归(SVR)是SVM在回归问题上的应用,它假设模型输出与真实输出之间存在一定的容忍度。

  • ε ε ε-不敏感损失:仅当模型输出与真实输出的差值超过 ε ε ε时才计算损失。
    在这里插入图片描述

  • SVR的优化问题:通过引入松弛变量和正则化项来求解。

  • SVR的支持向量:与SVM类似,SVR的支持向量是落在 ε ε ε间隔带之外的样本。

6 核方法

  • 核方法是一种基于核函数的学习方法,可以将线性学习器扩展为非线性学习器。

  • 表示定理:任何在再生核希尔伯特空间中的学习问题都可以用核函数的线性组合来表示。

  • 核化线性判别分析:通过核化将线性判别分析扩展到非线性情况。

X 案例代码

X.1 分类任务

X.1.1 源码

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import confusion_matrix, accuracy_score, classification_report
import seaborn as sns

# 1. 加载数据集
iris = load_iris()
X, y = iris.data, iris.target
print("此时X,y的数据类型为:", type(X), type(y), '\n')

# 2. 将数据集分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
print("此时X_train,y_train的数据类型为:", type(X_train), type(y_train), '\n')
print("X_train的前10条数据展示:")
print(pd.DataFrame(X_train).head(10).to_string(index=False, justify='left'), '\n')

# 3. 构建并训练SVM分类模型
model = SVC(kernel='rbf', random_state=42)  # 使用高斯核函数
model.fit(X_train, y_train)

# 4. 预测测试集上的目标变量
y_pred = model.predict(X_test)

# 5. 评估模型性能
accuracy = accuracy_score(y_test, y_pred)
print("模型准确率:", accuracy)

print("分类报告:")
print(classification_report(y_test, y_pred))

# 6. 绘制混淆矩阵
conf_matrix = confusion_matrix(y_test, y_pred)
plt.figure(figsize=(8, 6))
sns.heatmap(conf_matrix, annot=True, fmt='d', cmap='Blues', xticklabels=iris.target_names, yticklabels=iris.target_names)
plt.xlabel('Predicted Labels')
plt.ylabel('True Labels')
plt.title('Confusion Matrix for Iris Dataset')
plt.tight_layout()
plt.show()

# 可选:将结果保存到DataFrame中以便进一步分析
results = pd.DataFrame({
    'Actual': y_test,
    'Predicted': y_pred
})
print("模型预测结果:")
print(results.head())

X.1.2 数据集(鸢尾花数据集)

  • 鸢尾花数据集是机器学习领域中最著名的数据集之一,常被用于分类算法的测试和演示。

  • 概览

    • 样本数量:150个样本
    • 特征数量:4个特征
    • 标签种类数量:3个类别,每个类别有50个样本
  • 特征描述

    • 萼片长度 (sepal length):花萼的长度,单位为厘米。
    • 萼片宽度 (sepal width):花萼的宽度,单位为厘米。
    • 花瓣长度 (petal length):花瓣的长度,单位为厘米。
    • 花瓣宽度 (petal width):花瓣的宽度,单位为厘米。
  • 目标变量是鸢尾花的种类,共有三种:

    1. Iris setosa
    2. Iris versicolor
    3. Iris virginica
  • 使用

    • 可以使用 sklearn.datasets.load_iris() 函数来加载这个数据集,并查看其详细信息。

X.1.3 模型效果

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

X.2 回归任务

X.2.1 源码

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVR
from sklearn.metrics import mean_squared_error, r2_score

# 1. 加载数据集
data = fetch_california_housing()
X, y = data.data, data.target
print("此时X,y的数据类型为:", type(X), type(y), '\n')

# 2. 将数据集分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
print("此时X_train,y_train的数据类型为:", type(X_train), type(y_train), '\n')
print("X_train的前10条数据展示:")
print(pd.DataFrame(X_train).head(10).to_string(index=False, justify='left'), '\n')

# 3. 数据标准化
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

# 4. 构建并训练SVR模型
# 使用RBF核
svr = SVR(kernel='rbf', C=100, gamma=0.1, epsilon=.1)

# 训练模型
svr.fit(X_train, y_train)

# 5. 预测测试集上的目标变量
y_pred = svr.predict(X_test)

# 6. 评估模型性能
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)

print("SVR模型性能:")
print(f"Mean Squared Error: {mse:.2f}")
print(f"R^2 Score: {r2:.2f}", '\n')

# 6. 绘制实际值和预测值的折线图
plt.figure(figsize=(12, 6))
plt.plot(y_test[:50], label='Actual', marker='o', color='blue')
plt.plot(y_pred[:50], label='Predicted', marker='x', color='red', linestyle='--')
plt.title('Actual vs Predicted Values for California Housing Dataset (50 Samples)')
plt.xlabel('Sample Index')
plt.ylabel('Target Value')
plt.legend()
plt.tight_layout()
plt.show()

# 可选:将结果保存到DataFrame中以便进一步分析
results = pd.DataFrame({
    'Actual': y_test,
    'Predicted': y_pred
})

# 可选:打印模型的一些参数
print("模型预测结果:")
print(results)
print("模型参数:")
print("C:", svr.C)
print("Gamma:", svr.gamma)
print("Epsilon:", svr.epsilon)
print("Kernel:", svr.kernel)

X.2.2 数据集(加州房价数据)

  • 加州房价数据集是机器学习领域中常用的数据集之一,常被用于回归算法的测试和演示。

  • 概览

    • 样本数量:20640个样本
    • 特征数量:8个特征
    • 标签:1个连续的目标变量
  • 特征描述

    • MedInc (Median Income in block group):区块组的中位数收入,单位为10,000美元。
    • HouseAge (Median House Age in block group):区块组中房屋的中位数年龄,单位为年。
    • AveRooms (Average number of rooms per household):每个家庭的平均房间数。
    • AveBedrms (Average number of bedrooms per household):每个家庭的平均卧室数。
    • Population (Block group population):区块组的人口数。
    • AveOccup (Average house occupancy):每个房屋的平均居住人数。
    • Latitude (Block group latitude):区块组的纬度。
    • Longitude (Block group longitude):区块组的经度。
  • 目标变量

    • MedHouseVal (Median house value for households in block group):区块组中房屋的中位数价值,单位为100,000美元。
  • 使用

    • 可以使用 sklearn.datasets.fetch_california_housing() 函数来加载这个数据集,并查看其详细信息。

X.2.3 模型效果

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2235834.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

25国考照片处理器使用流程图解❗

1、打开“国家公务员局”网站,进入2025公务员专题,找到考生考务入口 2、点击下载地址 3、这几个下载链接都可以 4、下载压缩包 5、解压后先看“使用说明”,再找到“照片处理工具”双击。 6、双击后会进入这样的界面,点击&…

几个docker可用的镜像源

几个docker可用的镜像源 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; sudo rm -rf /etc/docker/daemon.json sudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json <<-EOF {"registry-mirrors": ["https://d…

Vue 项目中为何选择 TSX 而非传统 .vue 文件

近年来&#xff0c;Vue 项目中使用 TSX&#xff08;TypeScript JSX&#xff09;的写法逐渐增多&#xff0c;尤其在 TypeScript 项目中。 1. TSX 与 Vue 的结合背景 1、Vue 3 和 TypeScript Vue 3 从设计之初便更好地支持 TypeScript。Vue 3 使用了 TypeScript 重写核心&…

【SpringBoot】18 上传文件到数据库(Thymeleaf + MySQL)

Git仓库 https://gitee.com/Lin_DH/system 介绍 使用 Thymeleaf 写的页面&#xff0c;将&#xff08;txt、jpg、png&#xff09;格式文件上传到 MySQL 数据库中。 依赖 pom.xml <!-- https://mvnrepository.com/artifact/com.mysql/mysql-connector-j --><depende…

[VUE]框架网页开发1 本地开发环境安装

前言 其实你不要看我的文章比较长&#xff0c;但是他就是很长&#xff01;步骤其实很简单&#xff0c;主要是为新手加了很多解释&#xff01; 步骤一&#xff1a;下载并安装 Node.js 访问 Node.js 官网&#xff1a; Node.js — Download Node.js 下载 Windows 64 位版本&…

canal1.1.7使用canal-adapter进行mysql同步数据

重要的事情说前面&#xff0c;canal1.1.8需要jdk11以上&#xff0c;大家自行选择&#xff0c;我这由于项目原因只能使用1.1.7兼容版的 文章参考地址&#xff1a; canal 使用详解_canal使用-CSDN博客 使用canal.deployer-1.1.7和canal.adapter-1.1.7实现mysql数据同步_mysql更…

403 Request Entity Too Lager(请求体太大啦)

昨天收到 QA 的生产报障&#xff0c;说是测试环境的附件上传功能报了 403 的错误&#xff0c;错误信息&#xff1a;403 Request Entity Too Lager。我尝试复现问题&#xff0c;发现传个几兆的文件都费劲啊&#xff0c;一传一个失败。不用说&#xff0c;项目用到 ng 代理&#x…

【VScode】如何在VSCode中配置Python开发环境:从零开始的完整指南

文章目录 前言软件准备软件安装1. 安装Python2. 检查Python是否安装成功3. 安装第三方包4. 安装VSCode 配置VSCode1. 安装Python插件2. 创建项目&#xff0c;配置工作区域3. 编写Python文件4. 配置Python编译设置5. 使用代码格式化工具yapf 更多文章结尾 前言 在当今的编程世界…

SQL,力扣题目571, 给定数字的频率查询中位数

一、力扣链接 LeetCode_571 二、题目描述 Numbers 表&#xff1a; ------------------- | Column Name | Type | ------------------- | num | int | | frequency | int | ------------------- num 是这张表的主键(具有唯一值的列)。 这张表的每一行表示某个数…

LLMs之PDF:zeroX(一款PDF到Markdown 的视觉模型转换工具)的简介、安装和使用方法、案例应用之详细攻略

LLMs之PDF&#xff1a;zeroX(一款PDF到Markdown 的视觉模型转换工具)的简介、安装和使用方法、案例应用之详细攻略 目录 zeroX的简介 1、支持的文件类型 zeroX的安装和使用方法 T1、Node.js 版本&#xff1a; 安装 使用方法 使用文件 URL&#xff1a; 使用本地路径&…

containerd配置私有仓库registry

机器ip端口regtisry192.168.0.725000k8s-*-------k8s集群 1、镜像上传 rootadmin:~# docker push 192.168.0.72:5000/nginx:1.26.1-alpine The push refers to repository [192.168.0.72:5000/nginx] 6961f0b8531c: Pushed 3112cd521249: Pushed d3f50ce9b5b5: Pushed 9efaf2eb…

js例轮播图定时器版

要求 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name"viewport" content"widthdevice-width, ini…

PostgreSQL 学习笔记:PostgreSQL 主从复制

PostgreSQL 笔记&#xff1a;PostgreSQL 主从复制 博客地址&#xff1a;TMDOG 的博客 在现代应用程序中&#xff0c;数据库的高可用性和扩展性是至关重要的。PostgreSQL 提供了主从复制功能&#xff0c;可以在多个数据库实例之间复制数据&#xff0c;以实现冗余和负载均衡。本…

【系统集成项目管理工程师教程】第5章 软件工程

软件工程是一门研究用工程化方法构建和维护有效、实用和高质量软件的学科&#xff0c;涵盖软件需求、设计、实现、测试、部署交付、质量管理和过程能力成熟度等方面&#xff0c;旨在提高软件生产率、质量并降低成本&#xff0c;确保软件项目的成功开发与维护。 5.1软件工程定义…

Java项目实战II基于Spring Boot的便利店信息管理系统(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 在快节奏的…

vscode Comment Translate 反应慢 加载中...

Comment Translate 版本&#xff1a;v2.3.3 你是不是疑惑切换了 Bing 源也无法使用还是加载中… 那么可能你切换Bing后没重启vscode 下面是切换成功后的插件日志&#xff0c;一定要重启vscode&#xff0c;只是禁用和启用插件不行的&#xff0c;另外google是没用的&#xff0c;用…

网站架构知识之Ansible(day020)

1.Ansible架构 Inventory 主机清单:被管理主机的ip列表,分类 ad-hoc模式: 命令行批量管理(使用ans模块),临时任务 playbook 剧本模式: 类似于把操作写出脚本,可以重复运行这个脚本 2.修改配置 配置文件&#xff1a;/etc/ansible/ansible.cfg 修改配置文件关闭主机Host_key…

智启未来,趣享生活 德国卡赫举办系列新品首发活动

全球最大的清洁设备和清洁解决方案提供商德国卡赫&#xff0c;于11月6日在第七届进博会新品发布平台举办主题为“智启未来&#xff0c;趣享生活”的新品发布会&#xff0c;揭开全球首发新品可折叠式手持清洗机KHB Air以及亚洲首发新品商用清洁机器人KIRA CV 50的神秘面纱。作为…

xlsx.js 读取excel文件

需求&#xff1a;读取一个excel文件。 一、 使用antd的Upload组件的 【customRequest】方法。 互斥。此方法跟【onChange】方法互斥&#xff0c;即&#xff1a;不可同时出现。调用次数不一样。onChange方法会根据文件当前的上传状态从而被调用多次&#xff08;读取中&#xff…

WPF中的依赖属性

1.创建项目后下载两个NuGet程序包 2.创建一个MyButton类继承Button MyButton类如下&#xff1a; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Contro…