1 Supervised Machine Learning Regression and Classification

文章目录

  • Week1
    • OverView
    • Supervised Learning
    • Unsupervised Learning
    • Linear Regression Model
    • Cost function
    • Gradient Descent
  • Week2
    • Muliple Feature
    • Vectorization
    • Gradient Descent for Multiple Regression
    • Feature Scaling
    • Gradient Descent
    • Feature Engineering
    • Polynomial Regression
  • Week3
    • Motivations
    • Logistic Regression
    • Decision Boundary
    • Cost Function For Logistics Regression
    • Gradient Descent Implementation
    • Overfitting and Adressing Overfitting
    • Regulation

本系列参考视频:吴恩达的machine-learing 可去coursera官网查看
链接
然后就是比较偏向的是个人笔记,具体就是个人的理解能力以及复盘能力有所差异,这边仅当做个参考,做个笔记式的学习。

这边有看到有别的up进行搬运,这边就也一并粘贴出来:
链接

Week1

OverView

首先对于前三节P1,P2,P3
个人觉得不甚重要,主要介绍的就是关于机器学习的工作,应用,等一系列用途。这比较平淡,就没什么重点。

而我总结一下就是:当你编程的时候,你并不知道如何去定义一个编程思想的时候,你所用的就可以是机器学习,比如说,你想编程一个程序,让这个程序可以识别猫或者狗,这对于你纯编程而言,你并不知道如何去做,因为一张图片实际上到编程中,就是一堆的数字,像素点构成,而你不知道他们之间满足什么条件,他们是猫,他们之间满足什么条件,他们是狗,这是非常难的,用传统的算法方法进行识别,但这用机器学习就可以做到,这就是机器学习

Supervised Learning

什么是监督学习呢?
在他的ppt当中他是这么说的:
在这里插入图片描述
对于监督学习来说,他是有准确答案的,我们期望我们输入x,他就可以固定的输出这个y,而我们想要让机器学习的就是他们之间的这种mapping 映射关系,从而我们输入x,他能通过他学到的mapping关系进行映射出对应的y,替我们人类做出抉择。

而相同的对于监督学习来说,他一般是存在两种类型的任务:

  1. Regression
    在这里插入图片描述

就比如说预测房价的这个例子,我们给出一堆的x,也就是已知数据,然后让机器去学习其中的规律,最后比如说得到一条拟合曲线,也就是图中的蓝色线,可能是直线,也可能是曲线,看机器如何去识别出以及人类的算法采用的模型二者相关产生的拟合的曲线,然后我们在训练之后,我们仅仅需要输入x,就能得到对应的预测y-hat。值得关注的是关于回归问题,一般回归的值是一个连续值。
2. Classification
在这里插入图片描述
而对于分类问题而言,一般我们是让他通过分类得到一个值,而这个值一般都是离散值,比如0,1,2这样子的,并且每一个sparse都对应代表一个类别,或者输出一个概率值。

而我们想要做到的事情就是,我们还是想要让其学习到两种分类的边界的线,让我们可以明确分类,注意这个和聚类问题的区别,这边的分类是固定选项的,我们希望将其分成我们所固定好的label。
在这里插入图片描述
小的总结:
在这里插入图片描述
对于监督学习,实际上就是学习的data是一个有明确答案的data,然后一般分为regression和classification两类,前者预测出来的是一个具体的number,后者则是categories。

Unsupervised Learning

在这里插入图片描述
无监督学习和监督学习相比之下最为重要的差别就是无监督学习她学习的是没有标签 也就是文中的unlabeled的数据,或者就是说只有输入x,但是没有一个准确的y。

