机器学习(三)之监督学习2

前言:

本专栏一直在更新机器学习的内容,欢迎点赞收藏哦!

笔者水平有限,文中掺杂着自己的理解和感悟,如果有错误之处还请指出,可以在评论区一起探讨!

 1.支持向量机(Support Vector Machines,简称SVM)

1.1 前言

概念:

支持向量机(support vector machines, SVM)是一种二分类模型,它的基本模型是定义在特征空间上的间隔最大的线性分类器,间隔最大使它有别于感知机

引入:

上一篇讲KRR时,我们也提到了一点SVM。在这一节中我们详细的说明一下这种方法。

优势:

  1. 对高维空间有效
  2. 当维度比样本数量大时还有效
  3. 使用训练集的子集,空间内存使用较少
  4. 具有通用性,可以指定不同的核函数

缺点:

  1. 如果维度比样本数量大很多时,注意避免过拟合。可以选择合适的核函数和正则化项(惩罚项)
  2. 不直接提供概率估计

1.2 分类

主要是三种分类算法:SVC(C-Support Vector Classification),NuSVC(Nu-Support Vector Classification)和LinearSVC(Linear Support Vector Classification)。我们就简单的来看一下,区别和使用方法。

区别:

SVC和NuSVC方法基本一致,唯一区别就是损失函数的度量方式不同。

 • NuSVC中的nu参数(训练误差部分的上限和⽀持向量部分的下限,取值在(0,1)之间,默认是0.5)和SVC中的C参数(c越等于0,惩罚越大,准确率高,但容易过拟合);

 • LinearSVC是实现线性核函数的支持向量分类,没有kernel参数。

SVC代码:

import numpy as np
from sklearn.svm import SVC
from sklearn.pipeline import make_pipeline
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScalerx = np.array([[-1, -1], [-2, -1], [1, 1], [2, 1]])
y = np.array([1, 1, 2, 2])
clf = make_pipeline(StandardScaler(), SVC(gamma='auto'))
clf.fit(x, y)
x_test = np.array([[-0.8, -1]])y_test = clf.predict(x_test)
x_line = np.linspace(-2, 2, 100)# 绘制训练集数据点
plt.scatter(x[:, 0], x[:, 1], c=y, cmap=plt.cm.Paired, label='Training Points')# 绘制决策边界
x_min, x_max = x[:, 0].min() - 1, x[:, 0].max() + 1
y_min, y_max = x[:, 1].min() - 1, x[:, 1].max() + 1
xx, yy = np.meshgrid(np.linspace(x_min, x_max, 100), np.linspace(y_min, y_max, 100))  # 生成了一个二维的网格点坐标矩阵
Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])  # 预测坐标范围内每个点的类别
Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, cmap=plt.cm.Paired, alpha=0.8)  # cmap=plt.cm.Paired 指定了等高线的颜色映射# 绘制测试点
plt.scatter(x_test[:, 0], x_test[:, 1], c='red', marker='x', label='Test Point')plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.title('SVM Classification')
plt.legend()
plt.show()

 NuSVC代码:

import numpy as np
from sklearn.svm import SVC,NuSVC
from sklearn.pipeline import make_pipeline
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScalerx = np.array([[-1, -1], [-2, -1], [1, 1], [2, 1]])
y = np.array([1, 1, 2, 2])
clf = make_pipeline(StandardScaler(), NuSVC())
clf.fit(x, y)
x_test = np.array([[-0.8, -1]])y_test = clf.predict(x_test)
x_line = np.linspace(-2, 2, 100)# 绘制训练集数据点
plt.scatter(x[:, 0], x[:, 1], c=y, cmap=plt.cm.Paired, label='Training Points')# 绘制决策边界
x_min, x_max = x[:, 0].min() - 1, x[:, 0].max() + 1
y_min, y_max = x[:, 1].min() - 1, x[:, 1].max() + 1
xx, yy = np.meshgrid(np.linspace(x_min, x_max, 100), np.linspace(y_min, y_max, 100))  # 生成了一个二维的网格点坐标矩阵
Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])  # 预测坐标范围内每个点的类别
Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, cmap=plt.cm.Paired, alpha=0.8)  # cmap=plt.cm.Paired 指定了等高线的颜色映射# 绘制测试点
plt.scatter(x_test[:, 0], x_test[:, 1], c='red', marker='x', label='Test Point')plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.title('NuSVC Classification')
plt.legend()
plt.show()

 LinearSVC代码:

