Andrew Ng机器学习(一):线性回归

1.什么是线性回归?

用线性关系去拟合输入和输出。

设输入为x,则输出y=ax+b。

对于多元的情况y=b×1+a1x1+a2x2+...+anxn

用θ表示系数,可以写作:

其中,x0=1。

2.线性回归有什么用?

对于连续输入和输出的问题,如果线性回归可以较好的拟合输入和输出,那么可以用这个模型预测其它输入时的输出。

反过来想:如果线性回归可以较好的拟合输入和输出,那么说明输出和输入有很强的线性相关性,可以识别输入中的冗余信息。

3.怎么判断是否较好的拟合?

初步考虑,就是当使用模型时的输出、和真实的输出有多大偏差,选择一个方法量化这个偏差。

每个样本输入模型时,均会产生一个偏差。

线性回归中,通过求这些偏差的平方平均值,来判断偏差的程度。写作:

其中实际输出为y,模型输出为h,上标i是指每个样本。系数在平方平均值的基础上除以2。

判断偏差的这个方程起名叫 Cost Function。当偏差越小、即Cost Function的值越小时,拟合的越好。 

4.怎么训练模型?

训练模型的目的在于实现较好的拟合,也就是说使Cost Function的值尽量小。

训练在这里,就是选择一组系数θ(模型确定以后,模型的参数就是系数θ们),实现上面的目的。

微积分学过,可以对θ求偏导数等于0的点,直接得到极值点。

按照Andrew Ng的课件,当参数个数大于10000个时,直接求极值点时间太长,需要选择别的办法。

5.怎样训练模型:梯度下降。

顾名思义,就是沿着梯度下降。选择一个合适的步长α,一步一步改变θ使Cost Function的值不断减小。

其中,θj表示各个系数。:=前面的冒号表示每个θj同时改变。

走多少步?和怎么判断模型训练好了呢?最好是观察每次θj改变后,J(θ)的值的变化。

最开始θj等于多少呢?最开始,随便选一组值就可以。

步长α应该选多大呢?要通过手动尝试,“找”到合适的值。

最后,经过多次迭代后,算法得到一组θ,使Cost Function的值比较小。

6.matlab实现一个线性回归。

%一个特征的输入参数
X1=[0.50,0.75,1.00,1.25,1.50,1.75,1.75,2.00,2.25,2.50,2.75,3.00,3.25,3.50,4.00,4.25,4.50,4.75,5.00,5.50];
X0=ones(size(X1));
X=([X0;X1])';
y=([10, 22, 13, 43, 20, 22, 33, 50, 62, 48, 55, 75, 62, 73, 81, 76, 64, 82, 90, 93])';

%梯度下降参数设计
alpha=0.001;%当alpha大于1时就不收敛了
theta=[2;3];%选哪个点作为起点似乎对收敛速度影响不大
times=2000;%迭代次数

