在这节中主要讲的是如何更好地拟合逻辑回归模型的参数θ.具体来说,要定义用来拟合参数的优化目标或者叫代价函数,这便是监督学习问题中的逻辑回归模型的拟合问题。

我们有一个训练集,训练集中有m个训练样本:{(x(1),y(1)),(x(2),y(2)),...,(x(m),y(m))},像之前一样,每个样本用n+1维特征向量表示,如下:

    和以前一样x0=1,第0个特征一直是1.而且因为这是一个分类问题的训练集,所以所有的标签y不是0就是1.假设函数如下所示,它的参数是θ.
    下面要讲的问题是,对于这个函数如何选定合适的参数θ.
    回归一下之前讲线性回归模型的时候,使用了如下的代价函数。
    下面将对这个函数换一种写法:
    那么此时代价函数等于1/m * 这个Cost项在训练集范围上的求和。可以除去上标来对该公式简化。它是在输出的预测值是h(x),但实际值是y的时候我们的学习算法付出的代价。去掉上标之后,这个代价值就是 1/2 * 预测值与实际值差的平方。这个代价函数在线性回归里面是十分好用的,但是我们现在要用在逻辑回归里。如果我们要最小化代价函数J,它也能工作。但是如果我们这样做的话它就会变成参数θ的非凸函数。
    当我们把代入J(θ)中,因为hθ(x)是一个很复杂的非线性函数,我们很有可能得到的函数图像如下,它有很多局部最优值。
    如果我们对非凸函数用梯度下降法,并不能保证可以收敛到全局最小值。我们更希望得到的是一个凸函数,这样对它使用梯度下降法的话就可以收敛到该函数的全局最小值。所以,我们重新定义这个算法要付出的代价。
    这看起来是一个很复杂的函数,我们画出这个函数。图像如下:
    这个函数的性质有:
        如果y=1而且hθ(x)=1,那么代价值就为0.但是如果y=1但是预测值hθ(x)=0的时候,此时代价值趋于∞.
    上面为y=1的情况。下面来看y=0的情况。
    当实际值y=0时,预测值hθ(x)=0的情况下付出的代价值就为0,预测值hθ(x)=1的情况下付出的代价值趋于∞.以上讲的主要是单训练样本的代价函数。下面将将其推广得到整个训练样本的代价函数,接着对其运用梯度下降法。
    python代码:
1 import numpy as np
2 def cost(theta, X, y):
3 theta = np.matrix(theta)
4 X = np.matrix(X)
5 y = np.matrix(y)
6 first = np.multiply(-y, np.log(sigmoid(X* theta.T)))
7 second = np.multiply((1 - y), np.log(1 - sigmoid(X* theta.T)))
8 return np.sum(first - second) / (len(X))

