机器学习第8天:SVM分类

文章目录

机器学习专栏

介绍

特征缩放

示例代码

硬间隔与软间隔分类

主要代码

代码解释

非线性SVM分类

结语


机器学习专栏

机器学习_Nowl的博客-CSDN博客

介绍

作用:判别种类

原理:找出一个决策边界,判断数据所处区域来识别种类

简单介绍一下SVM分类的思想,我们看下面这张图,两种分类都很不错,但是我们可以注意到第二种的决策边界与实例更远(它们之间的距离比较宽),而SVM分类就是一种寻找距每种实例最远的决策边界的算法


特征缩放

SVM算法对特征缩放很敏感(不处理算法效果会受很大影响)

特征缩放是什么意思呢,例如有身高数据和体重数据,若身高是m为单位,体重是g为单位,那么体重就比身高的数值大很多,有些机器学习算法就可能更关注某一个值,这时我们用特征缩放就可以把数据统一到相同的尺度上

示例代码

from sklearn.preprocessing import StandardScaler
import numpy as np# 创建一个示例数据集
data = np.array([[1.0, 2.0, 3.0],[4.0, 5.0, 6.0],[7.0, 8.0, 9.0]])# 创建StandardScaler对象
scaler = StandardScaler()# 对数据进行标准化
scaled_data = scaler.fit_transform(data)print("原始数据:\n", data)
print("\n标准化后的数据:\n", scaled_data)# 结果是
# [[-1.22474487 -1.22474487 -1.22474487]
#  [ 0.          0.          0.        ]
#  [ 1.22474487  1.22474487  1.22474487]]

 StandardScaler是一种数据标准化的方法,它对数据进行线性变换,使得数据的均值变为0,标准差变为1。 

解释上面的数据

在每列上进行标准化,即对每个特征进行独立的标准化。每个数值是通过减去该列的均值,然后除以该列的标准差得到的。

  • 第一列:(1−4)/9=−1.22474487(1−4)/9​=−1.22474487,(4−4)/9=0(4−4)/9​=0,(7−4)/9=1.22474487(7−4)/9​=1.22474487。
  • 第二列:(2−5)/9=−1.22474487(2−5)/9​=−1.22474487,(5−5)/9=0(5−5)/9​=0,(8−5)/9=1.22474487(8−5)/9​=1.22474487。
  • 第三列:(3−6)/9=−1.22474487(3−6)/9​=−1.22474487,(6−6)/9=0(6−6)/9​=0,(9−6)/9=1.22474487(9−6)/9​=1.22474487。

这样,标准化后的数据集就符合标准正态分布,每个特征的均值为0,标准差为1。


硬间隔与软间隔分类

硬间隔分类就是完全将不同的个体区分在不同的区域(不能有一点误差)

软间隔分类就是允许一些偏差(图中绿和红色的点都有一些出现在了对方的分区里)

硬间隔分类往往会出现一些问题,例如有时候模型不可能完全分成两类,同时,硬间隔分类往往可能导致过拟合,而软间隔分类的泛化能力就比硬间隔分类好很多


主要代码

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import LinearSVCmodel = Pipeline([("scaler", StandardScaler()),("linear_svc", LinearSVC(C=1, loss="hinge"))
])model.fit(x, y)

代码解释

在这里,Pipeline的构造函数接受一个由元组组成的列表。每个元组的第一个元素是该步骤的名称(字符串),第二个元素是该步骤的实例。在这个例子中,第一个步骤是数据标准化,使用StandardScaler,命名为"scaler";第二个步骤是线性支持向量机,使用LinearSVC,命名为"linear_svc"。这两个步骤会按照列表中的顺序依次执行。

参数C是正则程度,hinge是SVM分类算法的损失函数,用来训练模型


非线性SVM分类

上述方法都是在数据集可线性分离时用到的,当数据集呈非线性怎么办,我们在回归任务中讲过一个思想,用PolynomialFeatures来产生多项式,再对每个项进行线性拟合,最后结合在一起得出决策边界

具体代码

import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.preprocessing import PolynomialFeatures
from sklearn.svm import SVC
from sklearn.pipeline import make_pipeline
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import accuracy_score# 生成非线性数据集
X, y = datasets.make_circles(n_samples=100, factor=0.5, noise=0.1, random_state=42)# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 使用多项式特征和线性SVM
degree = 3  # 多项式的次数
svm_classifier = make_pipeline(StandardScaler(), PolynomialFeatures(degree), SVC(kernel='linear', C=1))
svm_classifier.fit(X_train, y_train)# 预测并计算准确率
y_pred = svm_classifier.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)# 绘制决策边界
def plot_decision_boundary(X, y, model, ax):h = .02x_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)ax.contourf(xx, yy, Z, alpha=0.8)ax.scatter(X[:, 0], X[:, 1], c=y, edgecolors='k', marker='o', s=80, linewidth=0.5)ax.set_xlim(xx.min(), xx.max())ax.set_ylim(yy.min(), yy.max())# 绘制结果
fig, ax = plt.subplots(figsize=(8, 6))
plot_decision_boundary(X_train, y_train, svm_classifier, ax)
ax.set_title('Polynomial SVM Decision Boundary')
plt.show()

