EX2 逻辑回归练习

​ 假设你是一个大学某系的管理员,你想根据两项考试结果来确定每个申请人的录取机会。你有以前申请人的历史资料以作为逻辑回归的训练集。对于每一个训练集,你拥有每个申请人的两项考试的分数与最终录取与否的信息。

  • 绘出数据散点图
figure; hold on;
%Find indices of postive and negative examples
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','Markersize',7);

数据集运行后的图形为:

![the figure of data set](http://wx2.sinaimg.cn/mw690/7b8d2108gy1fgf64nw57nj20aw08djrn.jpg)

* 构建s形函数(Sigmoid)

之前内容中有谈到逻辑回归的假设函数为:\(h_\theta(x)=g(\theta^Tx)\)

其中s形函数的定义为:\(g(x)=\frac{1}{1+e^{-z}}\)。

% You need to return the following variables correctly
g = zeros(size(z));
g = 1./(1+exp(-z));
  • 完成代价函数costFunction.m返回代价cost和梯度gradient
![logistic regression](http://wx3.sinaimg.cn/mw690/7b8d2108gy1fgf64ocbqrj20c201gdfr.jpg)

和成本的梯度向量长度相同的$\theta_j$ 元素(对j = 0;1,...n)定义如下:

![gradient](http://wx3.sinaimg.cn/mw690/7b8d2108gy1fgf64omuwhj207901sjr9.jpg)
m = length(y); % number of training examples
J = 0;
grad = zeros(size(theta));
J = -(y'*log(sigmoid(X*theta)))-(ones(m,1)-y)'*log(ones(m,1)-sigmoid(X*theta));
J = J/m;
grad = X'*(sigmoid(X*theta)-y)/m;
  • 利用fminunc函数获取参数theta

​ 在之前的工程中,你主要利用完成梯度下降来优化线性回归的参数。首先,写下代价函数的公式并计算它的梯度,然后相应地做梯度下降进行递归运算。这里我们引入Octave/MATLAB的内嵌函数fminunc,避免程序中使用任何的循环loops。

​ 首先我们初始化试图优化的参数一个函数,当考虑到训练集和一个特定的θ,计算逻辑回归成本和梯度对θ的数据集 (X,y):

%  Set options for fminunc
options = optimset('GradObj', 'on', 'MaxIter', 400); % Run fminunc to obtain the optimal theta
% This function will return theta and the cost
[theta, cost] = ...
fminunc(@(t)(costFunction(t, X, y)), initial_theta, options);

​ 上述代码中,我们首先为调用函数fminunc定义了options(设置)。首先将"GradObj"打开,”告诉“函数返回cost与gradient。此外,设置了迭代的次数400。

此外这里贴上一个关于MATLB/octave中函数句柄@的作用:

Matlab中函数句柄@的作用及介绍

  • 评估逻辑回归

predict.m用来评估优化后参数的准确性:

m = size(X, 1); % Number of training examples
% You need to return the following variables correctly
p = zeros(m, 1); temp = sigmoid(X*theta); for i = 1:m
if temp(i) >= 0.5
p(i) = 1;
else
p(i) = 0;
end
end

正则逻辑回归

​ 此部分的练习中,您将实现规范化的逻辑回归预测制造工厂的微芯片是否通过质量保证(QA)。在QA期间,每个微晶片都经过各种测试以确保这是正常。假设你是工厂的产品经理,你有在两个不同的测试中测试一些微芯片的测试结果。从这两个测试,你想确定微晶片是否应该被接受拒绝。为了帮助您做出决策,您有一个测试结果的数据集在过去的微芯片上,你可以建立一个逻辑回归模型。

​ 同样与上个练习相仿,首先将数据绘出:

![visualize the data](http://wx1.sinaimg.cn/mw690/7b8d2108gy1fgf64pal1qj20bw08b0t2.jpg)

之前文章中提过正则下的逻辑回归的代价函数为:

![regular cost](http://wx4.sinaimg.cn/mw690/7b8d2108gy1fgf64pwnxbj20ed01wdft.jpg)

* Feature mapping

更好地适应数据的一种方法是,从每个数据中创建更多的特性点。在提供的函数mapFeature中。我们将把特征映射到所有的多项式的\(x_1\)和\(x_2\)的项都到第六次方。

![mapping feature](http://wx3.sinaimg.cn/mw690/7b8d2108gy1fgf64pm47xj206h068746.jpg)

由于这个映射,我们的两个特征向量(分数在上面) 两个QA测试被转换成一个28维的向量。这个高维度特征向量进行的回归分类器将有一个更复杂的决策边界,我们在绘制二维图时将出现非线性。

虽然功能映射使我们能够构建更具表现力的分类器,但它也更容易过度拟合。 在练习的下一部分,您将实施正则化逻辑回归以适应数据,并且还可以看到自己如何正规化可以帮助克服过拟合问题。

  • 代价函数与梯度

完成costFunctionReg.m:(注意对于\(\theta_0\)应该剔除)

![regularization of parameter](http://wx4.sinaimg.cn/mw690/7b8d2108gy1fgf64qbd6sj20bq03sjrl.jpg)
% 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(X*theta)))-(ones(m,1)-y)'*log(ones(m,1)-sigmoid(X*theta)))/m;
tempJ =0;
for i = 2:size(theta,1)
tempJ = tempJ + theta(i)^2;
end
tempJ = lambda*tempJ/(2*m);
J = J+tempJ; grad = X'*(sigmoid(X*theta)-y)/m; for i = 1:size(theta,1)
if i==1
grad(i) = grad(i);
else
grad(i) = grad(i) + theta(i)*lambda/m;
end
end
  • 利用内嵌函数(built-in function)处理fminunc
% Initialize fitting parameters
initial_theta = zeros(size(X, 2), 1); % Set regularization parameter lambda to 1 (you should vary this)
lambda = 1; % Set Options
options = optimset('GradObj', 'on', 'MaxIter', 400); % Optimize
[theta, J, exit_flag] = ...
fminunc(@(t)(costFunctionReg(t, X, y, lambda)), initial_theta, options);

根据优化后的参数,绘出边界:(\(\lambda=1\))

![decision boundary](http://wx1.sinaimg.cn/mw690/7b8d2108gy1fgf64qeftlj20bb080t97.jpg)

更改lambda的取值,边界如下:

![decision boundary](http://wx3.sinaimg.cn/mw690/7b8d2108gy1fgf64qpm4nj20br098js0.jpg)

ex2:逻辑回归及正则条件下的练习的更多相关文章

  1. 机器学习(四)—逻辑回归LR

    逻辑回归常见问题:https://www.cnblogs.com/ModifyRong/p/7739955.html 推导在笔记上,现在摘取部分要点如下: (0) LR回归是在线性回归模型的基础上,使 ...

  2. 通俗地说逻辑回归【Logistic regression】算法(二)sklearn逻辑回归实战

    前情提要: 通俗地说逻辑回归[Logistic regression]算法(一) 逻辑回归模型原理介绍 上一篇主要介绍了逻辑回归中,相对理论化的知识,这次主要是对上篇做一点点补充,以及介绍sklear ...

  3. ex2、逻辑回归

    介绍: 在本练习中,您将实现逻辑回归,并将其应用于两个不同的数据集.在开始编程练习之前,我们强烈要求建议观看视频讲座并完成相关主题的问题.要开始练习,您需要下载起始代码并将其内容解压缩到要完成练习的目 ...

  4. 逻辑回归 Logistic Regression

    逻辑回归(Logistic Regression)是广义线性回归的一种.逻辑回归是用来做分类任务的常用算法.分类任务的目标是找一个函数,把观测值匹配到相关的类和标签上.比如一个人有没有病,又因为噪声的 ...

  5. 用R做逻辑回归之汽车贷款违约模型

    数据说明 本数据是一份汽车贷款违约数据 application_id    申请者ID account_number 账户号 bad_ind            是否违约 vehicle_year  ...

  6. 逻辑回归(LR)总结复习

    摘要: 1.算法概述 2.算法推导 3.算法特性及优缺点 4.注意事项 5.实现和具体例子 6.适用场合 内容: 1.算法概述 最基本的LR分类器适合于对两分类(类0,类1)目标进行分类:这个模型以样 ...

  7. scikit-learn 逻辑回归类库使用小结

    之前在逻辑回归原理小结这篇文章中,对逻辑回归的原理做了小结.这里接着对scikit-learn中逻辑回归类库的我的使用经验做一个总结.重点讲述调参中要注意的事项. 1. 概述 在scikit-lear ...

  8. 逻辑回归LR

    逻辑回归算法相信很多人都很熟悉,也算是我比较熟悉的算法之一了,毕业论文当时的项目就是用的这个算法.这个算法可能不想随机森林.SVM.神经网络.GBDT等分类算法那么复杂那么高深的样子,可是绝对不能小看 ...

  9. 逻辑回归算法的原理及实现(LR)

    Logistic回归虽然名字叫"回归" ,但却是一种分类学习方法.使用场景大概有两个:第一用来预测,第二寻找因变量的影响因素.逻辑回归(Logistic Regression, L ...

随机推荐

  1. dva框架使用mock.js模拟数据 + fetch请求数据

    what DVA? Dva是基于Redux做了一层封装,对于React的state管理,有很多方案,我选择了轻量.简单的Dva. dva 可以很方便就使用mock.js进行数据的模拟. 只需要三步,即 ...

  2. 阿里云CentOS7.2服务器的安装

    第一步:下载服务器系统ISO安装文件 我使用的是阿里云的镜像:因为阿里云的服务在国内相对比较成熟 服务器镜像下载如下:http://mirrors.aliyun.com/centos/7/isos/x ...

  3. Eclipse 如何添加Window Builder插件?

    http://www.eclipse.org/windowbuilder/download.php 找到对应版本的window builder 如果不知道版本的话,可以在你的Eclipse-help- ...

  4. 优化UI控件 【译】

    翻译自:https://unity3d.com/cn/learn/tutorials/topics/best-practices/optimizing-ui-controls?playlist=300 ...

  5. bootstrap+masonry.js写瀑布流

    最近在用bootstrap写一个网站,其中有个图文展示的页面要用到瀑布流的效果.因为项目要求,项目要以bootstrap为基准,不准私自添加内联样式.内部样式,所以,自己写瀑布流就不行了,所以,根据要 ...

  6. luogu 1521-求逆序对

    题意: 逆序对指在一个序列中ai>aj && i < j,也就是一前一后两个数,当大的在前面的时候即算一对. 题目求在一个由1-n组成的序列中逆序对为k的序列的个数. 出题 ...

  7. myeclipse10.7安装git插件

    如果想把github上的一些开源项目导入到myeclipse中,一种方法是从github网站上将开源项目下载下来,另一种是使用myeclipse的egit插件直接从github网站上down下来,下面 ...

  8. Ubuntu14.04安装samba

    Ubuntu14.04安装samba 按照惯例,首先介绍Samba.Samba是在Linux系统上实现的SMB(Server Messages Block,信息服务块)协议的一款免费软件.它实现在局域 ...

  9. Linux 下按时间顺序批量删除文件

    ls -lrt| awk '{print $9}'| head -n 10 | xargs rm -rf 1.文件按时间排序: 2.获取文件名字: 3.取前10个文件 4.删除文件

  10. html学习笔记 - table表格

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...