而对于无监督学习来说,它比较常见的任务如下:

  1. clustering
    聚类问题,用处一般挺多的,也是很流行的一种方式,他和分类问题其实很像,但是差别就是对于分类问题我们知道需要分成什么类,比如分成猫,分成狗,但是对于聚类来说,我们就不能知道到底需要分成什么类别,举个例子,我们希望根据网站用户的购买商品的情况,将用户划分成10类,在分类之前,我们并不知道这一类别的具体的属性,没办法做出label,也就无从训练,只能根据机器自己去学习,自己去分类。
    在这里插入图片描述
  2. dimensionality reduction
    降维 这边先不进行解释,之后特征工程处自然会懂得。
  3. anomaly detection
    异常检测,这实际上和二分类也很像,也需要区分,区别实际上和聚类问题差不多,需要知道的关键的区别就是:在训练的时候的数据是否存在label,那么就有人说了,那我们没有标签,那如何去判断到底是不是有异常呢?比较经典的做法其实就是按分位值来进行判断,这个就等待后续的解释,这边先略,有兴趣也可以去查找一下。

Linear Regression Model

线性回归模型或者线性分类模型,实际上就是我们的一种算法,我们认为我们的数据之间满足一种正相关的简单关系,线性关系,(但事实上不可能这么简单的,方便理解),然后我们通过数据去不断调整y = wx + b中w和b的值,最后得到一个好的w和b的值。

而对于简单的线性回归模型来说,数据一般采用如下图右侧的表格进行展示(当然可能有更多个特征,但在这里先不进行讨论。)
在这里插入图片描述
我们的任务或者说我们的目标就是根据右侧的表格中的数据,最后得出这条拟合曲线。

在这里插入图片描述
而对于这张图的理解就是,实际上是为了引出目标函数(代价函数)的相关知识,这边先介绍一点,我们训练或者初始化出来的一条y=wx+b这条函数(直线),我们拿去带入x,预测对应的y,我们称这个y叫做y-hat(estimated估值),而我们所指的y就是对应x的真实值,taget或者真实的y。

Cost function

现在我们已经知道了y=wx+b,但对于w和b的值我们完全是随机出来的,或者我们仅能随手画出一条较为可能拟合的曲线,这样听起来很不机器,换句话来说就是我们缺少一个评价标准,这个评价标准来评价这条拟合曲线的好坏。

这就引出了cost function 这一个函数来评估曲线的好坏:
在这里插入图片描述
也就是上文中的J(也称作loss损失函数),m的作用是避免点越多损失越大,所以除掉样本总数,2是方便运算用的(之后求梯度方便),y-hat就是预测值,y就是准确值。

而我们做的所有的目标就是为了利用数据集data求取在数据集当中使J最小的w和b,如此之后,在我们输入x之后进行预测的y-hat实际上就会使最为准确的值。
在这里插入图片描述

Gradient Descent

现在的问题就是有了评价标准J,之后我们应该如何通过J这个评价函数(目标函数,损失函数)去反向更新w和b,让新的w和b会使得J这个函数更小呢?现在提出的梯度下降就是来解决这个问题的。

我们来看一个比较生活化的例子:
在这里插入图片描述
对于这个图来说他的高度代表的就是J,损失,他的x和y轴代表的就是参数w和b,那么假设我们初始化的w和b让我们站在一个较高的位置,也就是那个小人所站在的位置,那么此时我们该怎么下山呢?沿着梯度下降(梯度也就是沿着我们向四周360看一圈,沿着最陡的方向去走,这样子下山的速度是最快的)这也就是我们下山的策略,也是我们梯度下降的原理。

此时的公式自然就是:
在这里插入图片描述
对于右半部分的求偏导就是梯度的具体体现,alpha就是学习率。

而至于代码上的实现:
在这里插入图片描述
需要注意的是,我们代码上的实现需要做到w和b的同时更新,不能像右边的式子,w先更新完后,我们拿着更新之后的w去更新b,这虽然也有效果,但明显不是我们想要的,追求完美的我们肯定不会这么做,hh。

