Bootstrap

【机器学习】 吴恩达机器学习作业 ex2逻辑回归 Matlab实现

内容回顾

1.1 假说表示

h ( x ) = g ( θ T X ) h(x)=g(\theta ^TX) h(x)=g(θTX)
g ( z ) = 1 1 + e − z g(z)=\frac{1}{1+e^{-z}} g(z)=1+ez1
h θ ( x ) h_\theta(x) hθ(x)的作用是,对于给定的输入变量,根据选择的参数计算输出变量=1的可能性即 h θ ( x ) = P ( y = 1 ∣ x ; θ ) h_\theta(x)=P(y=1|x;\theta) hθ(x)=P(y=1x;θ)
假说化简得到
h ( x ) = 1 1 + e − θ T x h(x)=\frac{1}{1+e^{-\theta ^Tx}} h(x)=1+eθTx1

1.2 判定边界

在这里插入图片描述
将区域分开的函数就是模型的分界线。

1.3 代价函数

J ( θ ) = 1 m ∑ i = 1 m [ − y ( i ) l o g ( h θ ( x ( i ) ) ) − ( 1 − y ( i ) ) l o g ( 1 − x ( i ) ) ) ] J(\theta )=\frac{1}{m}\sum_{i=1}^{m}[-y^{(i)}log(h_\theta (x^{(i)}))-(1-y^{(i)})log(1-x^{(i)}))] J(θ)=m1i=1m[y(i)log(hθ(x(i)))(1y(i))log(1x(i)))]
∂ J ( θ ) ∂ θ j = 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x ( i ) \frac{\partial J(\theta )}{\partial \theta _j}=\frac{1}{m}\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})x^{(i)} θjJ(θ)=m1i=1m(hθ(x(i))y(i))x(i)

1.4 高级优化

在完成计算代价函数和代价函数的偏导数项的适合可以使用梯度下降。然而还有一些更高级的算法来求解上面二者:局部优化法又称共轭梯度法(BFGS)和有限内存局部优化法(LBFGS)。算法优点:在其中任何一个算法之中都不需要手动选择学习率 α \alpha α,其有一个智能的内部循环,称为线性搜索,可以自动尝试不同的学习速率。

1.5 正则化

添加正则化项解决过拟合问题。
正则化线性回归的代价函数:
J ( θ ) = 1 2 m ∑ i = 1 m [ ( h θ ( x ( i ) ) − y ( i ) ) 2 + λ ∑ j = 1 m θ j 2 ] J(\theta )=\frac{1}{2m}\sum_{i=1}^{m}[(h_\theta (x^{(i)})-y^{(i)})^2+\lambda \sum_{j=1}^{m}\theta_j^{2}] J(θ)=2m1i=1m[(hθ(x(i))y(i))2+λj=1mθj2]
θ j : = θ j ( 1 − a λ m ) − a 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) \theta_j :=\theta_j(1-a\frac{\lambda }{m})-a\frac{1}{m}\sum_{i=1}^{m}(h_\theta (x^{(i)})-y^{(i)})x_j^{(i)} θj:=θj(1amλ)am1i=1m(hθ(x(i))y(i))xj(i)
正则化的逻辑回归模型:
J ( θ ) = 1 m ∑ i = 1 m [ − y ( i ) l o g ( h θ ( x ( i ) ) ) − ( 1 − y ( i ) ) l o g ( 1 − x ( i ) ) ) ] + λ 2 m ∑ i = 1 m θ j ( i ) J(\theta )=\frac{1}{m}\sum_{i=1}^{m}[-y^{(i)}log(h_\theta (x^{(i)}))-(1-y^{(i)})log(1-x^{(i)}))]+\frac{\lambda }{2m} \sum_{i=1}^{m}\theta _j^{(i)} J(θ)=m1i=1m[y(i)log(hθ(x(i)))(1y(i))log(1x(i)))]+2mλi=1mθj(i)

ex2 逻辑回归作业

2.1 Part 1: Plotting 绘图

数据集意义:数据集有100位学生的两次考试成绩(存入X中),拟通过逻辑回归(二分类模型),估计每个学生的录取概率(录取表明输出y为1,反之输出y为0)。
Matlab