import numpy as np
from sklearn.svm import LinearSVC
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.datasets import make_classification
import matplotlib.pyplot as pltX, y = make_classification(n_features=4, random_state=0)  #随机生成样本
clf = make_pipeline(StandardScaler(),LinearSVC(dual="auto", random_state=0, tol=1e-5))clf.fit(X,y)
coef=clf.named_steps['linearsvc'].coef_
intercept=clf.named_steps['linearsvc'].intercept_
x_test=np.array([[0,0,0,0]])
y_test=clf.predict(x_test)
from sklearn.decomposition import PCA# 将数据投影到二维平面
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)# 训练 LinearSVC
clf.fit(X_pca, y)
# 投影测试点到二维空间
x_test_pca = pca.transform(x_test)# 绘制样本点
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y, cmap=plt.cm.Paired)# 绘制决策边界# 绘制测试点
plt.scatter(x_test_pca[:, 0], x_test_pca[:, 1], c='red', marker='x', label='Test Point')
# 获取系数和截距
coef = clf.named_steps['linearsvc'].coef_
intercept = clf.named_steps['linearsvc'].intercept_# 绘制样本点
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y, cmap=plt.cm.Paired)# 绘制决策边界
x_min, x_max = X_pca[:, 0].min() - 1, X_pca[:, 0].max() + 1
y_min, y_max = X_pca[:, 1].min() - 1, X_pca[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02),np.arange(y_min, y_max, 0.02))
Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, cmap=plt.cm.Paired, alpha=0.8)plt.xlabel('Principal Component 1')
plt.ylabel('Principal Component 2')
plt.title('Linear SVM Decision Boundary (PCA)')
plt.show()

 这一部分不好画在二维图片上,我们使用了PCA降维技术,降维到平面上再显现在二维平面上的。相当于降维之后又训练了一遍,才能画出来的。

总结:

  • 数据线性可分,或者需要一个训练速度更快的模型,那么可以选择LinearSVC
  • 处理非线性问题,可以尝试使用SVC,并尝试不同的核函数
  • 想要一个介于SVC和LinearSVC之间的模型,你可以尝试使用NuSVC

1.3 回归

分为:SVR,NuSVR,LinearSVR。

方法和上面差不多,我们就不多讲了。

1.4 复杂度

之间

1.5 使用提示

  1. 避免数据拷贝:SVCSVRNuSVCNuSVR如果不按照特定方法输入,数据就会被拷贝一份。LinearSVCLogisticRegression任何numpy数组输入都会被拷贝。如果是大规模线性分类器且不想拷贝数据,可以使用SGDC.
  2. 核缓存大小:对SVCSVRNuSVCNuSVR,核缓存的大小对较大问题求解的运行时间有非常强的影响,如果你有足够内存,建议将cache_size设置为一个高于默认值200(MB)的值,比如500(MB)或1000(MB)。
  3. 设置C:默认情况下C设为1,这是一个合理的选择。如果样本中有许多噪音观察点,则应该减小这个值。这意味着对估计结果进行更严格的正则化。
  4. SVM算法会受数据取值范围的影响,所以强烈建议在使用之前对数据进行缩放

 1.6 核方法

 2.随机梯度下降算法(Stochastic Gradient Descent)

2.1 前言

优点:

  • 高效
  • 易于实现

缺点:

  • 需要调参
  • 对特征缩放非常敏感

警告:

在拟合数据之前一定要打乱训练数据(shuffle=True)并进行标准化(make_pipeline(StandardScaler(), SGDClassifier())) 

梯度下降和随机梯度下降的区别:

梯度下降(Gradient Descent):

  • 在梯度下降中,每次迭代都使用全部训练数据来计算损失函数的梯度,并更新模型参数。
  • 因为每次迭代都需要对整个数据集进行操作,所以在大数据集上训练时,梯度下降的计算开销会很大。
  • 梯度下降通常用于批量学习(Batch Learning)的情况下,其中数据集可以完全载入内存。

 随机梯度下降(Stochastic Gradient Descent,SGD):

  • 在随机梯度下降中,每次迭代只使用一个样本(或一小批样本)来计算损失函数的梯度,并更新模型参数。
  • 因为每次迭代只需要处理一个样本(或一小批样本),所以SGD的计算开销较小,特别适合于大数据集和在线学习(Online Learning)的场景。
  • 由于每次迭代只使用部分样本计算梯度,SGD的更新过程可能会更加不稳定,但同时也可能更快地找到局部最优解。

 小批量梯度下降(Mini-batch Gradient Descent):

  • 除了梯度下降和随机梯度下降外,还存在一种折中的方法,即小批量梯度下降。在每次迭代中,它使用一个小批量的样本来计算梯度。
  • 小批量梯度下降结合了梯度下降和SGD的优点,既可以利用并行计算加速训练,又不会因为单一样本的噪声导致更新过于不稳定

 总结:

GD和SGD主要区别为训练过程中使用的样本数量不同,GD需要大开销,SGD不稳定。

2.2 原理:

主要是通过计算样本的损失函数,迭代更新模型参数。让这个\theta不断变换(如下图公式),直到达到最大迭代次数或者损失函数收敛到某个值以内。

 误差函数有很多种可以按需挑选。

 2.3 复杂度

 2.4 使用提示

  1. 对数据进行缩放:将输入向量X上的每个特征缩放为[0,1]或[-1,+1],或将其标准化为均值为0和方差为1
  2. 找到合理的\alpha学习率
  3. SGD在观察了大约10^6个训练样本后收敛
  4. 如果将SGD应用于PCA提取的特征,通常明智的做法是将特征值通过某个常数c缩放,使训练数据的L2范数平均值等于1。
  5. 当特征很多或 eta0 很大时, ASGD(平均随机梯度下降) 效果更好。

先写这么多监督算法,后面再慢慢补充,可能还会补充朴素贝叶斯和决策树、特征选择。

大家可以先点赞关注,以后慢慢看哦!

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

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

相关文章

Agent AI智能体在未来,一定与你我密不可分

随着Agent AI智能体的逐渐成熟,人工智能应用的不断深入与拓展,相信在不久的将来,他与你我的生活一定是密不可分的。 目录 ​编辑 1 Agent AI智能体是什么? 2 Agent AI在语言处理方面的能力 2.1 情感分析示例 2.2 文本分类任…

电脑已经有了一个Windows10,再多装一个Windows10组成双系统

前言 前段时间已经讲过一次双Windows系统的安装教程,但是小白重新去看了一下,发现写的内容太多,怕小伙伴看了之后一脸萌。 所以今天咱们就重新再来讲讲:在同一台机器上安装Windows10双系统的教程。 注意哦!这里的Wi…

[论文笔记]SEARCHING FOR ACTIVATION FUNCTIONS

引言 今天带来另一篇激活函数论文SEARCHING FOR ACTIVATION FUNCTIONS的笔记。 作者利用自动搜索技术来发现新的激活函数。通过结合详尽的搜索和基于强化学习的搜索,通过实验发现最佳的激活函数 f ( x ) x ⋅ sigmoid ( β x ) f(x) x \cdot \text{sigmoid}(βx…

盲人旅行新纪元:科技之眼助力无障碍探索之旅

作为一名资深记者,我有幸深入探究并分享一项创新技术如何改变盲人群体的旅行体验。这篇文章聚焦于一款名为蝙蝠避障的辅助应用,它以盲人旅行伙伴的角色,通过实时避障与拍照识别功能,赋予使用者独立、自信地畅游世界的可能。让我们…

acwing算法提高之数据结构--树状数组

目录 1 介绍2 训练3 参考 1 介绍 本专题用来记录树状数组相关题目。 lowbit(x)操作,求数 x二进制表示中最低位的1的值, int lowbit(int x) {return x & -x; }树状数组:用来快速计算动态前缀和的数据结构。 c[x]的表示原数组以第x个数…

Visual Studio Code使用

目录 1.python的调试 2.c的运行 方法1: 方法2: 3.c的调试 3.1调试方法一:先生成执行文件,再调试 3.2调试方法二:同时生成执行文件,调试 4.tasks.json 与launch.json文件的参考 4.1C生成执行文件tas…

ZDOCK linux 下载(无需安装)、配置、使用

ZDOCK 下载 使用 1. 下载1)教育邮箱提交申请,会收到下载密码2)选择相应的版本3)解压 2. 使用方法Step 1:将pdb文件处理为ZDOCK可接受格式Step 2:DockingStep 3:创建所有预测结构 1. 下载 1&…

ubuntu22.04 CH340/CH34x 驱动安装

CH34x驱动地址:CH341SER_LINUX.ZIP - 南京沁恒微电子股份有限公司 1、卸载旧驱动(如果存在) sudo rmmod ch341.ko 2、解压进入 driver 目录 unzip CH341SER_LINUX.ZIP cd CH341SER_LINUX/driver 3、编译 make 可能错误: make[1]…