而对于梯度下降更为数学的理解:
在这里插入图片描述
当梯度>0的时候,w = w- alpha乘一个大于0的数,所以他向小走,自然更接近谷底,当他<0的时候相反,也是朝谷底走,最后自然会落到谷底。(而假设我们的alpha是固定的,那么他的下降你会发现他的梯度是越来越小的,到达最底梯度为0,也就是此时他也就停下脚步,这时候你就会发现此后不论怎么走,他都是w = w - alpha*0 也就是w=w 做到了真正的停下脚步),至于alpha我们可以这么认为,alpha就是用来控制w变化的速率的,跳的快或者慢,当很大的时候,他可能跳不到谷底,当很小的时候他可能动的太慢,效果太差,这就算一个超参数,需要人为的去调整,当然之后也会有一些别的方法去做到优化,这边不细说。
在这里插入图片描述

但是有时候我们会发现其实我们落到的是一个局部最低点,并不是全局最低点,梯度下降只能做到帮助我们落到局部最优,至于是不是全局最优不一定,这取决于初始化,当然后面也会有相关的方法去优化,这边也不细说,重点是关于局部最优的理解:
在这里插入图片描述
就比如上图中,我们落到了黄点处,但此时w = w - alpha*梯度 此时梯度已经为0了,所以w已经不动了,但是真实的最低点时左边的那个最低点,这实际上也就是梯度下降的一个问题所在,之后adam什么的方法也是重点在解决这个问题,先不用了解。

然后就是现在还要了解的一点就是batch
在这里插入图片描述
实际上机器学习是拿一个batch,一个batch的数据来进行训练的,并不是一个数据一个数据来进行的训练,因为如果一个数据一个数据来,这实际上就很可能会受到极端数据的影响。

Week2

Muliple Feature

实际上我们的生活中不可能存在仅有一个特征的东西,一般是多种特征来共同决定,在之前的例子当中我们y = w * x + b ,但现在我们需要进行修改一下,比如说之前的预测住房的价格的我们选取的只有和size相关,但实际上他和很多因素相关:
在这里插入图片描述
这也就是行向量 我们最后的price = 多个x共同决定
在这里插入图片描述
画成线性代数,用dot product(点乘)来表示的话就是如下:
在这里插入图片描述
而对于这种多x的线性模型我们称之为:multiple linear regression

Vectorization

使用numpy进行计算的话:实际上很简单,直接使用np.dot()接口即可
在这里插入图片描述
而这个相比于前面的计算,他完成了并行计算,他比正常的算法流程来得更快,具体的计算原理这边不细说,只需要关注的是,我们在深度学习,机器学习当中一般使用的都是类numpy的矩阵计算库,不论是torch还是tf的矩阵表示,这边的计算方式都是使用cpu或gpu的计算运算。

Gradient Descent for Multiple Regression

其实也很简单:
在这里插入图片描述
这边就放一张图,不细说,实际上和之前的算法一样的流程,只是多求导几轮。

Feature Scaling

这边其实可以参照我的相关的引申介绍:链接

特征缩放是为了做到在一些情况下多个特征,但是其值的差距过大引起的某些维度的更新过慢的情况。

简单举个例子:
在这里插入图片描述
还是对于之前的那个预测房价的例子,x1是面积,x2是bedrooms的数量,我们此时会发现在整个数据集当中,我们的每一次训练x1的值是非常的大的,x2的值则是相对非常的小的,这样子会变成什么情况呢?

首先我们知道对于w的更新首先也取决于x的值:
在这里插入图片描述
在某一个w更新的过快,某一个w更新的太慢,最后的效果见下:
在这里插入图片描述
实际上就会让较大的那一个在真实点疯狂抖动,这是很不利于梯度下降的。

于是就诞生了特征缩放这一个概念:
比较常用的特征缩放就是归一化(mean normalization/maxmin normalization)和标准化(z-score)

在这里插入图片描述
在这里插入图片描述
而这两种方法之下,其实最常用的还是下面的这个标准化,第一种方法将数据缩放到0-1之间但易受到异常点的影响,第二种方法则还好,他把数据缩放到-1到1之间。