运行结果


结语

SVM分类是一种经典的分类算法,也叫大间隔分类算法。它可以用来线性分类,也可以非线性分类(可以与PolynomialFeatures结合,当然还有其他方法,我们之后再说)

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LLM大模型4位量化实战【GPTQ】

权重量化方面的最新进展使我们能够在消费类硬件上运行大量大型语言模型,例如 RTX 3090 GPU 上的 LLaMA-30B 模型。 这要归功于性能下降最小的新型 4 位量化技术,例如 GPTQ、GGML 和 NF4。 在上一篇文章中,我们介绍了简单的 8 位量化技术和出…

【开源】基于JAVA的校园失物招领管理系统

项目编号: S 006 ,文末获取源码。 \color{red}{项目编号:S006,文末获取源码。} 项目编号:S006,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 招领管理模块2.2 寻物管理模块2.3 系…

机器学习第4天:模型优化方法—梯度下降

文章目录 前言 梯度下降原理简述 介绍 可能的问题 批量梯度下降 随机梯度下降 基本算法 存在的问题 退火算法 代码演示 小批量梯度下降 前言 若没有机器学习基础,建议先阅读同一系列以下文章 机器学习第1天:概念与体系漫游-CSDN博客 机器学习…

企业视频数字人有哪些应用场景

来做个数字人吧,帮我干点活吧。 国内的一些数字人: 腾讯智影 腾讯智影数字人是一种基于人工智能技术的数字人物形象,具有逼真的外观、语音和行为表现,可以应用于各种场景,如新闻播报、文娱推介、营销、教育等。 幻…

基于蛾群算法优化概率神经网络PNN的分类预测 - 附代码

基于蛾群算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于蛾群算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于蛾群优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神经网络的光滑…

Redis篇---第二篇

系列文章目录 文章目录 系列文章目录前言一、为什么 使用 Redis 而不是用 Memcache 呢?二、为什么 Redis 单线程模型效率也能那么高?三、说说 Redis 的线程模型前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这…

android适配鸿蒙系统开发

将一个Android应用迁移到鸿蒙系统需要进行细致的工作,因为两者之间存在一些根本性的差异,涉及到代码、架构、界面等多个方面的修改和适配。以下是迁移工作可能涉及的一些主要方面,希望对大家有所帮助。北京木奇移动技术有限公司,专…

贝叶斯AB测试

AB测试是用来评估变更效果的有效方法,但很多时候会运行大量AB测试,如果能够在测试中复用之前测试的结果,将有效提升AB测试的效率和有效性。原文: Bayesian AB Testing[1] 随机实验,又称AB测试,是行业中评估因果效应的既…

PyTorch DataLoader整理函数详解【collate_fn】

DataLoader 是 PyTorch 中最常用的类之一。 而且,它是你首先学习的内容之一。 该类有很多参数,但最有可能的是,你将使用其中的大约三个参数(dataset、shuffle 和 batch_size)。 今天我想解释一下 collate_fn 的含义—根…

猜数字优化版(带进度条)

其实就是加了个动态进度条显示加载游戏的流程&#xff0c;这样看上去是不是更有big了hhhh #include<windows.h> #include<iostream> #include<ctime> using namespace std; void menu() {printf("1.开始游戏\n");printf("0.退出游戏\n")…

如何从回收站恢复已删除的文件

我们在各个领域都使用计算机。无论是专业工作还是个人工作&#xff0c;我们在生活中总能找到计算机的用途。因此&#xff0c;我们在很大程度上依赖于我们的计算机。计算机是办公室和企业部门使用的高效机器。 人们使用个人计算机发送电子邮件、创建文档、听音乐和观看视频等等…

git基本操作(配图超详细讲解)

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 目录 创建git本地仓库 配置仓库 认识工作区&#xff0c;暂存区&#xff0c;版本库 修改文件 版本回退 撤销修改 删除文件 创建git本地仓库 要提前说的是&#xff0c;仓库是进⾏版本控制的⼀个⽂件⽬录。我们要想对⽂…