0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

实例:如何建立一个线性分类器并进行优化

zhKF_jqr_AI 来源:未知 作者:易水寒 2017-12-22 11:44 次阅读

之前,论智曾在TOP 10:初学者需要掌握的10大机器学习(ML)算法介绍了一些基础算法及其思路,为了与该帖联动,我们特从机器学习热门课程HSE的Introduction to Deep Learning和吴恩达的Neural Networks and Deep Learning中挑选了一些题目,演示PythonTensorFlow和Keras在深度学习中的实战应用.

如何建立一个线性分类器并进行优化.

在这个任务中,我们将实现一个线性分类器,并用numpy和随机梯度下降算法对它进行训练。

二元分类

为了更直观,我们用人造数据(synthetic data)解决二元分类问题。

上图中有红、蓝两类数据,从分布上看它们不是线性可分的。所以为了分类,我们应该在里面添加特征或使用非线性模型。请注意,图中两类数据的决策边缘都呈圆形,这意味着我们能通过建立二元特征来使它们线性分离,具体思路如下图所示:

用expand函数添加二次函数后,我们得到了这样的测试结果:

  1. # 简单的随机数测试

  2. dummy_X = np.array([

  3. [0,0],

  4. [1,0],

  5. [2.61,-1.28],

  6. [-0.59,2.1]

  7. ])

  8. # 调用expand函数

  9. dummy_expanded = expand(dummy_X)

  10. # 它应该返回这些值: x0 x1 x0^2 x1^2 x0*x1 1

  11. dummy_expanded_ans = np.array([[0. , 0. , 0. , 0. , 0. , 1. ],

  12. [1. , 0. , 1. , 0. , 0. , 1. ],

  13. [2.61, -1.28, 6.8121, 1.6384, -3.3408, 1. ],

  14. [-0.59, 2.1 , 0.3481, 4.41, -1.239, 1. ]])

logistic回归

曾经我们提到过,logistic回归非常适合二元分类问题。为了分类对象,我们需要预测对象表示为1(默认类)的概率,这就需要用到线性模型和逻辑函数的输出:

  1. defprobability(X, w):

  2. """

  3. 对输入赋值特征和权值

  4. 根据上式,返回输入x后y==1的预测概率,P(y=1|x)

  5. :参数 X: feature matrix X of shape [n_samples,6] (expanded) →特征矩阵X

  6. :参数 w: weight vector w of shape [6] for each of the expanded features →权值向量w

  7. :返回值: 范围在 [0,1] 之间的一系列概率.

  8. """

  9. return1./ (1+ np.exp(-np.dot(X, w)))

在logistic回归中,我们能通过最小化交叉熵发现最优参数w:

实例:如何建立一个线性分类器并进行优化
  1. defcompute_loss(X, y, w):

  2. """

  3. 将特征矩阵X [n_samples,6], 目标向量 [n_samples] of 1/0,

  4. 以及权值向量 w [6]代入上述公式, 计算标量的损失函数.

  5. """

  6. return-np.mean(y*np.log(probability(X, w)) + (1-y)*np.log(1-probability(X, w)))

由于用了梯度下降算法训练模型,我们还需要计算梯度,具体来说,就是要对每个权值的损失函数求导:

以下是具体的数学计算过程(也可点击https://math.stackexchange.com/questions/477207/derivative-of-cost-function-for-logistic-regression/2539508#2539508查看):

实例:如何建立一个线性分类器并进行优化
  1. defcompute_grad(X, y, w):

  2. """

  3. 将特征矩阵X [n_samples,6], 目标向量 [n_samples] of 1/0,

  4. 以及权值向量 w [6]代入上述公式, 计算每个权值的导数vector [6].

  5. """

  6. returnnp.dot((probability(X, w) - y), X) / X.shape[0]

训练

现在我们已经建立了函数,接下来就该用随机梯度下降训练分类器了。我们将试着调试超参数,如batch size、学习率等,来获得最佳设置。

Mini-batch SGD

不同于满梯度下降,随机梯度下降在每次迭代中只需要一个随机样本来计算其损失的梯度,并进入下一个步骤:

  1. w = np.array([0,0,0,0,0,1])# 初始化

  2. eta =0.05# 学习率

  3. n_iter =100

  4. batch_size =4

  5. loss = np.zeros(n_iter)

  6. foriinrange(n_iter):

  7. ind = np.random.choice(X_expanded.shape[0], batch_size)

  8. loss[i] = compute_loss(X_expanded, y, w)

  9. dw = compute_grad(X_expanded[ind, :], y[ind], w)

  10. w = w - eta*dw

下图展示了当batch size=4时,决策面(decision surface)和交叉熵损失函数如何随着不同batch的SGD发生变化。

实例:如何建立一个线性分类器并进行优化

左:决策面;右:损失函数

用Momentum优化SGD

Momentum是模拟物理里动量的概念,如下图所示,它能在相关方向加速SGD,抑制振荡,从而加快收敛。从计算角度说,就是对上一步骤更新向量和当前更新向量做加权平均,将其用于当前计算。

实例:如何建立一个线性分类器并进行优化

  1. eta =0.05# 学习率

  2. alpha =0.9# momentum

  3. nu = np.zeros_like(w)

  4. n_iter =100

  5. batch_size =4

  6. loss = np.zeros(n_iter)

  7. foriinrange(n_iter):

  8. ind = np.random.choice(X_expanded.shape[0], batch_size)

  9. loss[i] = compute_loss(X_expanded, y, w)

  10. dw = compute_grad(X_expanded[ind, :], y[ind], w)

  11. nu = alpha*nu + eta*dw

  12. w = w - nu

下图展示了引入Momentum后,当batch size=4时相应决策面和交叉熵损失函数随不同batch SGD+momentum发生的变化。可以看出,损失函数下降速度明显加快,更快收敛。

实例:如何建立一个线性分类器并进行优化

左:决策面;右:损失函数

RMSprop

加快收敛速度后,之后我们要做的是调整超参数学习率,这里我们介绍Hinton老爷子的RMSprop。这是一种十分高效的算法,利用梯度的平方来调整学习率:

  1. eta =0.05# 学习率

  2. alpha =0.9# momentum

  3. G = np.zeros_like(w)

  4. eps =1e-8

  5. n_iter =100

  6. batch_size =4

  7. loss = np.zeros(n_iter)

  8. foriinrange(n_iter):

  9. ind = np.random.choice(X_expanded.shape[0], batch_size)

  10. loss[i] = compute_loss(X_expanded, y, w)

  11. dw = compute_grad(X_expanded[ind, :], y[ind], w)

  12. G = alpha*G + (1-alpha)*dw**2

  13. w = w - eta*dw / np.sqrt(G + eps)

下图是使用了SGD + RMSProp后决策面和损失函数的变化情况,较之之前,函数下降更快,收敛也更快。

实例:如何建立一个线性分类器并进行优化


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • ML
    ML
    +关注

    关注

    0

    文章

    149

    浏览量

    34656
  • 线性分类器
    +关注

    关注

    0

    文章

    3

    浏览量

    1431

原文标题:课后作业(一):如何建立一个线性分类器并进行优化

文章出处:【微信号:jqr_AI,微信公众号:论智】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    线性负载分为哪些类型

    较小,但长期积累也会影响电能质量。 高次谐波非线性负载:如某些通信设备、电子设备等,可能产生更高次的谐波,对电网和设备本身造成更大的危害。 四、其他分类方式 可控硅整流型非线性负载:
    发表于 12-18 15:18

    如何使用ddc进行数据分类

    不同的主题划分为不同的类别。以下是如何使用DDC进行数据分类的步骤和注意事项: 、了解DDC的基本原则 十进制分类 :DDC采用十进制法,将所有的知识领域分为10
    的头像 发表于 12-18 15:05 227次阅读

    使用卷积神经网络进行图像分类的步骤

    使用卷积神经网络(CNN)进行图像分类涉及多个步骤的过程。 1. 问题定义 确定目标 :明确你想要分类的图像类型,例如猫和狗、不同的植
    的头像 发表于 11-15 15:01 300次阅读

    多功能UC1834优化线性调节效率

    电子发烧友网站提供《多功能UC1834优化线性调节效率.pdf》资料免费下载
    发表于 10-24 09:51 0次下载
    多功能UC1834<b class='flag-5'>优化</b><b class='flag-5'>线性</b>调节<b class='flag-5'>器</b>效率

    电源变换分类有哪些

    电源变换是将种形式的电能转换为另种形式的设备,它们在电子设备和电力系统中扮演着重要的角色。电源变换分类非常广泛,可以根据不同的标准
    的头像 发表于 09-30 09:36 508次阅读

    常用连接分类有哪些

    常用连接分类多种多样,每种类型都根据其特定的应用场合和设计特点进行划分。以下是对常用连接
    的头像 发表于 09-10 10:32 892次阅读

    新加坡服务延迟大吗?如何进行优化

    新加坡服务的延迟通常在全国平均延迟111ms左右,其中移动网络约为90ms,联通网络106ms,电信网络最低约为85ms。为了进行优化般可以采取使用CDN、
    的头像 发表于 08-09 13:58 211次阅读

    BP神经网络在语言特征信号分类中的应用

    Network),即反向传播神经网络,作为种强大的多层前馈神经网络,凭借其优异的非线性映射能力和高效的学习机制,在语言特征信号分类中展现出了巨大的潜力。本文将从BP神经网络的基本原理、语言特征信号的提取与处理、BP神经网络在
    的头像 发表于 07-10 15:44 399次阅读

    请问MDF如何建立线性连接?

    线性的应用,可能需要上百节点组成
    发表于 06-28 06:40

    基于神经网络的呼吸音分类算法

    )×Y相乘,其中Xi是预测噪声标签(对于噪声帧,X=1),Y是帧。异常分类称为ARNN的堆叠RNN,它为一个样本(所有帧)预测
    发表于 05-31 12:05

    连接两TC397 EVK并进行SPI试验时,无法测量主SCLKO波形,为什么?

    使用 AURIX TC397 示例代码(SPI_CPU_1_KIT_TC397_TFT) ADS 版本:1.9.20 平台:kit_a2g_tc397_5v_tft 连接两 TC397 EVK 并进行 SPI 试验时,无法测量主 SCLKO 波形。
    发表于 05-29 06:33

    FSLP建立接口,如何降低ADC-DMA的速度?

    我正在为 FSLP(力感线性电位计)建立接口,以检测用户的触摸滑动。 我正在使用比较 ISR 来检测用户触摸 FSLP 的情况,然后从
    发表于 03-06 06:31

    线性稳压分类介绍

    步分为固定输出型和可变输出型。 固定输出型的线性稳压通常具有三引脚:输入(Input)、输出(Output)和接地(GND)。这类稳压
    的头像 发表于 02-25 15:00 816次阅读
    <b class='flag-5'>线性</b>稳压<b class='flag-5'>器</b>的<b class='flag-5'>分类</b>介绍

    线性稳压分类及特点

    线性稳压是电源管理中的关键组件,它们通过连续调整其内部通过元件(如晶体管)的电流来输出恒定电压。线性稳压可以按照不同的标准进行
    的头像 发表于 02-04 10:37 804次阅读

    verilog的135经典实例

    verilog的135经典实例
    发表于 02-02 10:17 14次下载