闭着眼学机器学习——支持向量机分类

news2024/11/26 3:39:04

引言:
在正文开始之前,首先给大家介绍一个不错的人工智能学习教程:https://www.captainbed.cn/bbs。其中包含了机器学习、深度学习、强化学习等系列教程,感兴趣的读者可以自行查阅。


1. 算法介绍

支持向量机(Support Vector Machine, SVM) 是一种强大的监督学习算法,广泛应用于分类和回归问题。SVM的主要目标是找到一个最优的超平面,将不同类别的数据点分开,同时最大化类别之间的间隔。

SVM的主要特点包括:

  • 高效处理高维数据
  • 通过核技巧处理非线性问题
  • 泛化能力强
  • 对异常点具有鲁棒性

2. 算法原理

2.1 线性可分情况

对于线性可分的数据,SVM试图找到一个最优的超平面,使得:

  1. 正确分类所有训练样本
  2. 最大化分类间隔(即支持向量到超平面的距离)

数学表达式如下:

最大化: 2 ∣ ∣ w ∣ ∣ \frac{2}{||w||} w2
约束条件: y i ( w T x i + b ) ≥ 1 , i = 1 , 2 , . . . , n y_i(w^Tx_i + b) \geq 1, i=1,2,...,n yi(wTxi+b)1,i=1,2,...,n

其中, w w w是超平面的法向量, b b b是偏置项, x i x_i xi是输入样本, y i y_i yi是类别标签。

2.2 非线性情况

对于非线性可分的数据,SVM使用核技巧将原始特征空间映射到高维空间,在高维空间中寻找线性分类边界。常用的核函数包括:

  • 多项式核: K ( x i , x j ) = ( x i T x j + c ) d K(x_i, x_j) = (x_i^T x_j + c)^d K(xi,xj)=(xiTxj+c)d
  • 高斯核(RBF): K ( x i , x j ) = e x p ( − γ ∣ ∣ x i − x j ∣ ∣ 2 ) K(x_i, x_j) = exp(-\gamma ||x_i - x_j||^2) K(xi,xj)=exp(γxixj2)
  • Sigmoid核: K ( x i , x j ) = t a n h ( a x i T x j + r ) K(x_i, x_j) = tanh(ax_i^T x_j + r) K(xi,xj)=tanh(axiTxj+r)

3. 案例分析: 鸢尾花分类

我们将使用著名的鸢尾花(Iris)数据集来演示SVM的应用。

我们使用了鸢尾花数据集中的花瓣长度和宽度作为特征,训练一个SVM分类器来区分三种不同的鸢尾花品种。我们使用RBF核函数,并通过可视化展示SVM的决策边界。

import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets, svm
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_curve, auc
from sklearn.preprocessing import label_binarize
from itertools import cycle

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']  # 使用黑体
plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题

# 加载数据
iris = datasets.load_iris()
X = iris.data[:, [0, 1]]  # 只使用花瓣长度和宽度
y = iris.target

# 分割训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 创建SVM分类器
svm_classifier = svm.SVC(kernel='rbf', C=1.0, gamma='scale', probability=True)

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

# 预测
y_pred = svm_classifier.predict(X_test)

# 计算准确率
accuracy = np.mean(y_pred == y_test)
print(f"准确率: {accuracy:.2f}")

# 可视化决策边界
def plot_decision_boundary(X, y, model, ax=None):
    if ax is None:
        ax = plt.gca()
    
    x1_min, x1_max = X[:, 0].min() - 1, X[:, 0].max() + 1
    x2_min, x2_max = X[:, 1].min() - 1, X[:, 1].max() + 1
    xx1, xx2 = np.meshgrid(np.arange(x1_min, x1_max, 0.02),
                           np.arange(x2_min, x2_max, 0.02))
    Z = model.predict(np.c_[xx1.ravel(), xx2.ravel()])
    Z = Z.reshape(xx1.shape)
    
    ax.contourf(xx1, xx2, Z, alpha=0.4)
    ax.scatter(X[:, 0], X[:, 1], c=y, alpha=0.8)
    ax.set_xlabel('花瓣长度')
    ax.set_ylabel('花瓣宽度')
    return ax

plt.figure(figsize=(10, 8))
plot_decision_boundary(X, y, svm_classifier)
plt.title('SVM分类结果 - 鸢尾花数据集')
plt.show()

