Classification and Representation
01.Classification
要尝试分类,一种方法是是使用线性回归,将所有<0.5的映射为0;>0.5的映射为1。
但由于分类不是一个线性函数,所以这种方法不能很好工作。
02.Hypothesis Representation
- 在用线性回归算法通过x预测y的时候,hθ(x)的值在超出0-1范围内是没有意义的。故我们可以通过使用s函数来将范围锁定在0-1之间。
- hθ(x) 将告诉我们输出为1的可能性。比如hθ(x) =0.7:有70%的可能性输出为1.
hθ(x)=P(y=1|x;θ)=1−P(y=0|x;θ)
P(y=0|x;θ)+P(y=1|x;θ)=1
03.Decision Boundary
- 为了得到离散的0、1分类,可以修改假设函数的输出为(y相当于训练标记,hθ(x)是实际输出结果):
hθ(x)≥0.5→y=1
hθ(x)<0.5→y=0
- 相应的,输入对应输出则变为:
z=0,e0=1⇒g(z)=1/2
z→∞,e−∞→0⇒g(z)=1
z→−∞,e∞→∞⇒g(z)=0
-
最终:
决策边界(decision boundary):是将区域分为y=0和y=1的线,由假设函数决定
Logistic Regression Model
01.Cost Function
-
在逻辑回归模型中我们不能使用和线性回归相同的Cost Function.因为逻辑函数会导致输出不是一个光滑的凹函数,这会造成有许多局部最优解。
-
Cost Funtion图像:
Cost(hθ(x),y)=0 if hθ(x)=y
02.Simplified Cost Function and Gradient Descent
- 代价函数的统一表达形式:
Cost(hθ(x),y)=−ylog(hθ(x))−(1−y)log(1−hθ(x))
-
整个代价函数形式(我的理解是只是一个数据,下面是需要用的整个数据的平均值得形式):
- Grandient Descent:
-
梯度下降算法的表达式如下(在逻辑回归模式中和线性回归是一致的):
03.Advanced Optimization
-
有一些更好的算法来代替梯度下降法进行theta的优化,这些方法可以调用内置的octave函数
Multiclass Classification:One-vs-all
-
分类的数据所属的类别有多种,预测y=每一种类别的概率.做法是不去纠结构造一个复杂的函数一次性分出3类,而是构造3个二分类器。最后选择一个概率最高的作为最后的结论。
Solving the Problem of Overfitting
01.The Problem of Overfitting
-
01图的线并没有很好的拟合训练数据点,叫做欠拟合(underfitting)。
y=θ0+θ1x
02图的线通过加入一些特征值如二次项之后能更好的拟合训练数据点。
y=θ0+θ1x+θ2x^2
03图像的线为了过分拟合训练数据而加入太多特征值,这会导致不能很好的进行预测,是没有必要的,叫过度拟合(overfitting)
解决overfitting的方法:
- 减少特征值得数量
手动筛选或者使用一个选择模型算法 - Regularization(正规化)
保持所有的特征,但是降低 θj的级数?
02.Cost Function
-
如果过拟合,我们可以在代价函数中增加某些项的值来降低它 的权重(我的理解是代价函数要尽可能小,如果某些项太大,必然会导致他的参数减小,进而消除权重)。
如:θ0+θ1x+θ2x2+θ3x3+θ4x4
在需要降低权重的项x3和x4之前乘上一个系数:
进而使theta3和theta4的影响变小;
-
一般化这个代价函数:
- lambda,叫做正规化参数(regularization parameter),决定着theta的膨胀程度。如果取得太大,则会使theta趋向于0.曲线变得过于平滑,甚至欠拟合。
03.Regularized Linear Regression
- 我们将修改梯度下降函数,使得theta0和其他因子分开,因为我们不想惩罚theta0.
1−αλ/m将一直小于1,所以每次迭代之后都会减少theta的值。
-
Normal Equation(一种非迭代的正规方程)
如果m<n(样本数量<特征值),则XTX是不可逆的,XTX + λ⋅L 也是不可逆的。
04.Regularized Logistic Regression
-
可以使用和规范线性回归相同的方式来规范逻辑回归。这样子就可以较好的避免过度拟合。
-
Cost Function
通过在末尾增加一项来规范化逻辑回归,末尾的累加项意味着明确排除偏差项。
-
在计算的时候可以通过更新一下两个式子:
编程作业
01.Q
假设你是一个学校校长,根据申请人两次考试成绩,来预测他们被录取的概率
02. plotdata.m
function plotData(X, y)
%按照y的不同取值对X进行分类,不同的画成不同形状显示在图中
figure; hold on;
pos = find(y==1); neg = find(y == 0);
% Plot Examples
plot(X(pos, 1), X(pos, 2), 'k+','LineWidth', 2, ...
'MarkerSize', 7);
plot(X(neg, 1), X(neg, 2), 'ko', 'MarkerFaceColor', 'y', ...
'MarkerSize', 7);
% =========================================================================
hold off;
end
03.sigmoid.m
function g = sigmoid(z)
%用S函数将数值映射在0-1之间
g = zeros(size(z));
g= 1./(1+exp(-z))
% =============================================================
end
04.costFunction.m
function [J, grad] = costFunction(theta, X, y)
%计算代价函数和梯度下降函数
% 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));
J=((-y' * log (sigmoid (Xtheta)))-(1-y)'log(1-sigmoid(Xtheta)))/m;
grad =(X'(sigmoid(X*theta)-y))./m;
% =============================================================
end
05.predict
function p = predict(theta, X)
%对给定数据进行预测,看是否达到准确率
m = size(X, 1); % Number of training examples
% You need to return the following variables correctly
p = zeros(m, 1);
p = floor(sigmoid(X * theta) .* 2)
% =========================================================================
end
06.costFunction
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 = ((-y' * log(sigmoid(X * theta))) - (1 - y)' * log(1 - sigmoid(X * theta))) / m + (sum(theta .^ 2) - theta(1) ^ 2) * lambda / (2 * m);
grad(1) = (X(:, 1)' * (sigmoid(X * theta) - y)) ./ m;
for i = 2 : size(theta)
grad(i) = (X(:, i)' * (sigmoid(X * theta) - y)) ./ m + lambda * theta(i) / m
% =============================================================
end