第二周 单特征值
房价问题 是回归问题和监督学习 ,单变量线性回归
(x,y)是指一个训练样本,xi,yi是指第i个 , x是特征值输入,y是输出,即房价,m是样本数量
假设函数 hypothesis h为预测值
要做的就是选择的值,使代价函数最小
这是只有一个变量的预测函数和代价函数
这是有两个变量的代价函数
梯度下降算法 其实就是下山的时候找最快的路,更改起点,会得到不同的局部最优解
应该同时更新变量数值。
导数项的意义就是让变量减去导数(斜率),从而向最低点靠近
学习率太低会导致梯度下降很慢,太高的话会每次都越过最小值,从而发散
计算得到的两个梯度下降导数
如果是线性回归的梯度下降算法,一会得到全局最优解,因为他的代价函数是一个碗状的形状,
这种算法的名称叫做batch梯度下降算法,每一步都会使用所有的样本。
第三周
回顾线性代数
第四周
下载matlab
第五周 多特征值
Xj^i 第i个样本的第j个特征值,此时假设函数hx变成了
如果将x0看做1,此时
如果特征值之间的取值范围差别很大的话,可以使用特征缩放,比如
目的是为了让特征值的取值大约在-1~1之间取值,一般不能在超过-3~3或-1/3~1/3
均值归一化这样会让特征值的平均值约为0
这两个方法是为了让那个梯度下降更加快
判断梯度下降是否正确工作 1.(常用)通过迭代次数曲线,看代价函数是否逐渐减少来判断,如果不是逐渐减少的,通常的原因就是学习率设置的过大 2.通过自动判断,如果代价值小于0.001或者一个固定值,那么就可以判断其已经收敛
吴恩达常用的学习率一般是以3倍为间隔取的 0.001 0.003 0.01 0.03 0.1 0.3 1
创造特征值 比如房子的宽度和长度的乘积
非线性的拟合 可以设置等
正规方程
举例说明
这样就得到了一个直接计算的方法
而且不需要进行特征缩放
正规方程不需要选择学习率不需要迭代,但是需要计算所以n不能太大,在10000以内就可以使用
这里的并不是一个
而是一个矩阵,其中包含
0--
n
第六周 octave
//
v= 1:0.1:2从1开始以0.1递增
ones(2,3)23的矩阵 元素全为1
rand随机数矩阵 zeros全零矩阵 eye(4)单位矩阵
hist(w)绘制直方图
size (A)大小 size(A,1)行数 但是常用length
load xxx.dat 读取数据
who 展示所有变量 whos 所有变量的详细信息
clear a 删除变量 clear 全清
save xx.mat v
第七周 logistic回归(sigmoid函数)
解决的是分类问题, y是1 或者 0,此时hx其实就是对于特征值序列x而言y是1的概率是多少
这个就进一步简化了这个问题,预测结果其实就是预测z==
是否大于0
决策边界就是z=0的那条线或面,一旦有了theta就会得知决策边界,而数据训练是为了拟合theta
怎样确定theta呢?
logistics回归的代价函数如果用线性回归的会成为一个非凸函数,即有很多局部最优解,所以我们应该更改一下这个代价函数,如下:
此时代价函数就是一个凸函数,所以我们的任务就是找到最小的代价之下的theta是什么,这样又可以使用梯度下降算法了
结果发现跟线性回归的公示完全一样,但是有一点不一样那就是hx变了
想一想,梯度下降算法就是计算两个值,J(theta)(如果你想判断收敛状态的话才计算这个)和J(theta)的导数
更好的优化方法,BFGS,LBFGS等不需要选择学习率,比梯度下降收敛的快,(章节7高级优化用代码展示了这个方法)
多类别问题,y就有多个取值了,可以将其变成二元分类问题,将一类看做正类,其他所有类看做负类,这样就会形成n个分类器
第八周 正则化
欠拟合 没有很好的拟合数据
过拟合 拟合所有数据,可能因为特征值太多,导致代价函数接近于0,无法泛化到新的数据模型
解决方法,一减少特征值数量,人工检查或者模型选择方法,二是正则化,保持特征值数量,但是减少theta的值
因为不知道哪个特征值是相关性不较低的,所以要缩小所有的theta值,这样就要求我们修改代价函数变成
如果theta设置太大,就会将所有特征值抵消掉,出现欠拟合,所以需要正确选择theta。
线性回归中
梯度下降的正则化方法
正规方程的正则化 不仅能减小特征值的相关性,还能防止公式中不可逆现象的发生
第九周 神经网络
解决非线性问题
看到的是像素亮度值的矩阵,让大脑的某一个神经去学习执行别的功能。
简单的神经网络,其中告诉了我们一些基础的知识点,X0A0等常为1的变量被称作偏置量,theta其实就是常说的权重,而且每一层的权重都不同,变量的上表表示的是第几层,sigmoid函数和logistic函数其实就是激活函数 ,激活函数计算出的激活值其实就是下一层所要使用的输入特征值
神经网络的计算方法,其中最后一步实际上就是线性回归,其中theta的上角标表示的是第几层,下角标第一个表示的是目标输出是下一层的第几个,下角标的二个是本层第几个
逻辑AND的神经网络示例
告诉我们怎样通过神经网络实现稍微复杂的逻辑,右 上方是该逻辑的正确图像
神经网络解决的多元分类问题,之前使用的logistic解决多元分类问题,就是将一个类别看做正样本,剩下的看做一类看做负样本,神经网络分类器是将结果看做一个四维的输出向量,如果输出的结果是【1,0,0,0】就是行人
第九周 神经网络
基础知识:L表示的是一共有多少层,Si表示第i层一共有多少个神经元,k表示一共有多少维的输出,小写的delta表示的是激活值与我们预期的激活值之间的error(隐藏层中的输出值不叫激活值,其实隐藏层也分两块,z就是上层计算所得到的输出值,而a是g(z)是在使用激活函数之后得到的激活值)
数据集的表示是
线性回归代价函数,就是实际值与预测值的标准差;
logistics不能使用,因为其不是凸函数,所以进行了变化,变成了求log;
而神经网络的代价函数可以使用logistic的,区别在于多个分类结果要都进行log操作,最后是加上了正则化的操作,将所有层的theta的平方加起来
这个图告诉我们的是如何求小delta,其中*表示的是Hadamard乘积,其实就是两个向量的对应元素相乘
利用反向传播算法来优化代价函数,第一步先整理数据集,设大写delta全为0,目的是之后为了求偏导数,然后进行正向传播,设特征值为第一层,计算出每一个神经元的输出值,然后进行逆向传播计算delta,输出层最为简单,就是用输出值和数据集中的y值做差,然后计算上一层,计算上层delta的公示在下一张图片里,其实就是j+1层的delta的带权的和,直到倒数第二层,因为第一层是特征值,不需要计算误差。计算完所有的delta之后,在计算大delta,公式是,之后计算D,当j等于零时,此时theta是偏置量,
,如果j不等于0,那么计算公式为
然后通过数学公式可以推导出
(上一张ppt中他说
,应该是少写了一个1/m,明天推导一下),知道了代价函数的导数,我们就可以利用之前梯度下降的算法,不断更新theta值,来优化代价函数了,或者使用一些高级的BGF等算法来优化。
这是一个实际的例子,上面说到这里
然后上一层的delta值其实是下一层delta值的加权和,这张图片告诉我们计算小delta的方法,就是方向相反的正向传播
梯度检验 ,就是用导数的定义来检查,如果两个值是相似,就可以相信自己的反向传播算法,之后一定要停止梯度检验的代码,不然会很慢
整合回顾:
如果有多个隐藏层,每一层的神经元的个数应该相同,而且应该大于等于特征值数量。随机初始化权重,进行前向传播,设定代价函数,进行反向传播计算出代价函数的导数,梯度检查的反向传播得到的导数值和使用数值方法得到的估计值,确保这两个值相近,然后停止梯度检查,最后使用优化方法来减小代价函数
十三周 支持向量机