而对于什么时候需要进行特征缩放,对于数据本身就已经在很小的范围内,我们没必要进行特征缩放,但当数据范围很大或者很小,或者数据本身就已经很大的时候对于数据进行缩放。
在这里插入图片描述

Gradient Descent

在多次的迭代中,j会随着迭代次数的增加会变得越来越小,接近稳定,这是非常理想的情况下,当我们调整学习率,或者初始化数据不同的时候一般会变成后面的图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

实际上就是J会不断变化或者就是变化的极慢,原因可能就是我们选择的alpha太大或者太小。

Feature Engineering

在正常情况下,我们采集的数据只有frontage和deepth,但是我们认为price取决于面积,于是我们可以自己产生一个size,作为x3,进行输入,这一部分其实比较取决于我们对于业务的理解,我们人类的经验。
在这里插入图片描述
有人此时会问,为什么frontage和depth不是已经存在吗,他俩不就能代表size?实际上确实可以,但是我们直接写一个size,实际上就是做到让他更好的去学习出size,而非让他自己猜出size,至于此时的frontage为什么存在,我们可以这么理解,此时我们考虑的就是单纯frontage对于price的增益效果。

Polynomial Regression

多项式的回归问题,实际上的分析中,问题一般都不是简单的线性问题,我们在机器学习当中一般会采用这种定义多项式去模拟,但现在证明这个方式已经快要过时了,不太适合于深度学习,这边深度学习都采用多层的线性,这边也就先跳过,只给出相关的理解,至于梯度的计算就留给你们自己了。
在这里插入图片描述

Week3

Motivations

这一节主要讲解的是在classfication的情况下,线性回归的缺点,为之后提出逻辑回归做了一个开头(注意),逻辑回归虽然叫做回归,但是他是解决分类问题的。

在这里插入图片描述
在这里插入图片描述

加入我们拿线性回归问题来解决分类问题,我们的处理就是当其预测出来的值小于0.5,我们取到的是no这个类别,当预测出来的值是大于0.5,那我们就当作是yes这一类,当然预测的数值会大于1也会小于0。这样子会有一个什么样子的问题呢,比如我们加上左右边的一个×,那么新的回归线就会是那条绿线,我们会发现此时有两个×被纳入了no这个家族,也就是对于线性回归来说,完成分类问题易受到异常值的影响。

总结一下,线性回归完成分类的坏处:

  1. 值没有在0-1之间,(我们一般采取的是0为no,1为yes)
  2. 易受异常值的影响。

Logistic Regression

替代的我们采用逻辑回归来替代线性回归,首先,先看一下,采用了逻辑回归之后,我们的图像:
在这里插入图片描述
我们希望我们绘制的图像是这样子的,始终在0-1之间,这个时候比如我们输出的值为0.7,我们可以将之认为这个值对应的就是预测是yes的概率是70%,这样子也是极好的,我们这边采用了sigmoid函数进行缩放,这也就是logistic和线性的区别,多采用了一层sigmoid函数进行包裹。

具体的实现函数:
在这里插入图片描述

Decision Boundary

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上面的三张图,实际上就是关于决策边界的理解,实际上告诉我们的是,面对多维度的点集,我们使用逻辑回归之后,想要训练出来的东西和线性回归的一样,仍然是对应的w和b的值,最后构成相关的的曲线,对于这些数据进行包围,然后分类就是,将这些w和b与对应的x相乘之后,得到一个值,求这个值和0的大小,进行的分类。

Cost Function For Logistics Regression

训练集的格式
在这里插入图片描述
仍然是多个特征x1到xn,最后我们想要输出的是一个y,y的取值只能是0或者1,和预测的时候不一样,预测可以小数,后面会经过一个softmax或者直接设置阈值。