运行代码得到分类的准确率为0.8。
绘制分类结果如下:


接下来绘制分类的ROC曲线:

# 绘制ROC曲线
y_test_bin = label_binarize(y_test, classes=[0, 1, 2])
y_score = svm_classifier.predict_proba(X_test)

fpr = dict()
tpr = dict()
roc_auc = dict()
n_classes = 3

for i in range(n_classes):
    fpr[i], tpr[i], _ = roc_curve(y_test_bin[:, i], y_score[:, i])
    roc_auc[i] = auc(fpr[i], tpr[i])

plt.figure(figsize=(10, 8))
colors = cycle(['blue', 'red', 'green'])
for i, color in zip(range(n_classes), colors):
    plt.plot(fpr[i], tpr[i], color=color, lw=2,
             label='ROC曲线 (类别 {0}) (AUC = {1:0.2f})'
             ''.format(i, roc_auc[i]))

plt.plot([0, 1], [0, 1], 'k--', lw=2)
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('假正例率')
plt.ylabel('真正例率')
plt.title('多类别ROC曲线')
plt.legend(loc="lower right")
plt.show()

通过这个案例,我们可以看到SVM在多类别分类问题上的应用,以及它处理非线性决策边界的能力。SVM成功地将三种鸢尾花品种分开,并在测试集上取得了较高的准确率。

4. 总结

支持向量机是一种强大而灵活的机器学习算法,特别适合处理复杂的分类问题。通过核技巧,SVM可以有效地处理高维数据和非线性问题。然而,SVM也有一些局限性,如对大规模数据集的训练时间较长,以及核函数的选择和参数调优可能比较复杂。因此,在使用SVM时,需要根据具体问题和数据特点来权衡其优缺点。

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

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

相关文章

AI 能否替代程序员?且听我来一唠!

关于 AI 替代程序员这事儿,咱得仔细唠唠。随着 AI 技术的飞速发展,越来越多人担心程序员会被 AI 取代。程序员会不会失业呢?答案是:没那么简单! 首先,AI 确实已经可以干很多程序员的活儿了,比如…

如何构建高效的公路工程资料管理系统?

本文介绍了构建高效的公路工程资料管理系统的方法,涵盖了系统需求分析、功能设计、开发平台选择、开发过程、系统上线与培训、持续改进与维护等关键环节。通过合理规划和科学管理,可以确保系统满足用户需求,提高工作效率,保障公路…

基于Java的超级玛丽游戏的设计与实现(论文+源码)-kaic

摘 要 “超级玛丽”游戏是是任天堂情报开发本部开发的Family Computer横版卷轴动作游戏,它因操作简单、娱乐性强而广受欢迎。Java 的优势在于网络编程与多线程,但其作为一门全场景语言,依然提供了强大的GUI开发API。本论文利用Java的GUI界…

某普SSLVPN 任意文件读取

0x01 产品描述: ‌ 迪普科技的VPN产品是一款面向广域互联应用场景的专业安全网关产品,集成了IPSec、SSL、L2TP、GRE等多种VPN技术,支持国密算法,实现分支机构、移动办公人员的统一安全接入,提供内部业务跨互联网的…

公开课 | 2024最新清华大模型公开课 第4课 大模型学习方法

本文由readlecture.cn转录总结。ReadLecture专注于音、视频转录与总结,2小时视频,5分钟阅读,加速内容学习与传播。 大纲 引言 介绍大模型的训练方法 强调大模型在多领域的应用 大模型的训练阶段 预训练过程 Tokenization的重要性 预训练模…

​面向异构硬件架构:软件支撑和优化技术

面向异构硬件架构:软件支撑和优化技术 本文来自“面向异构硬件架构软件支撑和优化技术”,重点分析了异构硬件成为发展新趋势,系统软件扮演重要新角色,硬件能力单一性与应用需求多样性间的矛盾带来系统性挑战。为了解决这个问题&am…

第五届大数据、人工智能与物联网工程国际会议

第五届大数据、人工智能与物联网工程国际会议(ICBAIE 2024)定于2024年10月25-27号在中国深圳隆重举行。会议主要围绕大数据、人工智能与物联网工程等研究领域展开讨论。会议旨在为从事大数据、人工智能与物联网工程研究的专家学者、工程技术人员、技术研…

Pandas DataFrame在预测时同样需要传入一个带有相同特征名称的数据框

