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. 【原创】Android 5.0 BLE低功耗蓝牙从设备应用

    如果各位觉得有用,转载+个出处. 现如今安卓的低功耗蓝牙应用十分普遍了,智能手环.手表遍地都是,基本都是利用BLE通信来交互数据.BLE基本在安卓.IOS两大终端设备上都有很好支持,所以有很好发展前景 ...

  2. 【翻译】FreeMarker——入门

    原文传送门 1. Template + data-model = output data-model是一个树状模型,通常是一个java对象. 2.data-model 入门 hashes(散列):目录 ...

  3. js正则表达式详解

    一.正则的两种写法: var re = /a/; //一般情况下都用简写的方式 性能好 var re = new RegExp('a'); //需要传入参数的时候用 二.转义字符: \n 换行 \r ...

  4. lightoj1281快速幂+数学知识

    https://vjudge.net/contest/70017#problem/E 后半部分快速幂就能求出来,要注意03lld不然001是输出错误为1.前半部分用log10() 对于给定的一个数n, ...

  5. 纯css实现翻牌特效

    大家有没有看到过网上很炫的翻牌效果,牌正面对着我们,然后点击一下,牌就被翻过来了,效果很酷炫,是不是很想知道是怎么实现的么,代码很简单,跟着小编往下走. 先给大家介绍一下翻牌的原理: 1.父容器设置设 ...

  6. python object takes no parameters

    class Song(object): def __init__(self,lyrics): self.lyrics = lyrics def sing_me_a_song(self): for li ...

  7. grep与正则表达式

    grep的作用:文本搜索工具,根据用户指定的"模式"对目标文件逐行进行匹配检查:打印匹配到的行. 模式:正则表达式编写的过滤条件. 正则表达式(REGEXP):由一类特殊字符及文本 ...

  8. NUMBER_GET_NEXT 获取编号 遇到关于按年度编号的问题

    最近给财务做了一个平台,在系统创建一些特殊类型的合同,需要生成合同编号:财务要求 合同类型+公司代码 +年+三位流水号, eg:CP6008-2017001 SNRO 子对象数据元素就是 公司代码 不 ...

  9. hdu4681 String DP(2013多校第8场)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4681 思路: 我是胡搞过的 就是先预处理出(i,j)的正向的最大连续子串和逆向最大连续子串 然后对于A ...

  10. JAVA中的Buffer

    一.属性 Buffer有四个基本属性: 1.capacity  容量,buffer能够容纳的最大元素数目,在Buffer创建时设定并不能更改 2.limit buffer中有效位置数目,不能对超过li ...