回忆一下我们之前采用的Square error 那可以用在logistics上吗?可以用,但是效果很不好,原因就是y的值非连续,最后出来的效果就是绘制的J损失函数的图像会有很多的局部最低点(非凸函数)。
在这里插入图片描述
这导致训练的时候就很难去达到最好的效果。

而相同的我们采用一个新的损失函数来让这一切可以训练,从而得到使得损失函数最小的w和b。
在这里插入图片描述
简单一点的式子,由于y只能取0或者1,所以有下面的式子。
在这里插入图片描述
解释一下式子吧:
在这里插入图片描述
在这里插入图片描述
当y=1的时候,实际上就是当经过sigmoid函数输出后得到的值是大于0.5的那一部分,也就是上图的0.5-1之间的那一部分,在这一部分当中,在这一段区间中,我们分析当输出为1,loss为0 正确的,当输出不为1,loss随之变化,且变化幅度越过0.5之前都还能接受,所以这是一个好的函数,相同的我们可以看y=0的时候,这个分析就留给你们自己了,一样的分析方法,而且我们会发现这两部分是完全对称y=0.5的函数,也就是说loss没有偏向性,没有更倾向于让哪一边更小,这也是很好的特性。

最后绘制出来的图像就是如下,手绘有点丑陋,理解意思即可哈。
在这里插入图片描述

Gradient Descent Implementation

关于这一部分其实实际上就和之前的线性方程的梯度下降是一样的,这边就不细说了,只是加上了链式求导。

在这里插入图片描述
更新方法也是一样的。

Overfitting and Adressing Overfitting

这边介绍一下回归 和 分类的overfitting:

回归:
在这里插入图片描述
分类:
在这里插入图片描述
我们通过看上文的图像我们自然可以明白三种类型的区别:

对于underfit,就是还未拟合,和我们想要的曲线还有差距,这时我们的做法应该是继续训练,或者调整训练模型,而对于just right 就是训练的正好,而overfitting就是学到了太多的东西了,他对于训练集非常有效,但是对于测试,或者不是这个训练集的一部分内容的元素来说,这就非常的有问题,泛化能力太差了,我们可以看到方差太大了。

而如何解决overfitting问题这边会有三个角度提供给你:
在这里插入图片描述

  1. 收集更多的数据
    在这里插入图片描述
    可以看到当点更密集,他就更容易学到这样子的效果。

  2. 选择你认为的比较相关的特征,而非全部特征
    在这里插入图片描述
    选择个人认为比较有用的特征。

  3. 正则化
    在这里插入图片描述
    把高的w的级数通过正则化算法调小(先这么理解,后面会解释,因为正则化实际上惩罚了所有的参数)。

Regulation

正则化采用的方式很简单,就是在原本计算损失函数的末尾加上一个参数,这个参数和所有参数的w相关:
在这里插入图片描述
这是通过实践证明了的方法,他会更容易让高级参数更趋向于0,而非直接等于0,所以他是一个L2类型的正则化,它可以做到让高级参数变小,低级参数想对于高级变化不大,进而提供更好的泛化能力,下面通过数学的角度进行解释一下为什么会变化:

对于线性回归:
在这里插入图片描述
对于线性回归来说,我们进行变化之后可以看到,实际上他会在每一次迭代过程中都对于w进行一次微小的缩小就是那个shrink-wj,这就做到了会让高级参数逐渐趋向于0(个人推测可能是因为低级参数比较好进行改变,高级的比较难,没有依据,纯猜测)。

而相同的对于logistic也是这个道理,这边就省略不写。

而我们对于b是否要进行正则化呢,其实没有严格的规定,要也可以,不要也可以,区别很小,所以就不要啦。
在这里插入图片描述

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

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

相关文章

企业动产抵押代表着什么?

动产抵押 动产抵押是指债务人或第三人以动产不移转占有而供担保的抵押形式。在债务人不履行债务时&#xff0c;抵押权人占有抵押动产&#xff0c;并就其出卖价金优先于其他债权而受清偿。由于不移转动产的占有而与以动产为标的的质权相区别&#xff0c;因动产抵押为不占有债务…

