正文の部分

-----------------------------------------------------------------------------------------------

本次作业主题是逻辑回归, 问题有二:

#1. 根据往期学生的期中和期末两次考试,和以往的录取率. 来决定当前已知成绩的学生是否录取.

#2. 根据以往两种测试ic方法的结果以及ic的良率,来决定当前已知两种测试结果的ic是否通过QA.

问题1

-----------------------------------------------------------------------------------------------

#1. Warmup exercise

在sigmoid.m简单一句,注意点除就好了,方便处理矩阵.

g = 1./(1+exp(-z));

逻辑回归方程在分类问题中应用广泛,用sigmoid函数作为阈值函数. input越大, sigmoid的output越接近1,可能性越高.

sigmoid函数方程 frac{1}{1+e^-x}

sigmoid函数图像

逻辑回归的假设函数相比线性回归,只是在外面多包了一层sigmoid函数.

h_	heta(x) = g(	heta^Tx) = frac{1}{(1+e^{-	heta^Tx})}

#2. cost function and gradient

代价函数

J(	heta) = 1/m*sum_{i=1}^{m}{[-y^{(i)} log(h_	heta(x^{(i)}))-(1-y^{(i)})log(1-h_	heta(x^{(i)}))]}

拆解起来很简单, 先算假设函数 h_	heta(x) ,然后构造矩阵把所有都加起来.

还是老办法 X*	heta , m*n阶矩阵乘以 n*1阶矩阵, 等于 m*1阶矩阵

H = sigmoid(X*theta);

给这个问题做一个summary,无论是多少个特征,都遵循此方法.

H_{n*1}=sigmoid(X_{m*n}* 	heta_{n*1}) Rightarrow sigmoidegin{bmatrix} 1 & x_1^{(1)} & x_2^{(1)} & x_3^{(1)} &... \ 1 & x_1^{(2)} & x_2^{(2)} & x_3^{(2)} &... \ 1 & x_1^{(3)} & x_2^{(3)} & x_3^{(3)} &... \ 1 & x_1^{(4)} & x_2^{(4)} & x_3^{(4)} &... end{bmatrix} * egin{bmatrix} 	heta_0 \ 	heta_1 \ 	heta_2 \ 	heta_3 \ ...end{bmatrix}

=sigmoid (egin{bmatrix} vec{x^{(1)}} \ vec{x^{(2)}} \ vec{x^{(3)}} \ vec{x^{(4)}} \ ... end{bmatrix}_{m*n} * vec{	heta}_{n*1})= sigmoidegin{bmatrix} vec{x^{(1)}}*vec{	heta} \ vec{x^{(2)}}*vec{	heta} \ vec{x^{(3)}}*vec{	heta} \ vec{x^{(4)}}*vec{	heta} \ ... end{bmatrix} _{m*1} = sigmoid egin{bmatrix} h_	heta(vec{x^{(1)}}) \ h_	heta(vec{x^{(2)}}) \ h_	heta(vec{x^{(3)}}) \ h_	heta(vec{x^{(4)}}) \ ... end{bmatrix}_{m*1}

由此得到m*1阶的假设函数的输出,第一个元素是第一个输入的假设输出,第二个元素是第二个输入的假设输出,依此往下类推.

cost和grad的代码如下,不多赘述.

J = 1/m * ( (-y)*log(H) - (1-y)*log(1-H) );

grad = 1/m * X*(H - y);

#3. evaluating logistic regression

predict.m里面有一个蛮trick的地方,比如p是一个有许多0到1之间概率的列向量

比如p=[0.2 0.33 0.5 0.99 ...]. 现在我们要把概率大于0.5都变成1,代表录取.概率小于0.5的都变成0,代表拒绝.

稍微想了下,用一句命令可以把整个矩阵都处理一下,用round()对整个矩阵取整.

H = sigmoid(X*theta);

p = round(H);

问题2:

-----------------------------------------------------------------------------------------------

#1. cost function and gradient

代价函数如图. 题目告知不要regularized 	heta_0

J(	heta) = 1/m*sum_{i=1}^{m}{[-y^{(i)}log(h_	heta(x^{(i)})-(1-y^{(i)})log(1-h_	heta(x^{(i)}))]} + lambda/2m*sum_{j=1}^{n}	heta_j^2

其中 sum	heta_j^2 =	heta^T*	heta 规避掉 	heta_0 即可. 代码如下:

J = 1/m*( (-y)*log(H) - (1-y)*log(1-H) ) + lambda/(2*m)*(theta(2:n,:))*theta(2:n,:);

梯度计算也是分了j=0 和 j>0两个case

partial{J(	heta)}/partial{	heta_0} = 1/m*sum_{i = 1}^{j}(h_	heta(x^{(i)})-y^{(i)})x_j^{(i)}   j = 0

partial{J(	heta)}/partial{	heta_0} = 1/m*sum_{i = 1}^{j}(h_	heta(x^{(i)})-y^{(i)})x_j^{(i)} + lambda/m*	heta_  j geq 1

最初的想法

grad(1) = 1/m *(H - y)*X(:,1);
grad(2:n,:) = 1/m * X(:,2:n)*(H - y) + lambda/m * theta(2:n,:);

后面想了下用一行代码实现,构建一个矩阵[0;lambda/m*theta(2:n,:)] 相当于grad(0) 后面正则项 + 0.

grad = 1/m *X*(H-y) + [0;lambda/m*theta(2:n,:)];

结束语

-----------------------------------------------------------------------------------------------

#1.逻辑回归其实有蛮多难点的

过拟合,在原有特征的基础上混合原有特征x1*x2 x1^2, 当样本数<特征量的时候怎么办

学得还是糊糊的

#2. 有任何问题随时评论我diss我! 姆该!


推荐阅读:
相关文章