给出正确答案,训练神经网络进行学习
应用:基因分类 person1 person2 person3
facebook 通过Email可以分析出你的朋友圈 市场
找出一堆数据里面的数据结构
混声中分离音频
hypothesis 预测函数
cost function 代价函数(损失函数)
只考虑w的时候
右边的图是预测函数不同的斜率的时候,损失函数的值。w=1时,损失函数最小,此时预测函数最优。
这个时候,(w,b)与损失函数值J的图像是一个碗状函数。
可以用等高线表示:
梯度下降公式:
α 为学习率,也就是步长。步长过大的话,损失函数可能会无法收敛或发散
随着梯度下降,越接近局部最优点,下降速度越慢(因为J(θ)的导数接近于0)
推导过程:
算法:
我们要同时更新θ0 和 θ1
batch 梯度下降:(计算每一步的梯度的时候,没有遍历整个数据集,而是按批次,只遍历了一部分子集)这样做可以提高效率。
一般用大写字母表示矩阵
矩阵的加减乘除 很简单 没有什么可记的
矩阵的求逆 转置
依旧是房价预测问题,不过这次我们有更多的因素需要考虑:这个时候就要使用矩阵了
优化方法:梯度下降法Gradient Descent 对于多元,分别对自变量求偏导即可
当两个参数的取值范围差别很大的时候,代价函数的等值线就会非常扁平,这个时候梯度下降的速率就会很慢,这个时候可以使用特征缩放(感觉这就是特征值归一化)如右边的图所示。
缩放方法:
Mean normalization
注意:这个图像的横轴是迭代次数,通过这条曲线可以判断代价函数是否收敛。
如果下降算法没有正常工作,可以将学习率(步长)降低,可以每隔3倍取值试一下0.001 0.003 0.01......
有时候,按自己的需求定义一些特征量,会得到一个更好的模型:这里是将房屋的height wide 两个特征量,用area一个特征量来表示
选择怎样的多项式去拟合数据?
对于房价,我们可以使用三次多项式,也可以使用其它合适的曲线拟合,根号函数 具体如何选择 要根据具体背景
对于多元的代价函数,求其最小值,可以对其偏导数都为零,解出相应的θi :
但是这样做过程可能会非常复杂。我们可以采用其他的方法:(额外加的一列1是偏置项)
我们可以使用下面的这个方法来计算θ
推导过程:
design matrix 设计矩阵X
使用正规方程不需要使用特征缩放
梯度法和正规方程优缺点比较:
目标任务
其中:
具体过程:
做变换:
在进行求解偏导的过程中会用到的公式
令上面的导数等于0,得到θ
XXT不可逆的时候,虽然这种情况很少发生。(即使发生,也可以用pinv求伪逆)
样本数据少,待确定参数多的时候,就会出现正规方程不可逆的情况。可删除一些无关紧要的特征量。
和MATLAB差不多可以参考网址:
size(M) 可以查看矩阵M的维度
length(M) 可以查看矩阵元素的个数
load fileNname可以读取文件
load('fileName') 也可以读取
加减乘除
xxxxxxxxxx
101t=[0:0.01:0.98];
2y1=sin(2*pi*4*t);
3plot(t,y1)
4hold on
5y2=cos(2*pi*4*t);
6plot(t,y2)
7xlabel('time')%加一些标签
8ylabel('value')
9legend('sin','cos')%加图标
10title('my plot')%加title
xxxxxxxxxx
51subplot(1,2,2)%和matplotlib差不多1*2 的窗口 中的第二个
2plot(t,y1)
3subplot(1,2,1)
4plot(t,y2)
5axis([0.5,1,-1,1])%加刻度
xxxxxxxxxx
111A = magic(5)
2
3A =
4
517 24 1 8 15
623 5 7 14 16
7 4 6 13 20 22
810 12 19 21 3
911 18 25 2 9
10%使用逗号 连续调用函数
11imagesc(A),colorbar,colormap gray;%加colorbar map类型为gray
xxxxxxxxxx
161 i=1;
2while true,v(i)=999;
3i=i+1;if i==6,break;
4end;%结束if
5end;%结束while
6
7v
8
9v =
10
11 列 1 至 6
12 999 999 999 999 999 64
13
14 列 7 至 10
15
16 128 256 512 1024
函数:对于预测房价中的代价函数
xxxxxxxxxx
81function J = costFun(x,y,theta)
2%COSTFUN 这是用来计算代价函数
3% x ,y theta 是x y 和权值
4m=size(x,1);%样本的数目 输入有几行
5predictions=x*theta;%predictions of hypothesis on all m examples
6sqrErrors = (predictions-y).^2;%compute the error
7J = 1/(2*m)*sum(sqrErrors);
8end
测试一下:
xxxxxxxxxx
111x=[1 1;1 2;1 3];%设计矩阵 输入三个x 1 2 3
2y=[1;2;3];%y 1 2 3 相当于三个点(1,1) (2,2)(3,3)
3theta =[0;1];%权值 0 1
4
5j=costFun(x,y,theta)
6
7j =
8
9 0
10
11
用c++实现:
将线性回归方法用于分类问题效果很差。
但是可以使用logistics Regression(逻辑回归)方法:
Logistics function 只输出两个结果,即0和1。
非线性的决策边界:
如果使用线性回归里面的cost function的话,代价函数是一个非凸函数,不适合使用梯度下降法进行优化:
我们要寻找一个更适合的cost function:
对于这个代价函数的理解:如果对于一组数据,当y=1时,(表明肿瘤存在),我们的预测函数hθ(x)=0,即预测出来的结果是该数据是1(肿瘤存在)的几率是0,即肿瘤不存在。我们的真实值为y=1,y-hθ(x)=1即代表了真实值与预测值的误差(惩罚力度)。
当y=0时,cost function使用上面这个。我们的预测函数hθ(x)=0,即预测出来的结果是该数据是1(肿瘤存在)的几率是0,即肿瘤不存在。我们的真实值为y=0,y-hθ(x)=0即代表了真实值与预测值的误差(惩罚力度)。
将上面的Cost function简化为下面的式子:
(其实就是把原来的分段函数,写成一个函数了,更加紧凑)
next is to fit parameters θ:
optimization algorithm
advance algorithm:BFGS ,L-BGGS
可以使用fminunc()方法对自己函数进行优化 它的最后一个返回值exitFlag,如果为1,说明算法收敛。
就是输出不止0 1 两种情况:
举个栗子:
使用了三个分类器,第一个分类器能够识别出△,第二个分类器能够识别出□,第三个分类器能够识别出×。
总结:
对于线性回归问题:
对于分类问题:
预测函数中的高阶项越多,其拟合曲线越复杂,如第三个图。
通过代价函数可以解决过拟合问题:
通过在代价函数里面用一个比较大的数(1000)乘以高阶项系数θ3,θ4,可以使θ3,θ4的值趋近于0,起到降阶的效果。
以上就是正则化的思想:
由于我们不知道哪些项是高阶项,所以我们在后面加上一个正则项,使所有的θ都变小。
λ如果太大,那么对θ的惩罚力度太大,就会造成拟合曲线的欠拟合。
后面将会学到怎样自动的选择λ的值。
以线性回归问题的优化方法为例:
我们把θ0和其他的θ分开进行处理。可以发现,加上正则项的更新函数,其实就是比正常的更新函数多了一个(1-α*λ/m),也就是把θj的值降低了。
当然,使用正规方程,也要面对XTX不可逆的问题。但是可以证明,当λ>1时,那一坨必定可逆。