主函数
% 提取数据
data = load(‘ex2data1.txt’);
X = data(:, [1, 2]); y = data(:, 3);
% 加载子函数plotData
plotData(X, y);
% 设置x、y轴
hold on;
% Labels and Legend
xlabel(‘Exam 1 score’)
ylabel(‘Exam 2 score’)
% 添加图例
legend(‘Admitted’, ‘Not admitted’)
hold off;

plotData.m

pos = find(y==1); neg = find(y==0);
plot(X(pos, 1),X(pos,2), 'k+', 'LineWidth', 2, 'markersize',7);
plot(X(neg, 1),X(neg,2), 'ko', 'MarkerFaceColor', 'y');

在这里插入图片描述

2.2 Part 2: Compute Cost and Gradient 计算代价和梯度

主函数
% 存入X的行/列数
[m, n] = size(X);
% 初始化X、theta
X = [ones(m, 1) X];
initial_theta = zeros(n + 1, 1);
% Compute and display initial cost and gradient
[cost, grad] = costFunction(initial_theta, X, y);
% Compute and display cost and gradient with non-zero theta
test_theta = [-24; 0.2; 0.2];
[cost, grad] = costFunction(test_theta, X, y);

computeCost.m

J = (1/m)*(-y'*log(sigmoid(X*theta))-(1-y)'*log(1-sigmoid(X*theta)));
grad =(1/m)*X'*(sigmoid(X*theta)-y);

2.3 Part 3: Optimizing using fminunc利用fminuc函数优化

该部分不需要填写代码,根据fminuc函数和plot函数绘制决策边界线。
在这里插入图片描述

2.4 Part 4: Predict and Accuracies 预测和准确度计算

主函数
prob = sigmoid([1 45 85] * theta);
p = predict(theta, X);
fprintf(‘Train Accuracy: %f\n’, mean(double(p == y)) * 100);

predict.m

G =sigmoid(X*theta);
for i= 1 :m
    if G(i)<0.5
        G(i)=0;
    else
        G(i)=1;
    end
end

ex2 正则化的逻辑回归

实际意义:手里有一批芯片两次测试及合格与否的数据,希望建立一个逻辑回归模型,根据新芯片的测试数据来预测合格与否。

3.1 Part 1: Regularized Logistic Regression正则化逻辑回归

首先数据假造,其次加载了正则化系数 λ \lambda λ的代价函数,得到下图:
在这里插入图片描述
决策边界不再是直线的时候,则需要一个复杂的多项式来表示,而随着多项式越复杂,拟合程度越高,则会达到过拟合现象,此时可以加入正则项利用 λ \lambda λ来减小 θ \theta θ参数的影响。
J ( θ ) = 1 m ∑ i = 1 m [ − y ( i ) l o g ( h θ ( x ( i ) ) ) − ( 1 − y ( i ) ) l o g ( 1 − x ( i ) ) ) ] + λ 2 m ∑ i = 1 m θ j ( i ) J(\theta )=\frac{1}{m}\sum_{i=1}^{m}[-y^{(i)}log(h_\theta (x^{(i)}))-(1-y^{(i)})log(1-x^{(i)}))]+\frac{\lambda }{2m} \sum_{i=1}^{m}\theta _j^{(i)} J(θ)=m1i=1m[y(i)log(hθ(x(i)))(1y(i))log(1x(i)))]+2mλi=1mθj(i)
在这里插入图片描述

在这里插入图片描述
costFunctionReg.m

theta_1 =[0;theta(2:end)];
reg=lambda/(2*m)*theta_1'*theta_1;
J=1/m*(-y'*log(sigmoid(X*theta))-(1-y)'*log(1-sigmoid(X*theta)))+reg;
grad=1/m*X'*(sigmoid(X*theta)-y)+lambda/m*theta_1;

在这里插入图片描述

3.2 Part 2: Regularization and Accuracies正则化和准确度

与上面逻辑回归类似,通过fminunc得到最小代价函数的theta值,将决策边界绘制到图上。
在这里插入图片描述

3.3 比较不同正则化参数

l a m b d a = 0 lambda=0 lambda=0
在这里插入图片描述
l a m b d a = 100 lambda=100 lambda=100
在这里插入图片描述
由此可以得出合适的 l a m b d a lambda lambda可以有效避免过拟合问题同时又可以保证测试集数据的拟合程度。


参考文章:
机器学习编程作业ex2(matlab/octave实现)-吴恩达coursera
Matlab吴恩达机器学习编程练习ex2:逻辑回归Logistic Regression

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;