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

    文章

    153

    浏览量

    35163
  • 线性分类器
    +关注

    关注

    0

    文章

    3

    浏览量

    1511

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    文详解线性霍尔IC

    全面认知·线性霍尔IC 线性霍尔IC,是种rail to rail的模拟输出传感,后端微控制处理起来简单方便,因此与霍尔IC
    的头像 发表于 07-24 17:59 ?1472次阅读
    <b class='flag-5'>一</b>文详解<b class='flag-5'>线性</b>霍尔IC

    LM3686 带有集成后线性稳压系统和低噪声线性调节的降压DC-DC转换数据手册

    LM3686 是款降压直流/直流转换,具有极低压差线性稳压
    的头像 发表于 04-29 13:37 ?405次阅读
    LM3686 带有集成后<b class='flag-5'>线性</b>稳压<b class='flag-5'>器</b>系统和低噪声<b class='flag-5'>线性</b>调节<b class='flag-5'>器</b>的降压DC-DC转换<b class='flag-5'>器</b>数据手册

    VirtualLab Fusion应用:使用optiSLang进行光栅优化

    进行优化 -在本例中,光学系统由平面波光源和用于周期性介质的光导耦合探测组成。 4. VirtualLab Fusion – 光导耦合探测 ?光波导耦合探测
    发表于 03-18 08:51

    VirtualLab Fusion应用:非近轴衍射分束的设计与优化

    )的结构设计生成系列分束的初始设计,然后通过傅里叶模态法或严格耦合波分析(FMM/RCWA)进优化。为了给最后
    发表于 03-10 08:56

    简单认识线性位置传感

    线性位置传感种重要的测量设备,广泛应用于工业自动化、汽车工程、医疗设备、航空航天以及其他多个领域。本文将详细解析线性位置传感的定义、
    的头像 发表于 02-02 14:50 ?762次阅读

    电磁波谱的分类实例

    电磁波谱是指电磁波按照波长或频率的不同而形成的系列范围。电磁波谱包括从极低频率的无线电波到极高频率的伽马射线。以下是电磁波谱的分类实例的介绍: 1. 无线电波(Radio Wa
    的头像 发表于 01-20 16:50 ?2533次阅读

    使用 sysbench 对 Flexus X 实例对 mysql 进行性能测评

    、Flexus X 实例概述 1.1?Flexus X 实例 Flexus 云服务 X 实例是华为云推出的
    的头像 发表于 01-17 09:18 ?820次阅读
    使用 sysbench 对 Flexus X <b class='flag-5'>实例</b>对 mysql <b class='flag-5'>进行</b>性能测评

    LabVIEW使用Vision视觉进行硬币分类计数

    LabVIEW使用Vision视觉进行硬币分类计数,有偿,带价加q:3430396759
    发表于 12-29 20:20

    线性负载分为哪些类型

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

    如何使用ddc进行数据分类

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

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

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

    滑动变阻器有哪些分类

    滑动触点向方向移动时,电阻值逐渐增大;当滑动触点向另一个方向移动时,电阻值逐渐减小。线性变阻器具有调节精度高、稳定性好等优点,常用于需要精确调节电阻值的场合,如音频放大器、电视接收
    发表于 11-07 10:08

    多功能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 ?1591次阅读

    常用连接分类有哪些

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