作为英语课程,读中文参考资料的确有助于理解,但是出于对以后更长久的学习优势考虑,笔记中我会尽量采用英文来表述,这样有助于熟悉专有名词以及常见语法结构,对于无中文翻译的资料阅读大有裨益。
Week3 Logistic Regression and Regularzation
一、Logistic Regression
-
Classification分类问题
-
Logistic Regression逻辑回归模型
-
h
θ
(
x
)
=
g
(
θ
T
X
)
h_\theta(x)=g(\theta_TX)
hθ(x)=g(θTX)
- 对于给定的输入变量X, θ \theta θ,计算输出变量=1的可能性
- h θ ( x ) = P ( y = 1 ∣ x ; θ ) h_\theta(x)=P(y=1|x;\theta) hθ(x)=P(y=1∣x;θ)
- X:Feature Vector
- g:Logistic function/Sigmoid function
- g ( z ) = 1 1 + e − z g(z)=\frac{1}{1+e^{-z}} g(z)=1+e−z1
-
-
h
θ
(
x
)
=
g
(
θ
T
X
)
h_\theta(x)=g(\theta_TX)
hθ(x)=g(θTX)
-
Decision Boundary决策边界
-
根据逻辑回归模型函数可归纳得到
θ T x > = 0 , y = 1 \theta^Tx>=0,y=1 θTx>=0,y=1
θ T < 0 , y = 0 \theta^T<0,y=0 θT<0,y=0
-
-
如何拟合Logistic Regression的参数 θ \theta θ——Cost Function
- We know in Linear Regression
- j ( θ ) = 1 m ∑ i = 1 m 1 2 ( h θ ( x i ) − y i ) 2 j(\theta)=\frac{1}{m}\sum_{i=1}^{m}\frac{1}{2}(h_\theta(x^i)-y^i)^2 j(θ)=m1∑i=1m21(hθ(xi)−yi)2
- In Logistic Regression
-
J
(
θ
)
=
1
m
∑
i
+
1
m
C
o
s
t
(
h
θ
(
x
i
)
−
y
i
)
J(\theta)=\frac{1}{m}\sum_{i+1}^{m}Cost(h_\theta(x^i)-y^i)
J(θ)=m1∑i+1mCost(hθ(xi)−yi)
- C o s t ( h θ , y ) = − l o g ( h θ ( x ) ) , y = 1 Cost(h_\theta,y)=-log(h_\theta(x)) ,y=1 Cost(hθ,y)=−log(hθ(x)),y=1(成本函数)
- C o s t ( h θ ( x ) , y ) = − l o g ( 1 − h θ ( x ) ) , y = 0 Cost(h_\theta(x),y)=-log(1-h_\theta(x)) ,y=0 Cost(hθ(x),y)=−log(1−hθ(x)),y=0
- C o s t ( h θ , y ) = − y l o g ( h ) − ( 1 − y ) l o g ( 1 − h ) Cost(h_\theta,y)=-ylog(h)-(1-y)log(1-h) Cost(hθ,y)=−ylog(h)−(1−y)log(1−h)
- 带入J( θ \theta θ)后得到的J可以证明是一个凸函数,化简后代价函数形式上与Linear Logistic的代价函数一致
- J ( θ ) = 1 m ∑ i = 1 m [ h θ − y ] x j J(\theta)=\frac{1}{m}\sum_{i=1}^{m}[h_\theta-y]x_j J(θ)=m1∑i=1m[hθ−y]xj
-
- Meaning: when y=0 h=0,then Cost=0;when y=0,h=1,then cost-> + ∞ +\infty +∞
-
J
(
θ
)
=
1
m
∑
i
+
1
m
C
o
s
t
(
h
θ
(
x
i
)
−
y
i
)
J(\theta)=\frac{1}{m}\sum_{i+1}^{m}Cost(h_\theta(x^i)-y^i)
J(θ)=m1∑i+1mCost(hθ(xi)−yi)
- Octave中的高级函数
costFunction
自动寻找当前参数的最优高级算法,返回
- We know in Linear Regression
-
Multiclass Classification——one-vs-all 一对多,多类别分类
-
将数据分成1和很多类,仍然是二元分类
h θ ( x ) = p ( y = i ∣ x ; θ ) ; i = 1 , 2... k h_\theta(x)=p(y=i|x;\theta);i=1,2...k hθ(x)=p(y=i∣x;θ);i=1,2...k
-
二、Regularization正则化
- 过拟合问题——与training set高度吻合,但是失去预测意义
- 解决方案
- 手动丢弃或者模型选择
- 正则化,保留所有Features,但是减少参数大小
- 以多项式拟合为例,过拟合是由高次项导致的,让高次项系数趋于0是解决思想
- 对J(
θ
\theta
θ)引入Regularization Parameter(正则化参数)(不对
θ
0
\theta_0
θ0进行修正(or called “惩罚”)
- J ( θ ) = 1 2 m [ ∑ i = 1 m ( h θ ( x i ) − y i ) 2 + λ ∑ j = 1 n θ j 2 ] J(\theta)=\frac{1}{2m}[\sum_{i=1}^{m}(h_\theta(x^i)-y^i)^2+\lambda\sum_{j=1}^n\theta_j^2] J(θ)=2m1[∑i=1m(hθ(xi)−yi)2+λ∑j=1nθj2]
- 原理解释:令 λ \lambda λ很大,则为了Cost Function尽量小,所有 θ i ( i ! = 0 ) \theta_i(i!=0) θi(i!=0)都会减小;但也不能太大,不然所有参数趋于0
- Regularized Linear Regression正则化的线性回归
- θ 0 : = θ 0 − α [ 1 m ∑ i = 1 m ( h θ − y i ) x 0 i ] \theta_0:=\theta_0-\alpha[\frac{1}{m}\sum_{i=1}^m(h_\theta-y^i)x_0^i] θ0:=θ0−α[m1∑i=1m(hθ−yi)x0i]
- θ j : = θ j − α [ 1 m ∑ i = 1 m ( h θ − y i ) x j i + λ m θ j ] = θ j ( 1 − a λ m ) − a 1 m ∑ i = 1 m ( h θ − y i ) x j \theta_j:=\theta_j-\alpha[\frac{1}{m}\sum_{i=1}^m(h_\theta-y^i)x_j^i+\frac{\lambda}{m}\theta_j]=\theta_j(1-a\frac{\lambda}{m})-a\frac{1}{m}\sum_{i=1}^{m}(h_\theta-y^i)x_j θj:=θj−α[m1∑i=1m(hθ−yi)xji+mλθj]=θj(1−amλ)−am1∑i=1m(hθ−yi)xj
- Regularized Logistic Regression正则化的逻辑回归
- J ( θ ) = 1 m ∑ i = 1 m [ − y i l o g ( h θ ) − ( 1 − y i ) l o g ( 1 − h θ ) ] + λ 2 m ∑ j = 1 n θ j 2 J(\theta)=\frac{1}{m}\sum_{i=1}^{m}[-y^ilog(h_\theta)-(1-y^i)log(1-h_\theta)]+\frac{\lambda}{2m}\sum_{j=1}^n\theta_j^2 J(θ)=m1∑i=1m[−yilog(hθ)−(1−yi)log(1−hθ)]+2mλ∑j=1nθj2
- 梯度下降函数与Linear Regression形式上一致
三、Week3 编程练习
-
Logistic Regression
-
Visuralizing the data
Function
plot(x,y,color,style...)
plot
函数提供的可选线属性如下表可选全局属性如下
LineWidth——指定线宽
MarkerEdgeColor——指定标识符的边缘颜色
MarkerFaceColor——指定标识符填充颜色
MarkerSize——指定标识符的大小
-
Find函数
- Find(X)找到X为真的结果,元素顺序按列排序
- [row,col] = find(X>0 & X<10,3),找到矩阵中满足条件得前三个元素,输出[row,col]坐标
-
size
-
一个返回值返回行、列,向量返回
-
size(A,n)
如果在size函数的输入参数中再添加一项n,并用1或2为n赋值,则 size将返回矩阵的行数或列数。其中r=size(A,1)该语句返回的是矩阵A的行数, c=size(A,2) 该语句返回的是矩阵A的列数
-
-
ones(a,b)
- 输出一个a*b的全1矩阵
-
fminunc Matlab自带的一个高级函数,可以找到最好的 θ \theta θ
-
contour
- 绘制等高线函数
-
Legend
- 给画出的图像放上图例
-
Linspace(1,100,2)
- 产生等差数列
-
matlab逻辑判断为真即可赋值=1
-
-
特别注意,在我编写代码的过程中对于矩阵的转置几次没有仔细查看,导致计算结果错误,这种错有时不会报错,但是你本想获得一个标量,会得到一个矢量;本想获得矢量,变成了标量,这是我对自己很大的一个收获
-
参考代码
-
写出S函数
g=1./(1+exp(-z));
-
求代价函数和相应的 θ \theta θ导数
J=(-y'*log(sigmoid(X*theta))-(1-y)'*log(1-sigmoid(X*theta)))/m; grad = (sigmoid(X*theta)-y)'*X/m;
-
对模拟数值,求出大于一的预测量
p = sigmoid(X*theta)>=0.5;
-
求正则化后的逻辑回归代价函数以及相应的 θ \theta θ导数
-
-
J=(-y'*log(sigmoid(X*theta))-(1-y)'*log(1-sigmoid(X*theta)))/m+lambda*sum(theta(2:size(theta),:).^2)/(2*m);
grad(2:n)= (sigmoid(X*theta)-y)'*X(:,2:n)/m+lambda*theta(2:n)'/m;
grad(1)= (sigmoid(X*theta)-y)'*X(:,1)/m;
```
