逻辑回归python正则化 选择参数_吴恩达机器学习笔记(三)——正则化(Regularization)...

1.过拟合的问题(Over-fitting)

如果我们有非常多的特征,我们通过学习得到的假设可能能够非常好地适应训练集(代价函数可能几乎为0),但是可能会不能推广到新的数据。

(1)下图是一个回归问题的例子:第一个模型是一个线性模型,欠拟合,不能很好地适应我们的训练集

第三个模型是一个四次方的模型,过于强调拟合原始数据,而丢失了算法的本质:预测新数据。

我们可以看出,若给出一个新的值使之预测,它将表现的很差,这叫作过拟合。虽然能非常好地适应我们的训练集,但是新输入变量进行预测时,效果会表现的不好。

(2)分类问题中也存在这样的问题:

我们可以用多项式来理解,x的次数越高,拟合的越好,但相应的预测能力就可能变差。

解决过拟合的方式:减少特征值的数量人为的保留一些重要的特征值

用特征选择算法进行特征的选择(PCA、层次分析法)

2.正则化保留所有的特征,但是减少参数

的大小。

2.代价函数(Cost Function)

上面的回归问题中如果我们的模型是:

我们可以从之前的例子中看出来,正是由于高次项导致的过拟合的发生,所以如果我们能够让那些高次项的系数接近于0的话,我们就能够很好的拟合数据集。

所以我们要做的就是在一定程度上减小这些参数 的值,这就是正则化的基本方法。我们决定要减少

的大小,我们要做的便是修改代价函数,在其中

设置一点惩罚。这样做的话,我们在尝试最小化代价时也需要将这个惩罚纳入考虑中,并最终导致选择较小一些的

修改后的代价函数:

通过这样的代价函数选择出的 3和 4 对预测结果的影响就比之前要小许多。

假如我们有非常多的特征,我们并不知道其中哪些特征我们要惩罚,我们将对所有的特征进行惩罚,并且让代价函数最优化的软件来选择这些惩罚的程度。这样的结果是得到了一个较为简单的能防止过拟合问题的假设:

其中

又被称为正则化参数(Regularization Parameter)。注:按照惯例我们对

不进行惩罚。经过正则化处理的模型与原模型的可能对比如下图所示:

那为什么增加的一项

可以使 的值减小呢?

: 可以控制两个不同目标之间的取舍。

目标①:去更好地拟合数据集(训练集)

目标②:使参数大小变小,从而使假设函数变得更“简单”。

两者相互平衡,从而达到一种相互制约的关系,最终找到一个平衡点,从而更好地拟合训练集并且具有良好的泛化能力。

因为如果我们令

的值很大的话,为了使Cost Function 尽可能的小,所有的 的值(不包括

)都会在一定程度上减小。如果

取值非常大,那么除了

之外的所有参数都趋近于0,模型成为一条直线。

3.正则化线性回归

正则化线性回归的代价函数为:

{

}

对上面的算法中 = 1,2,..., 时的更新式子进行调整可得:

可以看出,正则化线性回归的梯度下降算法的变化在于,每次都在原有算法更新规则的

基础上令 值减少了一个额外的值。

4.正则化的逻辑回归模型

自己计算导数同样对于逻辑回归,我们也给代价函数增加一个正则化的表达式,得到代

价函数:

Python代码实现:

import numpy as np

def costReg(theta, X, y, learningRate):

theta = np.matrix(theta)

X = np.matrix(X)

y = np.matrix(y)

first = np.multiply(-y, np.log(sigmoid(X*theta.T)))

second = np.multiply((1 - y), np.log(1 - sigmoid(X*theta.T)))

reg = (learningRate / (2 * len(X)) * np.sum(np.power(theta[:,1:theta.shape[1]],2)))

return np.sum(first - second) / (len(X)) + reg

注:这里的learningRate 是指正则化参数。

要最小化该代价函数,通过求导,得出梯度下降算法为:

