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

大数据机器学习算法和计算机视觉应用07:机器学习

Machine Learning

  • Goal of Machine Learning
  • Linear Classification
  • Solution
  • Numerical output example: linear regression
  • Stochastic Gradient Descent
  • Matrix Acceleration

Goal of Machine Learning 机器学习的目标

假设现在有一组数据 x i , y i {x_i,y_i} xi,yi,其中 x c ∈ R d x_c \in \R^d xcRd,d指的是特征数,而 y c ∈ R y_c \in \R ycR标签值(label)

上述数据被称为训练集(training data set)。而机器学习的目的就是训练一个模型(model)(或者假说) h h h在某种条件下最贴近该训练集数据。

现在假设出现了一个新的点 x ∗ ∈ R d x* \in \R^d xRd,我们需要用我们的模型去预测其标签值 y ∗ y* y,这个值 x ∗ x* x就被称作检验数据(test data),模型检测标签值的准确程度被叫做泛化误差(generalization error)

Linear Classification 线性分类

上述情景的一个经典例子是线性分类。

条件:在平面上有一堆红色的点和黑色的点。

目标:找到一条直线,使得所有红色的点都在直线一侧,而黑色点都在直线另一侧。

我们保证这个直线是存在的,如何找到满足条件的直线呢?

我们将点到直线的垂直距离记为模型的标签值,并且希望所有红色点的垂直距离为正,而黑色点的垂直距离为负,这样他们就一定分布在直线的异侧。

因此我们得到训练集:
( x 1 , 0 ) , ( x 2 , 1 ) , ⋯ (x_1,0),(x2,1),\dotsb (x1,0),(x2,1),
其中标签值为0表示红色点,为1表示黑色点。

目标:我们将所有的 x i x_i xi丢到模型里面,模型给出的标签值可以和训练集的标签值尽量一致。

那么我们如何找到这个模型 h h h呢?

Solution 解决办法

平面,直线,你想到了我们之前学过的什么东西?没错,线性规划。

所有的红色点和黑色点都对应一个约束条件,而我们的目标是寻找可行域。

实际上我们会有无数条直线满足上面的约束条件,我们如何定义其中最好的一条决定了我们如何训练模型。我们给出的答案是,有**最大边界(maximum margin)**的一条直线。也就是说,所有的点到直线的距离都大于一个常数 σ \sigma σ,这个 σ \sigma σ就是边界。

上面的最优化模型也有一个名称:支持向量机(support vector machine,SVM)
我们使用二分搜索来确定 σ \sigma σ,而对于每一个 σ \sigma σ我们解一个线性规划即可。

Numerical output example: linear regression 数值输出:线性回归

在更多的情况下,我们需要返回一个预测值,一个常见的例子就是线性回归。
我们定义了一系列训练集 ( x i , y i ) (x_i,y_i) (xi,yi)和损失函数 L ( h ) = 1 n Σ ( < x i , h > − y i ) 2 L(h) = \frac{1}{n}\Sigma(<x_i,h> - y_i)^2 L(h)=n1Σ(<xi,h>yi)2
模型生成之后我们给出测试集 x ∗ x* x,模型给出预测值 y ∗ y* y。损失函数计算预测值和实际值的垂直距离,使得模型可以持续优化。

如何找到线性回归的模型呢?前面我们提到的梯度下降是一个好方法。

我们回忆一下梯度下降的方法:

  1. 选择初始点 h 0 h_0 h0,步数 T T T和学习率 η \eta η
  2. 在每步迭代中,计算当前点的梯度,并且迭代点 h i + 1 = h i − η ∇ L ( h ) h_{i+1} = h_i -\eta \nabla L(h) hi+1=hiηL(h)
  3. 最后输出 1 T Σ h i \frac{1}{T}\Sigma h_i T1Σhi
    (或者直接输出 h T h_T hT)

