目录
前言
一、进度
二、基本内容
1.Classification细则
2.Logistic Regression
3.Decision Boundary
4.Cost Function
5.Gradient Descent
6.Optimization Algorithm
7.Multi-Class Classification: One-vs-all
8.Overfitting
9.Regularization
10.Gradient Descent For Regularization
11.Normal Equation For Regularization
12.作业
总结
不说废话,直接来
第三周(50%)
1.对于输出的y向量,元素为0或1(后续的多分类问题可能会有不同维数的y向量)
2.Hypothesis Function的值要取在[0,1]中,为了对应概率进行分类统计:如果>0.5,则y为1,反之亦然。
为了保证在01之间,修改之前的定义,从单纯的θTX改为复合θTX的函数,形成Sigmoid函数:
图像为:
合成公式就是:
很明显,θTX>0的时候,y对应1,反之亦然。
如图,很明显,带入对应的θ值后,得到的函数图像就是Decision Boundary。
这里Andrew提到,Decision Boundary虽然在图上表示的很明显,但他不是样本图的属性,而是Hypothesis Function的属性(确实)
上一章里对于线性回归使用了一个Cost Function的计算公式,但是Andrew说这个公式不适用于Classification,原因就是如果使用Classification的(两种回归的计算方式不一样),那么得到的Cost Function图像就不是convex的(新单词,姑且理解成是图像类似开口朝上的抛物线形),会有很多的Local Minimum,这样就不能使用Gradient Descent进行反馈来优化。
所以这里给出了一个新的Cost Function:
可以从图像中理解到,当y为1的时候,越靠近1,损失值越少; 当y为0的时候,越靠近0,损失值越少。而当y的值与x的值相差较大的时候,损失值会趋近与无穷大(体现了两者的同趋向性)。
以上式子甚至可以写成一个式子:
就是通过引入(1-y)这个元素来保证不管y取0还是1都只会保留对应的一项。
依旧是对上式的θ向量求偏导,再同时更新所有的θ值。
但是求偏导后的结果和之前的线性回归是一样的,很神奇,但求偏导这部分超出我的数学能力了:(
都是损失值乘上对应的x样本值,求和再平均。
这部分听得不是很懂,到时候写作业的时候看看
除了求偏导,Andrew还提供了几个Octave自带的求CostFunction和每一个θ偏导的库。内部原理据他说自己也研究了很长时间,所以咱现在先会用就行了。
这里感觉需要注意的就是gradient()里的序号值和θ的下标要注意区分,gradient(1)对应θ0。
有时候y的取值不止0和1,可以分成多类。这时候的基本思路就是先分出一类,剩下的所有看成另一类,然后一次把所有类都分出来。有多少个y就分出多少个Decision Boundary。
这里又有一个公式,满足了高数线代和概率论的统一,美妙至极:
前面的Hypothesis Function在上一章里已经有了高数线代的统一,这里又把它放进了Sigmod函数进行复合。而后面的概率论表达式表示在给出x样本矩阵的情况下,用当前θ组成的Hypothesis Function对应到y分到当前类的概率。
过拟合状态,指引入样本特性的个数过多,同时关于每个特性的表达式比较复杂,就会使得拟合的图像过于复杂。比如回归问题的回归函数过于弯曲,分类问题的Decision Boundary不太像是一个圆(差不多这个意思)
对于过拟合的情况,一般的操作如下:
1.只选择必要的一些特性;
2.Regularization(觉得正则化这个翻译有点怪,不是很想用)
之前说到,Cost Function的表达式为:
如果要进行regularization,则要在后面加上一个小尾巴:
在分类问题里,Cost Function的表达可以写成下式:
这里要注意几点:
1.前面的系数是1/m,而后面尾巴的系数是1/2m,是因为前面的式子里已经把1/2放进了Cost Function里面,这在本文第4部分可以看到;
2.θ向量是从1开始的,因为θ0默认是和当时我们自行加上的一列为1的X0向量相乘。换句啊话说,θ0是作为Hypothesis Function的常数项出现的,不会和X的样本数值发生关系。我们就是要调整Cost Function中那些影响比较大的θX^n,从而规避过拟合的情况。但是我觉得θ的第一个数还是存在的,类似一个第一个元素为0的单位矩阵。
3.λ是一个常数,和Gradient Descent里的每次迭代使用到的α一样。如果λ过大,那么每次求完偏导以后为了“中和”过大的尾巴,就会把所有的θ值这值得很小,那反而会导致underfitting的情况出现。
直接上公式:
下面的θj也可以写成:
但我觉得还是上面那个公式好记一些。
这一块反而没什么好讲的,基本思路和之前的是一样的,无非多出来一块尾巴也顺便求个偏导罢了(小尾巴的偏导就很简单了)
上面的是没有regularization的normal equation表达式,下面则是我们需要的表达式。
关于这个首元素为0的单位矩阵在Octave里的生成方式,简单思考了一下:
不过如此。
有了上次的入门,这次作业感觉还行。
就三个小问题:
1.对于一个矩阵内所有的元素进行某种操作,常用.+操作符的模式,如sigmoid.m;
2.costFunctionReg.m里的J和Grad其实可以直接调用自己写过的costFunction.m,写成这样:
[J, grad] = costFunction(theta, X, y);
J=J+(lambda/(2*m))*sum(theta(2:length(theta)).^2);
grad=grad+transpose(lambda*[0;theta(2:length(theta))]/m);
3.两个向量相加的时候,要注意是否是[1,3]+[1,3]。作业里costFunctionReg.m里写成了[1,3]+[3,1],查了好久:(
备份:
function g = sigmoid(z)
%SIGMOID Compute sigmoid function
% g = SIGMOID(z) computes the sigmoid of z.
% You need to return the following variables correctly
g = zeros(size(z));
% ====================== YOUR CODE HERE ======================
% Instructions: Compute the sigmoid of each value of z (z can be a matrix,
% vector or scalar).
g=1./(1+e.^(-z));
% =============================================================
end
function p = predict(theta, X)
%PREDICT Predict whether the label is 0 or 1 using learned logistic
%regression parameters theta
% p = PREDICT(theta, X) computes the predictions for X using a
% threshold at 0.5 (i.e., if sigmoid(theta'*x) >= 0.5, predict 1)
m = size(X, 1); % Number of training examples
% You need to return the following variables correctly
p = zeros(m, 1);
% ====================== YOUR CODE HERE ======================
% Instructions: Complete the following code to make predictions using
% your learned logistic regression parameters.
% You should set p to a vector of 0's and 1's
%
p=round(sigmoid(X*theta));
% =========================================================================
end
function [J, grad] = costFunction(theta, X, y)
%COSTFUNCTION Compute cost and gradient for logistic regression
% J = COSTFUNCTION(theta, X, y) computes the cost of using theta as the
% parameter for logistic regression and the gradient of the cost
% w.r.t. to the parameters.
% Initialize some useful values
m = length(y); % number of training examples
% You need to return the following variables correctly
J = 0;
grad = zeros(size(theta));
% ====================== YOUR CODE HERE ======================
% Instructions: Compute the cost of a particular choice of theta.
% You should set J to the cost.
% Compute the partial derivatives and set grad to the partial
% derivatives of the cost w.r.t. each parameter in theta
%
% Note: grad should have the same dimensions as theta
%
J=(-transpose(y)*log(sigmoid(X*theta))-transpose(1-y)*log(1-sigmoid(X*theta)))/m;
grad=transpose(sigmoid(X*theta)-y)*X/m;
% =============================================================
end
function [J, grad] = costFunctionReg(theta, X, y, lambda)
%COSTFUNCTIONREG Compute cost and gradient for logistic regression with regularization
% J = COSTFUNCTIONREG(theta, X, y, lambda) computes the cost of using
% theta as the parameter for regularized logistic regression and the
% gradient of the cost w.r.t. to the parameters.
% Initialize some useful values
m = length(y); % number of training examples
% You need to return the following variables correctly
J = 0;
grad = zeros(size(theta));
% ====================== YOUR CODE HERE ======================
% Instructions: Compute the cost of a particular choice of theta.
% You should set J to the cost.
% Compute the partial derivatives and set grad to the partial
% derivatives of the cost w.r.t. each parameter in theta
J=(-transpose(y)*log(sigmoid(X*theta))-transpose(1-y)*log(1-sigmoid(X*theta)))/m;
J=J+(lambda/(2*m))*sum(theta(2:length(theta)).^2);
grad=transpose(sigmoid(X*theta)-y)*X/m;
grad=grad+transpose(lambda*[0;theta(2:length(theta))]/m);
% =============================================================
end
怎么才上三节课课程进度条就已经50%了?
下周开始神经网络,应该是挺有意义的一个东西。