[斯坦福大学2014机器学习教程笔记]第六章-代价函数(Cost function)的更多相关文章

  1. [斯坦福大学2014机器学习教程笔记]第六章-决策界限(decision boundary)

    这一节主要介绍的是决策界限(decision boundary)的概念,这个概念可以帮组我们更好地理解逻辑回归的假设函数在计算什么. 首先回忆一下上次写的公式. 现在让我们进一步了解这个假设函数在什么 ...

  2. [斯坦福大学2014机器学习教程笔记]第五章-控制语句:for,while,if语句

    在本节中,我们将学习如何为Octave程序写控制语句. 首先,我们先学习如何使用for循环.我们将v设为一个10行1列的零向量. 接着,我们写一个for循环,让i等于1到10.写出来就是for i = ...

  3. IOS学习之斯坦福大学IOS开发课程笔记(第六课)

    转载请注明出处 http://blog.csdn.net/pony_maggie/article/details/28398697 作者:小马 这节课主要讲述多个MVC是怎样协同工作的.到眼下为止.全 ...

  4. Deep Learning 8_深度学习UFLDL教程:Stacked Autocoders and Implement deep networks for digit classification_Exercise(斯坦福大学深度学习教程)

    前言 1.理论知识:UFLDL教程.Deep learning:十六(deep networks) 2.实验环境:win7, matlab2015b,16G内存,2T硬盘 3.实验内容:Exercis ...

  5. Deep Learning 19_深度学习UFLDL教程:Convolutional Neural Network_Exercise(斯坦福大学深度学习教程)

    理论知识:Optimization: Stochastic Gradient Descent和Convolutional Neural Network CNN卷积神经网络推导和实现.Deep lear ...

  6. Deep Learning 12_深度学习UFLDL教程:Sparse Coding_exercise(斯坦福大学深度学习教程)

    前言 理论知识:UFLDL教程.Deep learning:二十六(Sparse coding简单理解).Deep learning:二十七(Sparse coding中关于矩阵的范数求导).Deep ...

  7. Deep Learning 13_深度学习UFLDL教程:Independent Component Analysis_Exercise(斯坦福大学深度学习教程)

    前言 理论知识:UFLDL教程.Deep learning:三十三(ICA模型).Deep learning:三十九(ICA模型练习) 实验环境:win7, matlab2015b,16G内存,2T机 ...

  8. Deep Learning 11_深度学习UFLDL教程:数据预处理(斯坦福大学深度学习教程)

    理论知识:UFLDL数据预处理和http://www.cnblogs.com/tornadomeet/archive/2013/04/20/3033149.html 数据预处理是深度学习中非常重要的一 ...

  9. Deep Learning 10_深度学习UFLDL教程:Convolution and Pooling_exercise(斯坦福大学深度学习教程)

    前言 理论知识:UFLDL教程和http://www.cnblogs.com/tornadomeet/archive/2013/04/09/3009830.html 实验环境:win7, matlab ...

随机推荐

  1. 阿里云mysql安装

    阿里云上安装mysql还是遇到些问题,感觉不是傻瓜式一键安装,还是写个帖子以后看 1.安装 https://yq.aliyun.com/articles/47237 启动mysql的时候报了问题 My ...

  2. RXJAVA之变换操作

    RXJAVA提供了以下变换操作,对Observable的消息进行变换操作: 1.window 定期将来自Observable的数据分拆成一些Observable窗口,然后发射这些窗口,而不是每次发射一 ...

  3. lombok使用(给自己看的,只为不要忘记自己用过的技术)

    如何使用? 一.1)eclipse使用方法 1. 从项目首页下载lombok.jar 2. 双击lombok.jar, 将其安装到eclipse中(该项目需要jdk1.6+的环境) 2)idea使用方 ...

  4. 利用new Object方式创建对象

    var obj = new Object();      //创建了一个空的对象obj.uname = 'zhangsanfeng';obj.name = 18;       //字面量方式创建对象不 ...

  5. Python-变量、变量作用域、垃圾回收机制原理-global nonlocal

    变量实现原理决定了Python使用的垃圾回收机制为变量引用计数,当这个对象引用计数为0时候,则会自动执行__del__函数回收资源, del方法只是把变量指向的对象引用计数减一而已并删除这个变量 表达 ...

  6. Python-禅

    Python特点 1. 面向对象解释性编程语言 2. 简洁.优雅的编码风格 3. 跨平台 windows MacOS Linux 4. 丰富的标准库和第三方库 什么是编程? 解决现实中问题 什么是面向 ...

  7. CSP-J 2019复赛分析

    [CSP-J 2019 ]复赛分析 前言(????) 总的来说,这次复赛感觉考的很不满意,至于原因,感慨万分!关键是:期中考试了!偏偏是这个时候! - 由于我是一个初二的蒟蒻,所以考试前先定了一个目标 ...

  8. python-格式化(%,format,f-string)输出+输入

    1-格式化输出: % 1.print('我的姓名是%s,身高%s cm'%(name,height)) 2.%s -str() ; %d–十进制3.传入值的时候一定是个元组,不是列表4.当指定长度时: ...

  9. python中numpy.savetxt 参数

    转载:https://blog.csdn.net/qq_36535820/article/details/99543188 numpy.savetxt 参数 numpy.savetxt(fname,X ...

  10. Go 接口类型

    接口作用 Go语言中的接口是一种类型,类似于Python中的抽象基类. Go语言中使用接口来体现多态,是duck-type的一种体现. 如,只要一个东西会叫,会走,那么我们就可以将它定义为一个动物的接 ...