第三篇:机器学习之代价函数和梯度下降

二元、多元线性回归方程:

抽象的模型可以转化为下图(未画入 θ0 )

说明:

左端输入特征值x

连线w代表各自的权重

整合运算后得到预测值y

W 和 θ 皆可以代表权重

增加截距 θ0(偏置项)如图左,右图为逻辑回归的形式

将线性回归得到的预测值代入Sigmoid函数后即可变为逻辑回归,

增加隐层和输出就是神经网络了,如图

可以简单地把神经网络看做逻辑回归元构成的网络

从隐层开始每个神经元是上一层逻辑回归的结果并且作为下一层的输入,篇幅限制,我们将在下一篇将详细介绍逻辑回归的公式与代码

上一篇是线性回归,这一篇我们将学习

  1. 学习计算代价函数
  2. 直观理解梯度下降
  3. 线性回归---预测房价

正文开始

1.代价函数

数理统计中我们常用方差衡量一组数据的离散程度,线性回归中则是通过计算样本集中所有的预测值y与所有对应的真实值Y的方差,比较他们的拟合程度。

以一元线性回归为例

三个样本(1,1)(2,2)(3,3)

初始化参数 θ0=0 θ1=0.5

关于 θ0 θ1 的代价函数为:

解释:上标(i)代表样本序号,m代表样本数量

得到代价函数后,调整参数使它们拟合,一种常用的让代价函数J的值最小的方法叫作梯度下降。

2.梯度下降

举例来看,根据某组数据计算得到的参数为 θ0 θ1的代价函数绘制为下图

开始时,我们初始化参数 θ0 θ1,得到的代价函数的值很大,像位于整个模型的山坡上,这意味着我们的线性回归模型的预测值和真实值误差很大,所以梯度下降形象来说就是“沿着最陡的方向下山”

对代价函数J求出θ0 θ1各自的偏导数,然后同时更新(同时更新非常关键),乘上学习率ɑ得到“要下降的高度”自减即完成一次更新,直到拟合为止。

解答:ɑ代表学习率;对多元函数的某一个参数求偏导可以理解为把其他参数看做常数来后对它求斜率,如图得到θ1的斜率

化简

整理

化简偏导数后得到了一元线性回归的梯度下降算法

编程实战——线性回归预测房租

现有一组数据(样本)房子的面积和对应的租金,试预测其走向

数据

算法

# 导入必要的库

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

# 得到数据
#  square_feet        price

x = [150,200,250,300,350,400,600] # 7所房子的面积
y =  [6450,7450,8450,9450,11450,15450,18450] # 7种面积对应的房租面积
plt.scatter(x,y)

# 数据预处理(特征缩放)
# 可以优化梯度下降的效率

x = np.reshape(x,newshape=(7,1)) / 1000.0
y = np.reshape(y,newshape=(7,1)) / 10000.0
plt.scatter(x,y)

# 线性方程为:h=b+a*x

# 算法模型
def model(a, b, x):
    return a*x + b

# 代价函数
def cost_function(a, b, x, y):
    n = 7
    return 0.5/n * (np.square(y-a*x-b)).sum()

# 优化函数
def optimize(a,b,x,y):
    n = 7                         # 样本数
    alpha = 1e-1                  # 学习率
    y_hat = model(a,b,x)          # 预测值
    da = (1.0/n) * ((y_hat-y)*x).sum()     # 参数 a 的偏导
    db = (1.0/n) * ((y_hat-y).sum())       # 参数 b 的偏导
    a = a - alpha*da
    b = b - alpha*db
    return a, b

# 迭代优化
def iterate(a,b,x,y,times):
    for i in range(times):         # 参数更新 times 次
        a,b = optimize(a,b,x,y)
    y_hat=model(a,b,x)             # 训练完的模型
    cost = cost_function(a, b, x, y)   # 误差
    print (a,b,cost)
    plt.scatter(x,y)
    plt.plot(x,y_hat)              # 绘制图表
    return a,b

# 参数初始化

a = 0.1
b = 0.2

# 训练模型2000次

a,b = iterate(a,b,x,y,2000)

原文发布于微信公众号 - ACM算法日常(acm-clan)

原文发表时间:2018-07-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏机器之心

学界 | 神经网络碰上高斯过程,DeepMind连发两篇论文开启深度学习新方向

函数近似是机器学习众多问题的核心,而过去深度神经网络凭借其「万能近似」的属性在函数近似方面无与伦比。在高级层面,神经网络可以构成黑箱函数近似器,它会学习如何根据...

1482
来自专栏外文文献翻译

从潜在向量生成大图像 - 第二部分

更多分辨率为1080x1080的MNIST数字

24010
来自专栏量化投资与机器学习

【机器学习研究】隐马尔可夫模型 (HMM) 最认真研究

隐马尔可夫模型 (Hidden Markov Model,HMM) 最初由 L. E. Baum 和其它一些学者发表在一系列的统计学论文中,随后在语言识别,自然...

6809
来自专栏大数据挖掘DT机器学习

数据挖掘算法(logistic回归,随机森林,GBDT和xgboost)

面网易数据挖掘工程师岗位,第一次面数据挖掘的岗位,只想着能够去多准备一些,体验面这个岗位的感觉,虽然最好心有不甘告终,不过继续加油。 不过总的来看,面试前有准备...

6939
来自专栏张俊红

决策树详解

总第79篇 01|背景: 我们在日常生活中经常会遇到一些选择需要去做一些选择,比如我们在找工作的时候每个人都希望能找到一个好的工作,但是公司那么多,工作种类那么...

3565
来自专栏AI星球

逻辑回归(LR)个人学习总结篇

逻辑回归(LR,Logistic Regression)是传统机器学习中的一种分类模型,由于LR算法具有简单、高效、易于并行且在线学习(动态扩展)的特点,在工业...

8564
来自专栏数据派THU

一文读懂生成对抗网络GANs

原文标题:AnIntuitive Introduction to Generative Adversarial Networks 作者:KeshavDhandh...

3273
来自专栏郭耀华‘s Blog

【深度学习】深入理解Batch Normalization批标准化

2742
来自专栏TensorFlow从0到N

TensorFlow从0到1 - 10 - NN基本功:反向传播的推导

上一篇 9 “驱魔”之反向传播大法引出了反向传播算法——神经网络的引擎,并在最后窥探了它的全貌。本篇将详细的讨论反向传播各方面的细节。尽管它被TensorFl...

4056
来自专栏SIGAI学习与实践平台

基于内容的图像检索技术综述-CNN方法

传统方法在图像检索技术上一直表现平平。比如传统方法常用的SIFT特征,它对一定程度内的缩放、平移、旋转、视角改变、亮度调整等畸变,都具有不变性,是当时最重要的图...

2275

扫码关注云+社区

领取腾讯云代金券