当前位置: 首页 > news >正文

sk07.【scikit-learn基础】--『监督学习』之支持向量机

支持向量机(Support Vector Machine,简称 SVM)是一种监督学习算法,主要用于分类和回归问题。

SVM 的基本概念

SVM 的核心思想是找到一个最优的超平面,将不同类别的数据分开。这个超平面不仅要能够正确分类数据,还要使得两个类别之间的间隔(margin)最大化。

超平面
  • 在二维空间中,超平面是一个直线。
  • 在三维空间中,超平面是一个平面。
  • 在更高维空间中,超平面是一个分割空间的超平面。
支持向量
  • 支持向量是离超平面最近的样本点。这些支持向量对于定义超平面至关重要。
  • 支持向量机通过最大化支持向量到超平面的距离(即最大化间隔)来选择最佳的超平面。
最大间隔
  • SVM的目标是最大化分类间隔,使得分类边界尽可能远离两类数据点。这可以有效地减少模型的泛化误差。
核技巧(Kernel Trick)
  • 对于非线性可分的数据,SVM使用核函数将数据映射到更高维的空间,在这个空间中,数据可能是线性可分的。
  • 常用的核函数有:线性核、多项式核、径向基函数(RBF)核等。

SVM 分类流程

  1. 选择一个超平面:找到一个能够最大化分类边界的超平面。
  2. 训练支持向量:通过支持向量机算法,选择离超平面最近的样本点作为支持向量。
  3. 通过最大化间隔来找到最优超平面:选择一个最优超平面,使得间隔最大化。
  4. 使用核函数处理非线性问题:通过核函数将数据映射到高维空间来解决非线性可分问题。

使用 Python 实现 SVM

接下来,我们将使用 Python 中的 scikit-learn 库来实现一个简单的 SVM 分类器。

1. 安装必要的库

首先,确保你已经安装了scikit-learn库。如果没有安装,可以使用以下命令进行安装:

pip install scikit-learn

2. 导入库

import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm, datasets
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

3. 加载数据集

我们将使用scikit-learn自带的鸢尾花(Iris)数据集。

# 加载鸢尾花数据集
iris = datasets.load_iris()
X = iris.data[:, :2]  # 只使用前两个特征
y = iris.target

4. 划分训练集和测试集

# 将数据集划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

5. 训练 SVM 模型

# 创建SVM分类器
clf = svm.SVC(kernel='linear')  # 使用线性核函数# 训练模型
clf.fit(X_train, y_train)

6. 预测与评估

# 在测试集上进行预测
y_pred = clf.predict(X_test)# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"模型准确率: {accuracy:.2f}")

7. 可视化结果

import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm, datasets
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score# 加载鸢尾花数据集
iris = datasets.load_iris()
X = iris.data[:, :2]  # 只使用前两个特征
y = iris.target# 将数据集划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 创建SVM分类器
clf = svm.SVC(kernel='linear')  # 使用线性核函数# 训练模型
clf.fit(X_train, y_train)# 在测试集上进行预测
y_pred = clf.predict(X_test)# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"模型准确率: {accuracy:.2f}")# 绘制决策边界
def plot_decision_boundary(X, y, model):h = .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 = model.predict(np.c_[xx.ravel(), yy.ravel()])Z = Z.reshape(xx.shape)plt.contourf(xx, yy, Z, alpha=0.8)plt.scatter(X[:, 0], X[:, 1], c=y, edgecolors='k', marker='o')plt.xlabel('Sepal length')plt.ylabel('Sepal width')plt.title('SVM Decision Boundary')plt.show()plot_decision_boundary(X_train, y_train, clf)

执行以上代码,输出为:

模型准确率: 0.80

图片显示为:

http://www.dtcms.com/a/423908.html

相关文章:

  • 网站建设与管理好学吗打广告网站
  • 免费门户网站源码长春企业网站建设价格
  • 【APK安全】HTTPS证书校验的核心风险与防御指南
  • 小迪web自用笔记41
  • 国外网站国内做好还是国外做邹城住房城乡建设部网站
  • 预付做网站定金如何免费的网站模板哪里有
  • 黄金、白银、石油期货市场API对接文档
  • linux入门5.1(Nginx服务器)
  • Hadess入门到实战(5) - 如何管理通用Generic制品
  • 丰台手机网站建设2023年新闻摘抄
  • Adobe Journey Optimizer 实战应用:企业如何整合全渠道营销与实时互动
  • 网站建设客户相关问题佛山网页设计师
  • 【附源码】基于Spring Boot的高校爱心捐助平台的设计与实现
  • PPIO上线DeepSeek-V3.2-Exp:引入稀疏注意力机制,API 大幅降价
  • 成都私人视频网站制作平台沈阳看男科的权威医院
  • 从零开始掌握 uv:新一代超快 Python 项目与包管理器(含 Windows 支持)
  • 天津网站建设 泰姆仕四川网络营销推广
  • 政务网站建设经验做法东莞企业网站建设预算大概多少
  • 怎么做网站icp备案有没有学做家具的网站
  • 新天力科技冲刺北交所:供应链韧性成资本市场“加分项”
  • Linux之线程池
  • 摄影师网站html5wordpress分类加密
  • 免费机械网站模板绵阳市建设工程监督网站
  • React Native 中的 useCallback
  • 哪些网站做的比较好看480元做网站
  • DSC蓝宝石法:精准测量材料比热容的核心技术
  • 在 Kubernetes 集群中运行并发布应用程序
  • Node.js面试题及详细答案120题(81-92) -- 框架与生态篇
  • 永久网站域名注册网页版传奇大全
  • 软考~系统规划与管理师考试—知识篇—第二版—1.2 信息技术及其发展