【Coursera-Machine Learning】自用2

目录

前言

一、进度

二、基本内容

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.Classification细则

1.对于输出的y向量,元素为0或1(后续的多分类问题可能会有不同维数的y向量)

2.Hypothesis Function的值要取在[0,1]中,为了对应概率进行分类统计:如果h(\theta )>0.5,则y为1,反之亦然。

2.Logistic Regression

为了保证h(\theta )在01之间,修改之前的h(\theta )定义,从单纯的θTX改为复合θTX的函数,形成Sigmoid函数:

【Coursera-Machine Learning】自用2_第1张图片

图像为:

【Coursera-Machine Learning】自用2_第2张图片

合成公式就是:

h_{\theta }(x)=\frac{1}{1+e^{-\theta ^{T}X}}

 很明显,θTX>0的时候,y对应1,反之亦然。

 3.Decision Boundary

【Coursera-Machine Learning】自用2_第3张图片

如图,很明显,带入对应的θ值后,得到的函数图像就是Decision Boundary。

这里Andrew提到,Decision Boundary虽然在图上表示的很明显,但他不是样本图的属性,而是Hypothesis Function的属性(确实)

 4.Cost Function

【Coursera-Machine Learning】自用2_第4张图片

上一章里对于线性回归使用了一个Cost Function的计算公式,但是Andrew说这个公式不适用于Classification,原因就是如果使用Classification的h_{\theta }(x)(两种回归的计算方式不一样),那么得到的Cost Function图像就不是convex的(新单词,姑且理解成是图像类似开口朝上的抛物线形),会有很多的Local Minimum,这样就不能使用Gradient Descent进行反馈来优化。

所以这里给出了一个新的Cost Function:

【Coursera-Machine Learning】自用2_第5张图片

【Coursera-Machine Learning】自用2_第6张图片

【Coursera-Machine Learning】自用2_第7张图片

 可以从图像中理解到,当y为1的时候,h_{\theta }(x)越靠近1,损失值越少; 当y为0的时候,h_{\theta }(x)越靠近0,损失值越少。而当y的值与x的值相差较大的时候,损失值会趋近与无穷大(体现了两者的同趋向性)。

以上式子甚至可以写成一个式子:

【Coursera-Machine Learning】自用2_第8张图片

 就是通过引入(1-y)这个元素来保证不管y取0还是1都只会保留对应的一项。

5.Gradient Descent

 依旧是对上式的θ向量求偏导,再同时更新所有的θ值。

【Coursera-Machine Learning】自用2_第9张图片

但是求偏导后的结果和之前的线性回归是一样的,很神奇,但求偏导这部分超出我的数学能力了:(

【Coursera-Machine Learning】自用2_第10张图片

 都是损失值乘上对应的x样本值,求和再平均。

6.Optimization Algorithm

这部分听得不是很懂,到时候写作业的时候看看

除了求偏导,Andrew还提供了几个Octave自带的求CostFunction和每一个θ偏导的库。内部原理据他说自己也研究了很长时间,所以咱现在先会用就行了。

【Coursera-Machine Learning】自用2_第11张图片

这里感觉需要注意的就是gradient()里的序号值和θ的下标要注意区分,gradient(1)对应θ0。

7.Multi-Class Classification: One-vs-all

有时候y的取值不止0和1,可以分成多类。这时候的基本思路就是先分出一类,剩下的所有看成另一类,然后一次把所有类都分出来。有多少个y就分出多少个Decision Boundary。

这里又有一个公式,满足了高数线代和概率论的统一,美妙至极:

前面的Hypothesis Function在上一章里已经有了高数线代的统一,这里又把它放进了Sigmod函数进行复合。而后面的概率论表达式表示在给出x样本矩阵的情况下,用当前θ组成的Hypothesis Function对应到y分到当前类的概率。

8.Overfitting

过拟合状态,指引入样本特性的个数过多,同时关于每个特性的表达式比较复杂,就会使得拟合的图像过于复杂。比如回归问题的回归函数过于弯曲,分类问题的Decision Boundary不太像是一个圆(差不多这个意思)

【Coursera-Machine Learning】自用2_第12张图片

对于过拟合的情况,一般的操作如下:

1.只选择必要的一些特性; 

2.Regularization(觉得正则化这个翻译有点怪,不是很想用)

【Coursera-Machine Learning】自用2_第13张图片

9.Regularization

之前说到,Cost Function的表达式为:

【Coursera-Machine Learning】自用2_第14张图片

如果要进行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的单位矩阵。

【Coursera-Machine Learning】自用2_第15张图片

3.λ是一个常数,和Gradient Descent里的每次迭代使用到的α一样。如果λ过大,那么每次求完偏导以后为了“中和”过大的尾巴,就会把所有的θ值这值得很小,那反而会导致underfitting的情况出现。

【Coursera-Machine Learning】自用2_第16张图片

10.Gradient Descent For Regularization

直接上公式:

【Coursera-Machine Learning】自用2_第17张图片

下面的θj也可以写成:

但我觉得还是上面那个公式好记一些。

这一块反而没什么好讲的,基本思路和之前的是一样的,无非多出来一块尾巴也顺便求个偏导罢了(小尾巴的偏导就很简单了)

【Coursera-Machine Learning】自用2_第18张图片

11.Normal Equation For Regularization

【Coursera-Machine Learning】自用2_第19张图片

上面的是没有regularization的normal equation表达式,下面则是我们需要的表达式。

关于这个首元素为0的单位矩阵在Octave里的生成方式,简单思考了一下:

【Coursera-Machine Learning】自用2_第20张图片

 不过如此。

12.作业

有了上次的入门,这次作业感觉还行。

就三个小问题:

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%了?

下周开始神经网络,应该是挺有意义的一个东西。

你可能感兴趣的:(机器学习)