问题 修改前的代码 import pandas as pd from sklearn.tree import DecisionTreeClassifier from sklearn.model_selection import train_test_splitmusic_datapd.read_csv("music.csv") X music_data.drop(columns[genre]) ymusic_data[genre] modelDecisionTree…

Vivado时序报告五:Report Exceptions详解

目录 一、前言 二 Report Exceptions 2.1 配置界面 2.2 设计示例 2.3 Exception报告 2.3.1 General information 2.3.2 Summary 2.3.3 Exceptions 2.3.4 Ignored Objects 一、前言 时序约束中,有一类约束属于Exceptions类,之所以称为Exceptions…

Base16编码解码在线工具

具体请前往:在线Base16编码/解码工具-支持utf-8,Latin1,ascii,GBK,Hex等编码

【股市人生】中年投资者的教训:短期盈利与家庭幸福的抉择,理智投资才是成功之道!

大家好,我是肝脑图弟,一个每天都在肝脑图的男人。今天我们来聊聊一个在股市中跌宕起伏的中年人的故事,这个故事不仅让人感慨,也给我们带来了深刻的反思。 股市就像一块美味的蛋糕,吸引着无数人前来品尝。初入股市的人&…

Gin框架教程01:创建一个简单的 Gin 应用

Gin是目前最流行,性能最好的的GOWEB框架,是学习GOLANG必备的知识。本人最近也在学Gin,在b站搜了很多教程,发现有的教程不够详细,有的教程工具包安装有问题,而官方文档又太简短,于是我就想&#…

Java项目:152 基于springboot的仓库管理系统

作者主页:舒克日记 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 系统概要 ​ 本文将介绍一款基于Java开发的仓库管理系统,该系统可以帮助企业实现对仓库物品的高效管理,提高仓库运营效率。文章将详细介…

EMQX服务器的搭建,实现本地机和虚拟机之间的MQTT通信(详细教程)

前言 MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。 MQTT协议中有三种身份:发布者(Publish)、代理(Broker)(…

【MySQL】数据库基础指令(一)

前言 个人感觉 MySQL 没有太多的逻辑问题,只有对语句的熟练使用,会对数据进行增删查改操作即可。本章节的内容将会收集一些常用的 MySQL 的指令的使用。 目录 前言 解决MySQL无法输入中文字符的问题 数据库操作 显示当前的数据库 创建数据库 删除数据库 …

大数据存储,搜索智能化的实践分享 | OceanBase 城市交流会精彩回顾

9月21日,“OceanBase 城市交流会”来到了深圳,携手货拉拉大数据技术与产品部,联合举办了“走进货拉拉”的技术交流活动。货拉拉、万家数科、云集、百丽等多家企业的一线技术专家,就大数据存储、AI等热点话题,深入探讨并…

《学习方法报》是什么级别的报纸?

《学习方法报》是什么级别的报纸? 《学习方法报》是省级报纸。 它由山西省教育厅主管,山西教育教辅传媒集团主办。该报创办于 1993 年,国内统一刊号为 CN14-0706/(F)。其作为中国高教学会学习科学研究分会会报,以传递最新教改信…

C# 基于winform 使用NI-VISA USB口远程控制电源 万用表

1.下载完整版本NI-VISA NI-VISA Download - NI *注意支持的操作系统,以便后期编译 安装完成之后,打开NI MAX,插上usb口,打开测试面板进行通信 2.编程示例 见本地文件夹C:\Users\Public\Documents\National Instruments\NI-VIS…

笔记-Python爬虫技术基础及爬取百度新闻

笔记-Python爬虫技术基础及爬取百度新闻 1.1查看网页源代码1.2网页结构初步了解1.3HTML基础知识1.标题<h>标签&#xff1a;2.段落<p>标签&#xff1a;3.链接<a>标签&#xff1a;(定义链接)4.区块&#xff1a;5.类&#xff08;class&#xff09;与 ID 1.4百度…

在深圳宝安石岩路过一座关帝宫

​不管是在我老家还是这几年深漂&#xff0c;关帝爷的庙宇我还真没见过的。今天带娃骑行宝安石岩罗租村逛&#xff0c;居然看到一座古色古香的房子&#xff0c;走进一看原来这是关帝宫啊&#xff01;敬仰之情油然而生。 ​关帝宫和附近的小产权房紧凑在一起&#xff0c;但是现在…