WS-BAN模型(细粒度图像分类)

WS-BAN模型(细粒度图像分类) 摘要Abstract1. WS-BAN1.1 文献摘要1.2 背景1.3 创新点1.4 WS-BAN方法1.4.1 弱监督注意学习1.4.2 注意力丢弃 1.5 实验1.5.1 数据集1.5.2 实施细节1.5.3 对比试验结果 2. Transformer代码学习3. 细粒度图像分类代码复现 摘要…

ArcGIS Pro3.0软件破解版安装教程

软件名称:ArcGIS Pro 3.0 安装环境:Windows 软件大小:7.3GB 硬件要求:CPU2GHz,内存4G(或更高) 百度云下载链接 : https://pan.baidu.com/s/1CXy1MSwdQXdVnJoV2X422A 提 取 码 :r0w1 教学内…

mysql数据库navicat数据同步时误删除部分数据

背景介绍 听说过删库跑路被抓的,今天就碰到升级服务器(Alibaba Cloud Linux ----> Ubuntu)原因是taos3.2不支持Alibaba Cloud Linux系统! 为了保险起见把现在这个数据库里的数据都备份一份,为了不耽误同事们继续开…

Zynq 7000 系列中的BootROM流程及BootROM Header简介

BootROM Code是在系统复位后执行的一段代码,用于配置PS(处理器系统)。本文将详细解释BootROM的启动过程及BootROM Header的格式。 1 BootROM流程 Zynq 7000在系统复位后进行配置。整个启动过程在图6-1中进行了说明,而BootROM的执…

公司服务器中的kafka消息中间件挂了,我是如何修复的?

今天的公司的system系统服务在运行过程中,提示连接不上kafuka的消息中间件。但是负责kafka的同事已经离职了,询问公司开发也不知道如何处理,我是如何重启kafka消息中间件使system系统服务正常运行? 查看kafka的安装位置 在下面的…

高扬程水泵的性能与应用领域 /恒峰智慧科技

在现代社会中,科技的发展为我们的生活带来了无数便利和可能性。其中,高扬程水泵作为一种高效能的水泵,其独特的设计使其在各个领域都有着广泛的应用,尤其是在森林消防中。 一、高扬程水泵的性能 1. 高扬程:高扬程水泵…

制造型企业 如何实现便捷的机台文件统一管理?

机台文件统一管理,这是生产制造型企业都需要去做的,机台文件需要统一管理的原因主要包括以下几点: 1、提高效率:统一管理可以简化文件的访问和使用过程,提高工作效率,尤其是在需要频繁访问或更新机台文件的…

在 Vue 中预加载组件

在 Vue 中,利用 VueRouter 可以轻松的实现两个组件(页面)之间的切换,有个常用的设计就是需要在登录页登录后跳转至一个内容页,通常的做法是在登录校验完成之后立即切换路由至内容页,接着内容页发送网络请求…

SpringBoot (批量)生成二维码工具类多种方法示例

一、引入依赖 <dependency><groupId>com.google.zxing</groupId><artifactId>javase</artifactId><version>3.4.1</version> </dependency><dependency><groupId>com.google.zxing</groupId><artifactId…

Jmeter05:配置环境变量

1 Jmeter 环境 1.1 什么是环境变量&#xff1f;path什么用&#xff1f; 系统设置之一&#xff0c;通过设置PATH&#xff0c;可以让程序在DOS命令行直接启动 1.2 path怎么用 如果想让一个程序可以在DOS直接启动&#xff0c;需要将该程序目录配置进PATH 1.3 PATH和我们的关系…

【自然语言处理】InstructGPT、GPT-4 概述

InstructGPT官方论文地址&#xff1a;https://arxiv.org/pdf/2203.02155.pdf GPT-4 Technical Report&#xff1a;https://arxiv.org/pdf/2303.08774.pdf GPT-4&#xff1a;GPT-4 目录 1 InstructGPT 2 GPT-4 1 InstructGPT 在了解ChatGPT之前&#xff0c;我们先看看Instr…

Three.js--》探秘虚拟现实VR展厅的视觉盛宴

今天简单实现一个three.js的小Demo&#xff0c;加强自己对three知识的掌握与学习&#xff0c;只有在项目中才能灵活将所学知识运用起来&#xff0c;话不多说直接开始。 源码下载地址&#xff1a;地址 在线体验地址&#xff1a;地址 目录 项目搭建 初始化three代码 camera…