for i=1:times
delta=X*theta-y;%求偏导数
theta=theta-alpha.*(X'*delta);%梯度下降
J(i)=delta'*delta;%求此时的Cost Function值
end


%观察Cost Function值随迭代次数的变化
% plot(J);
%观察拟合情况
stem(X1,y);
p2=X*theta;
hold on;
plot(X1,p2);

 

7.实际使用

实际使用线性回归时,先对输入数据进行优化。包括:1.将冗余的和无关的变量去掉;2.对于非线性关系,采用多项式拟合,将一个变量变为多个变量;3.将输入范围归一化。


 

小结

线性回归开始假设输入和输出存在线性关系,

然后使用线性回归模型h=θTx,用Cost Function J(θ)评价拟合程度,

通过对J(θ)应用梯度下降算法逼近一组好的参数θ,从而得到一个适用的模型h。

 

线性回归的使用建立在“输入和输出存在线性关系”这一假设基础上,把一组特征映射到一个值。

使用起来,也许因为模型太简单,感觉不到“机器学习”的感觉。选用时也需要很多先验知识、针对特定情况,就像一般的编程处理问题一样。

在使用梯度下降的算法时,迭代的过程,有点“学习”的感觉。

转载于:https://www.cnblogs.com/sumr/p/9746649.html

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

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

相关文章

c++虚析构函数

1.为什么基类的析构函数是虚函数&#xff1f; 在实现多态时&#xff0c;当用基类操作派生类&#xff0c;在析构时防止只析构基类而不析构派生类的状况发生。 下面转自网络&#xff1a;源地址 http://blog.sina.com.cn/s/blog_7c773cc50100y9hz.html a.第一段代码 #include<i…

ICMP(Internet Control Message Protocol)网际控制报文协议初识

ICMP是&#xff08;Internet Control Message Protocol&#xff09;Internet控制报文协议。它是TCP/IP协议族的一个子协议&#xff0c;用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用…

Linux设置RSA密钥登录

一、怎么实现双向免密登录 前提 所有服务器/etc/ssh/sshd_config文件的以下三行未被注释 RSAAuthentication yesPubkeyAuthentication yesAuthorizedKeysFile .ssh/authorized_keys举例&#xff1a; 两台服务器&#xff1a;192.168.100.134 192.168.1.140免密码登录是分用户的…

python面向对象__str__和__repr__方法

__str__方法 class Animal:def __init__(self,name,color):self.namenameself.colorcolordef __str__(self):resself.name的颜色是self.colorreturn res batAnimal(蝙蝠,黑色) print(蝙蝠的特征:%s % bat) # 蝙蝠的特征:蝙蝠的颜色是黑色 对象输出或者打印就会执行__str__方法…

函数sprintf真好用

描述&#xff1a;C 库函数 int sprintf(char *str, const char *format, ...) 发送格式化输出到 str 所指向的字符串。 声明&#xff1a; int sprintf(char *str, const char *format, ...) 参数&#xff1a; str -- 这是指向一个字符数组的指针&#xff0c;该数组存储了 C 字符…

oracle 删除主键_大数据量删除的思考 4

译者 汤健 沃趣科技数据库技术专家出品 沃趣科技在本系列的前一期文章中&#xff0c;我制作了一些图&#xff0c;突出显示了按表扫描执行大量删除操作和按索引范围扫描执行大量删除之间的主要区别。根据所涉及的数据模式&#xff0c;选择正确的策略可能对随机I/Os的数量、生…

redis 持久化 + 主从复制+ 集群

2019独角兽企业重金招聘Python工程师标准>>> 一、 Linux 下的 Redis 安装 && 启动 && 关闭 && 卸载 http://blog.csdn.net/zgf19930504/article/details/51850594 注&#xff1a;设置 redis.conf bind***.***.*.(127.0.0.1) redis启动&…

怎么运行c语言_C语言 原来是这样调用硬件的

大家都知道我们可以使用C语言写一段程序来控制硬件工作&#xff0c;但你知道其工作原理吗&#xff1f;网友北极C语言在实际运行中&#xff0c;都是以汇编指令的方式运行的&#xff0c;由编译器把C语言编译成汇编指令&#xff0c;CPU直接执行汇编指令。所以这个问题就变成&#…

四、元祖、字典

一、元祖(tuple)&#xff1a;tu(11,"hello",(0,1),[11,"111"],33,) 元祖的特点&#xff1a;元祖中一级元素不可被修改&#xff0c;不能被增加或删除&#xff0c;多级元素可以被修改&#xff0c;一般写元祖的时候&#xff0c;推荐在后面添加逗号“&#xff…

PHP编程效率的20个要点

用单引号代替双引号来包含字符串&#xff0c;这样做会更快一些。因为PHP会在双引号包围的字符串中搜寻变量&#xff0c;单引号则 不会&#xff0c;注意&#xff1a;只有echo能这么做&#xff0c;它是一种可以把多个字符串当作参数的“函数”(译注&#xff1a;PHP手册中说echo是…

ubuntu运行python ide_打造vim中的python IDE

首先先介绍几个常用的插件&#xff1a;1&#xff0c;ctags和taglist&#xff0c;这个大家估计都很常用&#xff0c;在ubuntu下只要安装exuberant-ctags即可啦&#xff0c;另外tagbar支持面向对象语言的展示" toggle Tagbar displaymap :TagbarToggle" autofocus on T…

更新和插入的并发问题_mysql经典面试题:如何读写分离?主从原理是啥?同步的延时问题...

面试题你有没有做 MySQL 读写分离&#xff1f;如何实现 MySQL 的读写分离&#xff1f;MySQL 主从复制原理的是啥&#xff1f;如何解决 MySQL 主从同步的延时问题&#xff1f;考点分析高并发这个阶段&#xff0c;肯定是需要做读写分离的&#xff0c;啥意思&#xff1f;因为实际上…

php实现一个简单的四则运算计算器

php实现一个简单的四则运算计算器&#xff08;还不支持括号的优先级&#xff09;。利用栈这种数据结构来计算表达式很赞。 这里可以使用栈的结构&#xff0c;由于php的数组“天然”就有栈的特性&#xff0c;这里直接就利用了数组。当然可以使用栈结构写&#xff0c;道理一样的。…

Tcp与Ip协议的客户端和服务器编程

Tcp与Ip协议的客户端和服务器编程 本文就TCP和Ip协议的客户端和服务器分别进行编程&#xff0c;实现了客户端和服务端进行通信的功能&#xff0c;服务端对多个客户端进行监听&#xff0c;并能与多个客户端通信。 服务器端代码如下&#xff1a; using System; using System.Coll…

maven建立webapp项目时显示Cannot change version of project facet Dynamic web module to 2.5

为什么80%的码农都做不了架构师&#xff1f;>>> 网上查了很多东西都没啥用&#xff0c;其实直接把这段代码加到web.xml头部&#xff0c;自然就不报错了 <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns:xsi"http://www.…

python数据结构算法 北京大学_北京大学公开课《数据结构与算法Python版》

之前我分享过一个数据结构与算法的课程&#xff0c;很多小伙伴私信我问有没有Python版。看了一些公开课后&#xff0c;今天特向大家推荐北京大学的这门课程&#xff1a;《数据结构与算法Python版》。课程概述很多同学想要转行机器学习&#xff0c;也确实掌握了一些机器学习模型…

20道C#练习题(一)1——10题

1.输入三个整数&#xff0c;xyz&#xff0c;最终以从小到大的方式输出。利用if嵌套。 Console.Write("请输入x"); double x double.Parse(Console.ReadLine()); Console.Write("请输入y"); double y double.Parse(Console.ReadLine()); Console.Write(&q…

fd 句柄_linux文件描述符fd(windows下的句柄)

在Linux系统中一切皆可以看成是文件&#xff0c;文件又可分为&#xff1a;普通文件、目录文件、链接文件和设备文件fd&#xff1a;file descriptor文件描述符0,1,2分别给了标准输入、标准输出和错误输出。ls -l /proc/pid/fd可以查看某个进程所使用的fd用lsof可以查看比如&…

Python——三级菜单

#三级菜单函数 menu {北京&#xff1a;&#xff5b;海淀&#xff1a;&#xff5b;五道口&#xff1a;&#xff5b;&#xff5d;中关村&#xff1a;&#xff5b;&#xff5d;上帝&#xff1a;&#xff5b;&#xff5d;&#xff5d;昌平&#xff1a;&#xff5b;&#xff5d;朝阳…

HTTPS 原理解析

http://www.cnblogs.com/zery/p/5164795.html 一 前言 在说HTTPS之前先说说什么是HTTP&#xff0c;HTTP就是我们平时浏览网页时候使用的一种协议。HTTP协议传输的数据都是未加密的&#xff0c;也就是明文的&#xff0c;因此使用HTTP协议传输隐私信息非常不安全。为了保证这些隐…