5.关键函数Python代码实现

1.正则化的逻辑回归模型梯度下降法的代码实现:

def gradientReg(theta, X, y, learningRate):

theta = np.matrix(theta)

X = np.matrix(X)

y = np.matrix(y)

parameters = int(theta.ravel().shape[1])

grad = np.zeros(parameters)

error = sigmoid(X * theta.T) - y

for i in range(parameters):

term = np.multiply(error, X[:,i])

if (i == 0):

grad[i] = np.sum(term) / len(X)

else:

grad[i] = (np.sum(term) / len(X)) + ((learningRate / len(X)) * theta[:,i])

return grad

5.如何更好地拟合数据去收集更多的数据

尝试更少的特征值

尝试更多的特征值

增加多项式

增大\减小正则化参数

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

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

相关文章

Java简单记事本设计实验报告_基于JAVA的记事本设计报告.doc

基于JAVA的记事本设计报告华北科技学院计算机系综合性实验报告PAGE第 PAGE 11 页XX学校计算机系综合性实验实 验 报 告课程名称 Java程序设计实验学期 至 学年 第 学期学生所在系部 计算机系年级 专业班级学生姓名 学号任课教师实验成绩计算机系制《 Java程序设计》课程综合性实…

谷歌离开游览器不触发_谷歌游览器

谷歌浏览器不错,可保存不同的账户,互相不干扰。有2个账号,工作账号和个人账号,泾渭分明,不会打架,管理账号。总经理管理公司人员,厂长管理工人,业务员要管理自己账号,管理…

java scanner nextlin_java – Scanner nextLine()偶尔会跳过输入