我们发现 L ( h ) L(h) L(h)具有一个很好的性质:由于 x 2 x^2 x2是凸函数,因此其线性组合也是凸的。所以我们可以在这个问题中使用梯度下降法。

另外一个问题是: L ( h ) L(h) L(h)的梯度是什么?

要解决这个问题,我们需要关注损失函数 f i f_i fi的梯度:

∇ f i = ( < h , x i > − y i ) 2 \nabla f_i = (<h,x_i>-y_i)^2 fi=(<h,xi>yi)2

由于链式法则,令 z = < h , x i > − y i z = <h,x_i>-y_i z=<h,xi>yi,那么有
d f i d h j = d f i d z d z d h d f i d z = 2 z d z d h = x i , j \frac{df_i}{dh_j} = \frac{df_i}{dz}\frac{dz}{dh} \\ \frac{df_i}{dz} = 2z \\ \frac{dz}{dh} = x_{i,j} dhjdfi=dzdfidhdzdzdfi=2zdhdz=xi,j
因此
d f i d h = 2 ( < h j , x i , j > − y i ) x i , j \frac{df_i}{dh} = 2 (<h_j,x_{i,j}>-y_i)x_{i,j} dhdfi=2(<hj,xi,j>yi)xi,j
因此求和一下就得出损失函数的梯度:
∇ L ( h ) = 2 n < ( Σ < h 1 , x t , 1 > − y t ) x t , 1 , Σ ( < h 2 , x t , 2 > − y t ) x t , 2 , ⋯ > \nabla L(h) = \frac{2}{n} < (\Sigma<h_1,x_{t,1}>-y_t)x_{t,1},\Sigma (<h_2,x_{t,2}>-y_t)x_{t,2},\dots> L(h)=n2<(Σ<h1,xt,1>yt)xt,1,Σ(<h2,xt,2>yt)xt,2,>

Overfitting 过拟合

过拟合是机器学习中一种另外的状况,这种情况下模型为了贴合数据而变得十分奇怪且复杂。这一样也是我们不希望看到的。如下图所示:

过拟合

也就是说,我们希望我们的模型要好,而且要直观简单,要有鲁棒性。我们有什么方法来保证鲁棒性吗?

一种简单的方法是,控制模型 h h h范数。由前一小节我们看到,预测结果由 h i x t , i h_ix_{t,i} hixt,i控制,也就是说当 h i h_i hi的范数很大时,单个数据的变化就会对整体造成很大的影响,这是我们不希望看到的。反过来看,控制模型的范数也就减小了单个数据的整体影响,提高了鲁棒性。

Ridge Regression 岭回归算法

岭回归算法在原来 L ( h ) L(h) L(h)的基础上添加了一项正则项(regularization),使得新的损失函数变为:
L ( h ) = 1 n Σ ( < h , x > − y ) 2 + λ ∣ ∣ h ∣ ∣ 2 L(h) = \frac{1}{n}\Sigma(<h,x>-y)^2 + \lambda||h||^2 L(h)=n1Σ(<h,x>y)2+λ∣∣h2
在这个损失函数中,我们将模型的范数也加入考虑,在欠拟合和过拟合之间做出了平衡。

由于两个平方项都是凸的,因此新的损失函数很明显也是凸的。

Stochastic Gradient Descent SGD 随机梯度下降

另外一个问题在于,当训练数据量很大的时候,损失函数的计算就会变得十分缓慢,这种情况应该怎么办呢?

