《Machine Learning》系列学习笔记之第二周
第二周
第一部分 Multivariate Linear Regression
Multiple Features
Note: [7:25 - θT is a 1 by (n+1) matrix and not an (n+1) by 1 matrix]
Linear regression with multiple variables is also known as "multivariate linear regression".
We now introduce notation for equations where we can have any number of input variables.
|
x(i)jx(i)mn=value of feature j in the ith training example=the column vector of all the feature inputs of the ith training example=the number of training examples=∣∣x(i)∣∣;(the number of features) |
The multivariable form of the hypothesis function accommodating these multiple features is as follows:
hθ(x)=θ0+θ1x1+θ2x2+θ3x3+⋯+θnxn
In order to develop intuition about this function, we can think about θ0 as the basic price of a house, θ1 as the price per square meter, θ2 as the price per floor, etc. x1 will be the number of square meters in the house, x2 the number of floors, etc.
Using the definition of matrix multiplication, our multivariable hypothesis function can be concisely represented as:
|
hθ(x)=[θ0θ1...θn]⎡⎣⎢⎢⎢x0x1⋮xn⎤⎦⎥⎥⎥=θTx |
This is a vectorization of our hypothesis function for one training example; see the lessons on vectorization to learn more.
Remark: Note that for convenience reasons in this course we assume x(i)0=1 for (i∈1,…,m). This allows us to do matrix operations with theta and x. Hence making the two vectors 'θ' and x(i) match each other element-wise (that is, have the same number of elements: n+1).]
The training examples are stored in X row-wise. The following example shows us the reason behind setting x(i)0=1 :
|
X=⎡⎣⎢⎢⎢x(1)0x(2)0x(3)0x(1)1x(2)1x(3)1⎤⎦⎥⎥⎥,θ=[θ0θ1] |
As a result, you can calculate the hypothesis as a column vector of size (m x 1) with:
hθ(X)=Xθ
Gradient
Descent For Multiple Variables
Gradient
Descent for Multiple Variables
The
gradient descent equation itself is generally the same form; we just
have to repeat it for our 'n' features:
|
repeat θ0:=θ0−α1m∑i=1m(hθ(x(i))−y(i))⋅x(i)0 θ1:=θ1−α1m∑i=1m(hθ(x(i))−y(i))⋅x(i)1 θ2:=θ2−α1m∑i=1m(hθ(x(i))−y(i))⋅x(i)2 } |
In
other words:
|
repeat for } |
The
following image compares gradient descent with one variable to
gradient descent with multiple variables:
Gradient
Descent in Practice I - Feature
Scaling(特征缩放)
(1)我们可以通过使我们的每个输入值在大致相同的范围内加速梯度下降。因为θ将在小范围上快速下降,并且在大范围上缓慢下降,因此当变量非常不均匀时,θ将无效地振荡到最佳值。
防止这种情况的方法是修改输入变量的范围,使它们都大致相同。理想情况:
-1≤x(i)≤1
要么
-0.5≤x(i)≤0.5
这些不是确切的要求;我们只是想加快速度。目标是使所有输入变量大致在这些范围之一,给出或取几个。
(2)有助于此的两种技术是特征缩放和平均归一化。
1.特征缩放:将输入值除以输入变量的范围(即,最大值减去最小值),得到刚刚为1的新范围。
2.平均归一化:涉及从该输入变量的值中减去输入变量的平均值输入变量导致输入变量的新平均值刚好为零。
要实施这两种技术,请按照以下公式调整输入值:
xi:=
xi-μi/si
其中μi是特征(i)的所有值的平均值,si是值的范围(max-min),或者si是标准差。
注意,除以范围或除以标准偏差,得到不同的结果。本课程中的测验使用范围
- 编程练习使用标准偏差。
例如,如果xi代表房价,范围为100到2000,平均值为1000,那么xi:=
price-1000/1900。
Gradient
Descent in Practice II - Learning Rate
注意:[5:20
- 右图中的x轴标签应该是θ而不是迭代次数]
(1)调试梯度下降。
在x轴上绘制迭代次数的绘图。
现在绘制成本函数,J(θ)在梯度下降的迭代次数。
如果J(θ)增加,则可能需要减小α。
(2)自动收敛测试。
如果J(θ)在一次迭代中减小小于E,则声明收敛,其中E是诸如10-3的一些小值。
然而,在实践中很难选择这个阈值。
已经证明,如果学习速率α足够小,则J(θ)将在每次迭代时减小。
总结:
如果α太小:收敛慢。
如果α太大:在每次迭代时不会减少,因此可能不会收敛。
Features
and Polynomial Regression
特征选择
有时我们可以转换研究问题的角度,比如将房子的宽度和长度(原始数据)转化为房子的占地面积,从而得到更好的数据模型。
多项式回归
如果不能很好地拟合数据,我们可以通过使它是二次,立方或平方根函数(或任何其他形式)来改变我们的假设函数的行为或曲线。
例如,如果我们的假设函数是hθ(x)=θ0+θ1x1,则我们可以基于x1创建附加特征,以获得二次函数hθ(x)=θ0+θ1x1+θ2x21或三次函数hθ(x)=θ0+θ1x1+θ2x21+θ3x31
在立方体版本中,我们创建了新的特征x2和x3,其中x2
= x21和x3
= x31。
为了使其为平方根函数,我们可以做:hθ(x)=θ0+θ1x1+θ2√x1
要记住的一个重要的事情是,如果你选择你的功能这种方式,然后功能缩放变得非常重要。
例如。如果x1具有范围1至1000,则x21的范围变为1至1000000,而x31的范围变为1至1000000000
第二部分Computing
Parameters Analytically
Normal
Equation正态方程法
梯度下降给出了使J最小化的一种方式。让我们讨论这样做的第二种方式,这次显式地执行最小化,而不诉诸迭代算法。在“正常方程”方法中,我们将通过显式地取其相对于θj的导数并将它们设置为零来最小化J。这允许我们找到最佳的theta而不迭代。正规方程公式如下:
θ=(XTX)−1XTy
不需要使用正规方程进行特征缩放。
以下是梯度下降和正规方程的比较:
|
Gradient Descent |
Normal Equation |
|---|---|
|
Need to choose alpha |
No need to choose alpha |
|
Needs many iterations |
No need to iterate |
|
O (kn2) |
O (n3), |
|
Works well when n is large |
Slow if n is very large |
使用正规方程,计算XTX具有复杂度O(n3)。因此,如果我们有非常大量的特征,正态方程将是缓慢的。在实践中,当n超过10,000时,可能适合用梯度下降法。
Normal
Equation Noninvertibility正态方程不可逆性
当以octave实现正规方程时,我们想使用'pinv'函数而不是'inv'。
即使XTX不可逆,'pinv'函数也会给出一个值θ。
如果XTX是不可逆的,常见的原因可能是:
冗余特征,其中两个特征非常密切相关(即,它们是线性相关的)
太多特征(例如m≤n)。
在这种情况下,删除一些功能或使用“正则化”(将在以后的课程中解释)。
上述问题的解决方案包括删除与另一个线性相关的特征或者当存在太多特征时删除一个或多个特征。
《Machine Learning》系列学习笔记之第二周的更多相关文章
- Neural Networks and Deep Learning 课程笔记(第二周)神经网络的编程基础 (Basics of Neural Network programming)
总结 一.处理数据 1.1 向量化(vectorization) (height, width, 3) ===> 展开shape为(heigh*width*3, m)的向量 1.2 特征归一化( ...
- Machine learning吴恩达第二周coding作业(选做)
1.Feature Normalization: 归一化的处理 function [X_norm, mu, sigma] = featureNormalize(X) %FEATURENORMALIZE ...
- Machine learning 吴恩达第二周coding作业(必做题)
1.warmUpExercise: function A = warmUpExercise() %WARMUPEXERCISE Example function in octave % A = WAR ...
- [Machine Learning]学习笔记-Logistic Regression
[Machine Learning]学习笔记-Logistic Regression 模型-二分类任务 Logistic regression,亦称logtic regression,翻译为" ...
- Machine Learning 学习笔记
点击标题可转到相关博客. 博客专栏:机器学习 PDF 文档下载地址:Machine Learning 学习笔记 机器学习 scikit-learn 图谱 人脸表情识别常用的几个数据库 机器学习 F1- ...
- 红帽学习笔记[RHCSA] 第二周
目录 红帽学习笔记[RHCSA]第二周 环境 第七课[网络配置相关] 在Vmware中添加网卡 将网卡添加到虚拟机上 关于网卡命名规则 配置网络 网络配置命令总结 更改hostname 关于SSH的一 ...
- 《Machine Learning》系列学习笔记之第一周
<Machine Learning>系列学习笔记 第一周 第一部分 Introduction The definition of machine learning (1)older, in ...
- [Python & Machine Learning] 学习笔记之scikit-learn机器学习库
1. scikit-learn介绍 scikit-learn是Python的一个开源机器学习模块,它建立在NumPy,SciPy和matplotlib模块之上.值得一提的是,scikit-learn最 ...
- Machine Learning 学习笔记1 - 基本概念以及各分类
What is machine learning? 并没有广泛认可的定义来准确定义机器学习.以下定义均为译文,若以后有时间,将补充原英文...... 定义1.来自Arthur Samuel(上世纪50 ...
随机推荐
- js 计算月/周的第一天和最后一天
因为项目开发中遇到需要向后台传本周的开始和结束时间,以及上一周的起止时间,就琢磨了半天,总算写出来一套,写篇文章是为了方便自己记忆,也是分享给需要的人,水平有限,写的不好请见谅: getDateStr ...
- bzoj1061--线性规划
线性规划裸题... 根据题目很容易可以得到线性规划方程(以样例为例): Min(2*x1+5*x2+2*x3) x1+ 0+ 0>=2 x1+x2+ 0>=3 0+x2+x3>=4 ...
- oracle_角色
一. 每个Oracle用户都有一个名字和口令,并拥有一些由其创建的表.视图和其他资源. Oracle角色(role)就是一组权限(privilege) (或者是每个用户根据其状态和条件所需的访问类型) ...
- (原创)Java多线程作业题报java.lang.IllegalMonitorStateException解决
作业: 有一个水池,水池容量500L,一边为进水口,一边为出水口,要求进水放水不能同时进行,水池一旦满了不能继续注水,一旦空了,不能继续放水,进水速度5L/s,放水速度2L/s. 这是我学多线程时做的 ...
- Python学习的个人笔记(基础语法)
Python学习的个人笔记 题外话: 我是一个大二的计算机系的学生,这份python学习个人笔记是趁寒假这一周在慕课网,w3cschool,还有借鉴了一些博客,资料整理出来的,用于自己方便的时候查阅, ...
- Spark源码分析之Spark Shell(下)
继上次的Spark-shell脚本源码分析,还剩下后面半段.由于上次涉及了不少shell的基本内容,因此就把trap和stty放在这篇来讲述. 上篇回顾:Spark源码分析之Spark Shell(上 ...
- phpcms v9更改后台文章排序的方法
后台文章排序怎么才可以按自己输入的数字排列?如按4,3,2,1,从大到小排列?实现方法如下: 修改文件: phpcms\modules\content 中的 content.php 代码如下: $da ...
- jquery.validate提示错误方法
修改jquery.validate提示错误方法,将错误信息用弹出框提示 <script src="@Url.Content("~/Scripts/jquery.validat ...
- 学习笔记——Java数组
1.创建一维数组 最简单快捷的方法是:声明的同时为数组分配内存.如: int month[]=new int[12] 也可以先声明再分配内存.如: int month[]; //或int[] mont ...
- Python基础之数据类型
Python基础之数据类型 变量赋值 Python中的变量不需要声明,变量的赋值操作既是变量声明和定义的过程. 每个变量在内存中创建,都包括变量的标识,名称和数据这些信息. 每个变量在使用前都必须赋值 ...