让我猜一下 – 你没有显示使用上面尝试获取lastName的扫描器的代码.在那次尝试中,你没有处理行尾令牌,所以它是悬空的,只是被你试图获取lastName的nextLine()调用吞噬.例如,如果你有这个:Scanner keyboard new Scanner(System.in);System.out.print("Enter a …

python office库_python库编程.os平台.office平台

1.库安装Python库 PyPI – Python Package Index :https://pypi.python.org/(1) Python库的自定义安装:找到库所在网站,根据指示下载安装安装numpy库库所在网站:http://www.numpy.org/下载地址:http://sourceforge.ne…

java编译系统资源不足_Ant编译项目资源不足

今天用ant编译项目出现 [javac] 系统资源不足。的错误,如下Buildfile: build.xml-compile:[javac] Compiling 919 source files to E:\DSHR\dshr\WebContent\WEB-INF\classes[javac][javac][javac] 系统资源不足。[javac] 有关详细信息,请参阅以下堆栈追…

java线程三部分_java 多线程三

注意到 java 多线程一 中 MyThread2 运行结果出现0、-1,那是因为在操作共享数据时没有加锁导致。加锁的方式:1、同步方法2、同步代码块3、锁读过 java.util.concurrent 集合源码就知道:HashMap:public V put(K key, V value) {...}Hashtable:…

python简述定义函数的规则_Python的函数定义

有经验的程序员往往将功能较为独立、且可以被重复使用的代码块封装成函数,可以有效提高代码的模块化、解耦性和重复利用率。我们前面用到的print()函数就是Python的内建函数,我们也可以根据Python给我们提供的规则进行自定义函数。这里我们用PyCharm来进…

jdk中java_怎样使用JavaJDK中Java?

什么是UDP协议 UDP协议的全称是用户数据报,在网络中它与TCP协议一样用于处理数据包。在OSI模型中,在第四层——传输层,处于IP协议的上一层。UDP有不提供数据报分组、组装和不能对数据包的排序的缺点,也就是说,当报文发…

python中table表结构_python中的简易表格prettytable

安装:pip install PrettyTable普通表格from prettytable import PrettyTabletable PrettyTable([编号,云编号,名称,IP地址])table.add_row([1,server01,服务器01,172.16.0.1])table.add_row([2,server02,服务器02,172.16.0.2])table.add_row([3,server03,服务器03,…

java 类型推理_java 11 局部变量类型推断

什么是局部变量类型推断?var javastack "javastack";System.out.println(javastack);大家看出来了,局部变量类型推断就是左边的类型直接使用 var 定义,而不用写具体的类型,编译器能根据右边的表达式自动推断类型&#…

python笨办法_笨办法学Python(十)

习题 10: 那是什么?在习题 9 中我你接触了一些新东西。我让你看到两种让字符串扩展到多行的方法。第一种方法是在月份之间用 \n (back-slash n )隔开。这两个字符的作用是在该位置上放入一个“新行(new line)”字符。使用反斜杠 \ (back-slash) 可以将难打印出来的字…

java什么变量用作英文_Java基础之变量-什么是变量

什么是变量:在计算机语言中用来存储计算结果或表示值如何命名Java变量:如同酒店会给每个房间起个性化的名字一样,程序中的变量也需要用合理的名字进行管理—变量名!变量命名要符合以下规则:首字母必须是大写或小写的英文字母可以用下划线_开头可以用美元…

vue保存图片到手机相册_手机照片误删了怎么找回?这三个方法轻松搞定,亲测有效...

手机照片误删了怎么找回?很多人在使用手机拍照时,都会出现拍好的照片不小心点击了删除等情况,比如去某个地方游玩,或者看到了某个特别的场景拍下来的时候不小心删除了,那就非常可惜了,那么如何找回手机中误…

lsm tree java_BasicTreeUI

方法详细信息createUI public static ComponentUI createUI​(JComponent x)构造一个BasicTreeUI的新实例。参数x - 一个组件结果BasicTreeUI的新实例getHashColor protected Color getHashColor()返回散列颜色。结果哈希颜色setHashColor protected void setHashColor​(Color…

vue if判断_VUE学习记录2

v-if、v-eles、v-else-if​ v-if用于条件判断&#xff0c;判断Dom元素是否显示。<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scal…

利用melendy插入参考文献_四苯基卟啉在改性磷酸锆层间的插入及荧光增强

一、摘要近年来&#xff0c;出于节约一次性能源的考虑&#xff0c;人们已经加大对太阳能等天然资源的利用&#xff0e;致力于模拟天然光合作用的研究&#xff0c;而光合作用中的捕光复合物又称为光子天线。光子天线中往往存在一种或几种猝灭剂&#xff0c;猝灭剂吸收光子后产生…

java cmd停服务_java代码启动cmd执行命令来开启服务出现无法连接的问题

我想使用openoffice的格式转换功能&#xff0c;需要先开启openoffice的服务&#xff0c;当我手动敲入命令的时候&#xff0c;是可以运行起来的&#xff0c;但是通过Java代码执行却出现拒绝连接的问题&#xff0c;请帮我看看怎么回事public static String soffice_host "1…

与时间相关的java源码_Java 基于当前时间获取和计算时间

import java.time.LocalDate;import java.time.LocalDateTime;import java.time.LocalTime;import java.time.Month;/**来自N o w J a v a . c o m - 时代Java**/public class Main {public static void main(String[] args){LocalTime time LocalTime.now();System.out.print…

python脚本自动统计excel_python脚本实现-excel二级统计

pandas和SQL数据分析实战视频教程统计excel C列 化学 和D列 补充申请 两个条件药品数量程序优势在于批量统计&#xff0c;把参数写到excel里&#xff0c;行为单位# -*- coding: utf-8 -*-"""Created on Thu Apr 7 08:38:51 2016content内容必须是逗号分隔&am…

java 1.8stream_java jdk1.8 使用stream流进行list 分组归类操作

我就废话不多说了&#xff0c;大家还是直接看代码吧~import com.alibaba.fastjson.JSON;import java.util.ArrayList;import java.util.List;import java.util.stream.Collectors;/*** author czw*/public class Foo{private String name;private String type;private Double t…