如果我们随机取一个样本点,并且用这个样本点直接代表 L ( h ) L(h) L(h),我们的计算量就只有这些点了,对吧?其实这种方法是有一定道理的,因为
E ( ∇ L ′ ) = 1 n ∑ f i = ∇ L ( h ) E(\nabla L') = \frac{1}{n}\sum f_i = \nabla L(h) E(L)=n1fi=L(h)
所以这种方法是无偏的。

假设我们随机采样 b b b个点(这个值被称为批大小(batch size)),并且定义损失函数为
∇ ^ L ( h ) = 1 b ∑ i f i \widehat{\nabla} L(h)=\frac{1}{b}\sum_i f_i L(h)=b1ifi

也就是说,当 b = n b=n b=n时,这种方法是GD(梯度下降法);当 b = 1 b=1 b=1时,这种方法是SGD(随机梯度下降法)。

随机取一个训练样本是有风险的,估计出来的模型可能是不准确的,而且一般需要更多的迭代步骤。但是如果 n n n数量过大,这种开销比起每步计算 n n n次要好上很多。这是一个方差和时间的权衡。

Matrix Acceleration 矩阵加速计算

我们将变量看作一个矩阵 x 1 x 2 . . . x n \begin {matrix} \bold{x_1}\\ \bold{x_2}\\ ...\\ \bold{x_n} \end{matrix} x1x2...xn,这是一个 n × d n\times d n×d矩阵,然后和 d × 1 d \times 1 d×1模型向量 h 相乘 \bold{h}相乘 h相乘得到最终结果 y \bold{y} y,我们要计算 min ⁡ ∣ ∣ X ⋅ h − y ∣ ∣ 2 \min ||\bold{X}\cdot \bold{h}-\bold{y}||^2 min∣∣Xhy2

其实上述矩阵有一个近似解 X T X − 1 y \bold{X^TX}^{-1}\bold{y} XTX1y,但是在 n n n非常大的时候,求矩阵的转置和逆一样非常的麻烦,怎么办呢?

我们可以先找一个 b × n ( b < < n ) b\times n(b<<n) b×n(b<<n)的稀疏矩阵 S \bold{S} S,然后用 S X \bold{SX} SX代替原来的 X \bold{X} X,这样我们就把前面的矩阵变成了一个小得多的 b × d b\times d b×d矩阵,这个小矩阵求转置和逆就轻松多了。

这种方法和SGD有异曲同工之妙,矩阵 S \bold{S} S类似于一种随机采样矩阵,计算出来的 b × d b\times d b×d矩阵就好像从 n n n个样本点中采样 b b b个。

Feedforward Neural Network 前馈神经网络

前馈神经网络是一种最简单的神经网络。他的结构是一个分层图,每层有节点,每层节点和下一层的节点之间有加权的边连接。如下图所示:

神经网络节点

对于每层的节点,我们将所有的输入边加权作为总的输入,然后处理则使用一个非线性的函数得出本节点的输出,这个函数被称为激活函数。激活函数在不同的情况下一般不同,但是有一种比较常见的函数叫做整流线性单元(ReLU)函数,另外一种函数叫做Sigmoid函数。

OK,根据上面的说法,神经网络包含输入,加权,和每个节点的处理。关于输入和处理我们都给出了具体的例子,但是我们仅仅通过SGD减少了计算的样本数量,并没有实际的加快梯度的计算。这就是我们下节课要介绍的方法:反向传播(Back Propagation)

相关文章:

大数据机器学习算法和计算机视觉应用07:机器学习

Machine Learning Goal of Machine LearningLinear ClassificationSolutionNumerical output example: linear regressionStochastic Gradient DescentMatrix Acceleration Goal of Machine Learning 机器学习的目标 假设现在有一组数据 x i , y i {x_i,y_i} xi​,yi​&…...

基于asp.net游乐园管理系统设计与实现

博主介绍&#xff1a;专注于Java&#xff08;springboot ssm 等开发框架&#xff09; vue .net php python(flask Django) 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设&#xff0c;从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找…...

一区牛顿-拉夫逊算法+分解+深度学习!VMD-NRBO-Transformer-GRU多变量时间序列光伏功率预测

一区牛顿-拉夫逊算法分解深度学习&#xff01;VMD-NRBO-Transformer-GRU多变量时间序列光伏功率预测 目录 一区牛顿-拉夫逊算法分解深度学习&#xff01;VMD-NRBO-Transformer-GRU多变量时间序列光伏功率预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.中科院一区…...

uniapp使用腾讯地图接口的时候提示此key每秒请求量已达到上限或者提示此key每日调用量已达到上限问题解决

要在创建的key上添加配额 点击配额之后进入分配页面&#xff0c;分配完之后刷新uniapp就可以调用成功了。...

WPF 完美解决改变指示灯的颜色

WPF 完美解决改变指示灯的颜色 原有&#xff1a;自己再做WPF页面设计后发现直接去查找页面多个控件嵌套情况下找不到指示灯&#xff08;Button实现的&#xff0c;详细可以看这篇文章 这里&#xff09;&#xff0c;具体看看来如何实现 加粗样式思路&#xff1a;无论多级嵌套&a…...

Flutter/Dart:使用日志模块Logger Easier

Flutter笔记 Flutter/Dart&#xff1a;使用日志模块Logger Easier Logger Easier 是一个为 Dart 和 Flutter 应用程序量身定制的现代化日志管理解决方案。它提供了一个高度灵活、功能丰富的日志记录系统&#xff0c;旨在简化开发者的日志管理工作&#xff0c;同时提供一定的定制…...

阿里云云服务器初始化

如果我们的云服务器出现无法挽回的错误时&#xff0c;我们可以尝试初始化云服务器进行解决。 首先搜索阿里云&#xff08;你要先确认自己已经购买了阿里云的云服务器&#xff09;&#xff1a; 登录账号后主页向下划 进入后点击管理控制台 点击进入后可以看到正在运行&#xff0…...

Python中SKlearn的K-means使用详解

文章目录 Python中SKlearn的K-means使用详解一、引言二、K-means算法原理三、使用SKlearn进行K-means聚类的步骤1、导入必要的库2、生成数据集3、创建K-means模型并设置参数4、训练模型5、预测簇标签6、可视化结果 四、总结 Python中SKlearn的K-means使用详解 一、引言 K-mea…...

红帽RHCE认证适用哪些人学习

红帽 RHCE工程师认证有着广泛的适用人群。对于初入 IT 行业的新手来说&#xff0c;RHCE 是快速建立专业基础、提升自身竞争力的绝佳途径。它能帮助新人系统地学习 Linux 系统知识&#xff0c;从基础的安装配置到复杂的网络服务管理&#xff0c;一步一个脚印地构建起坚实的技术框…...

FFmpeg 框架简介和文件解复用

文章目录 ffmpeg框架简介libavformat库libavcodec库libavdevice库 复用&#xff08;muxers&#xff09;和解复用&#xff08;demuxers&#xff09;容器格式FLVScript Tag Data结构&#xff08;脚本类型、帧类型&#xff09;Audio Tag Data结构&#xff08;音频Tag&#xff09;V…...

《Java核心技术I》Swing中的边框

边框 BorderFactory静态方法创建边框&#xff0c;凹斜面&#xff0c;凸斜面&#xff0c;蚀刻&#xff0c;直线&#xff0c;蒙版&#xff0c;空白。 边框添加标题&#xff0c;BorderFactory.createTitledBorder 组合边框&#xff0c;BorderFactory.createCompoundBorder JCo…...

MySQL 中的常见错误与排查

在 MySQL 数据库的日常运维中&#xff0c;管理员可能会遇到各种错误。无论是查询性能问题、连接异常、数据一致性问题&#xff0c;还是磁盘空间不足等&#xff0c;及时排查并解决这些问题是保证数据库稳定运行的关键。本文将列出 MySQL 中一些常见的错误及其排查方法。 一、连接…...

SQL 查询方式比较:子查询与自连接

在 SQL 中&#xff0c;子查询和自连接是两种常见的查询方式&#xff0c;它们的功能虽然可以相同&#xff0c;但实现的方式不同。本文通过具体示例&#xff0c;深入探讨这两种查询方式&#xff0c;并配合数据展示&#xff0c;帮助大家理解它们的使用场景和差异。 数据示例 假设…...

Linux下学【MySQL】所有常用类型详解( 配实操图 通俗易懂 )

每日激励&#xff1a;“当你觉得你会幸运时&#xff0c;幸运就会眷顾你&#xff0c;所以努力吧&#xff0c;只要你把事情做好&#xff0c;并觉得你会幸运&#xff0c;你将会变得幸运且充实。” 绪论​&#xff1a; 本章继续学习MySQL的知识&#xff0c;本章主要讲到mysql中的所…...

Gin-vue-admin(1):环境配置和安装

目录 环境配置如果443网络连接问题&#xff0c;需要添加代理服务器 后端运行前端运行 环境配置 git clone https://gitcode.com/gh_mirrors/gi/gin-vue-admin.git到server文件目录下 go mod tidygo mod tidy 是 Go 语言模块系统中的一个命令&#xff0c;用于维护 go.mod 文件…...

如何在centos系统上挂载U盘

在CentOS上挂载NTFS格式的U盘,需要执行一系列步骤,包括识别U盘设备、安装必要的软件、创建挂载点,并最终挂载U盘。以下是在CentOS上挂载NTFS格式U盘的详细步骤: 一、准备工作 确认CentOS版本: 确保你的CentOS系统已经安装并正常运行。不同版本的CentOS在命令和工具方面可能…...

2024年12月大语言模型最新对比:GPT-4、Claude 3、文心一言等详细评测

前言 随着人工智能技术的快速发展&#xff0c;大语言模型(LLM)已经成为了技术领域最热门的话题。本文将详细对比目前主流的大语言模型&#xff0c;帮助大家选择最适合的工具。 一、OpenAI GPT系列 1. GPT-4 核心优势&#xff1a; 多模态理解能力强 逻辑推理能力出色 创造…...

openjdk17 从C++视角看 String的intern的jni方法JVM_InternString方法被gcc编译器连接

symbols-unix 文件部分内容 JVM_IHashCode JVM_InitClassName JVM_InitStackTraceElement JVM_InitStackTraceElementArray JVM_InitializeFromArchive JVM_InternString 要理解在 symbols-unix 文件中包含 JVM_InternString 方法的原因&#xff0c;我们需要从构建过程、符号…...

day16 python(4)——UnitTest

【没有所谓的运气&#x1f36c;&#xff0c;只有绝对的努力✊】 目录 1、UnitTest框架介绍 1.1 UnitTest框架 1.2 unitTest的组成&#xff08;5部分&#xff09; 1.2.1 TestCase&#xff08;测试用例&#xff09; 1.2.2 TestSuit 和 TestRunner 【方法1】 【方法2】 1…...

Kafka快速扫描

Architecture 系统间解耦&#xff0c;异步通信&#xff0c;削峰填谷 Topic 消息主题&#xff0c;用于存储消息 Partition 分区&#xff0c;通过扩大分区&#xff0c;可以提高存储量 Broker 部署Kafka服务的设备 Leader kafka主分区 Follwer kafka从分区 高性能之道&#xff1a…...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战&#xff1a;腾讯云IM群组成员管理&#xff08;增删改查&#xff09; 一、前言 在社交类App开发中&#xff0c;群组成员管理是核心功能之一。本文将基于UniApp框架&#xff0c;结合腾讯云IM SDK&#xff0c;详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...

【UE5 C++】通过文件对话框获取选择文件的路径

目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 &#xff0c;这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器&#xff0c;右键点击 .uproject 文件&#xff0c;选择 "Generate Visual Studio project files"&#xff0c;重…...

Linux 下 DMA 内存映射浅析

序 系统 I/O 设备驱动程序通常调用其特定子系统的接口为 DMA 分配内存&#xff0c;但最终会调到 DMA 子系统的dma_alloc_coherent()/dma_alloc_attrs() 等接口。 关于 dma_alloc_coherent 接口详细的代码讲解、调用流程&#xff0c;可以参考这篇文章&#xff0c;我觉得写的非常…...