python socket编程2 - socket创建发送方所需参数的获得

使用socket进行进程间通信或者跨网络的计算机间通讯&#xff0c;有点类似日常生活中的发送快递。 根据发送方的需要&#xff0c;选择不同的物流公司&#xff1a; 在选择适合的公司和运输方式后&#xff0c;需要在app上做出选择&#xff0c;并根据要求填写一些信息。app会根据…

YOLO目标检测——树叶检测数据集下载分享【含对应voc、coco和yolo三种格式标签】

实际项目应用&#xff1a;生物多样性研究、林业管理、环境监测和教育科研等方面数据集说明&#xff1a;树叶分类检测数据&#xff0c;真实场景的高质量图片数据&#xff0c;数据场景丰富&#xff0c;总共十个类别。标签说明&#xff1a;使用lableimg标注软件标注&#xff0c;标…

【echarts】实现单线与多线滚轮联动、隐藏拖拽、关闭动画

单线滚轮联动 <!DOCTYPE html> <html> <head><meta charset"utf-8"><title>ECharts DataZoom</title><script src"https://cdn.jsdelivr.net/npm/echarts5.2.0/dist/echarts.min.js"></script> </hea…

it is missing from your system. Install or enable PHP‘s sodium extension.

Composer with –ignore-platform-reqext-sodium it is missing from your system. Install or enable PHP’s sodium extension. 出现如上的报错是的 开启php.ini中的 sodium的扩展

CSS英文单词强制截断换行

效果图&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>菜鸟教程(runoob.com)</title> <style> p.test1 {width:9em; border:1px solid #000000;word-break:keep-all; }p.…

电视盒子哪个牌子好?资深小编种草超值网络电视盒子推荐

智能电视出现后电视盒子并没有被淘汰&#xff0c;是因为它可以让配置落后的智能电视升级换代、更换全新的系统&#xff0c;小编这几年体验过数十款电视盒子了&#xff0c;鉴于很多朋友在问电视盒子哪个牌子好&#xff0c;我盘点了五款最值得入手的网络电视盒子推荐给各位。 第一…

面了一个字节出来的大佬,见识到了基础天花板...

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…

【Machine Learning in R - Next Generation • mlr3】

本篇主要介绍mlr3包的基本使用。 一个简单的机器学习流程在mlr3中可被分解为以下几个部分&#xff1a; 创建任务 比如回归、分裂、生存分析、降维、密度任务等等挑选学习器&#xff08;算法/模型&#xff09; 比如随机森林、决策树、SVM、KNN等等训练和预测 创建任务 本次示…

一、认识微服务

目录 一、单体架构 二、分布式架构 三、微服务 1、微服务架构特征&#xff1a; 1.单一职责&#xff1a; 2.面向服务&#xff1a; 3.自治&#xff1a; 4.隔离性强&#xff1a; 2、微服务结构&#xff1a; 3、微服务技术对比&#xff1a; 一、单体架构 二、分布式架构 三…

go语言学习之旅之go语言基础语法

学无止境&#xff0c;今天学习go语言的基础语法 行分隔符 在 Go 程序中&#xff0c;一行代表一个语句结束。没有结束符号 注释 注释不会被编译&#xff0c;每一个包应该有相关注释。 单行注释是最常见的注释形式&#xff0c;你可以在任何地方使用以 // 开头的单行注释。多…

Windows系统CMake+VS编译protobuf

目录 一些名词CMake构建VS工程下载protobuf源码下载CMake编译QT中使用 方案二失败&#xff1a;CMakeQT自带的Mingw编译参考链接 一些名词 lib dll lib库实际上分为两种&#xff0c;一种是静态链接lib库或者叫做静态lib库&#xff0c;另一种叫做动态链接库dll库的lib导入库或称…