ex2:逻辑回归及正则条件下的练习
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);
数据集运行后的图形为:
* 构建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
和成本的梯度向量长度相同的$\theta_j$ 元素(对j = 0;1,...n)定义如下:
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期间,每个微晶片都经过各种测试以确保这是正常。假设你是工厂的产品经理,你有在两个不同的测试中测试一些微芯片的测试结果。从这两个测试,你想确定微晶片是否应该被接受拒绝。为了帮助您做出决策,您有一个测试结果的数据集在过去的微芯片上,你可以建立一个逻辑回归模型。
同样与上个练习相仿,首先将数据绘出:
之前文章中提过正则下的逻辑回归的代价函数为:
* Feature mapping
更好地适应数据的一种方法是,从每个数据中创建更多的特性点。在提供的函数mapFeature中。我们将把特征映射到所有的多项式的\(x_1\)和\(x_2\)的项都到第六次方。
由于这个映射,我们的两个特征向量(分数在上面) 两个QA测试被转换成一个28维的向量。这个高维度特征向量进行的回归分类器将有一个更复杂的决策边界,我们在绘制二维图时将出现非线性。
虽然功能映射使我们能够构建更具表现力的分类器,但它也更容易过度拟合。 在练习的下一部分,您将实施正则化逻辑回归以适应数据,并且还可以看到自己如何正规化可以帮助克服过拟合问题。
- 代价函数与梯度
完成costFunctionReg.m:(注意对于\(\theta_0\)应该剔除)
% 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\))
更改lambda的取值,边界如下:

ex2:逻辑回归及正则条件下的练习的更多相关文章
- 机器学习(四)—逻辑回归LR
逻辑回归常见问题:https://www.cnblogs.com/ModifyRong/p/7739955.html 推导在笔记上,现在摘取部分要点如下: (0) LR回归是在线性回归模型的基础上,使 ...
- 通俗地说逻辑回归【Logistic regression】算法(二)sklearn逻辑回归实战
前情提要: 通俗地说逻辑回归[Logistic regression]算法(一) 逻辑回归模型原理介绍 上一篇主要介绍了逻辑回归中,相对理论化的知识,这次主要是对上篇做一点点补充,以及介绍sklear ...
- ex2、逻辑回归
介绍: 在本练习中,您将实现逻辑回归,并将其应用于两个不同的数据集.在开始编程练习之前,我们强烈要求建议观看视频讲座并完成相关主题的问题.要开始练习,您需要下载起始代码并将其内容解压缩到要完成练习的目 ...
- 逻辑回归 Logistic Regression
逻辑回归(Logistic Regression)是广义线性回归的一种.逻辑回归是用来做分类任务的常用算法.分类任务的目标是找一个函数,把观测值匹配到相关的类和标签上.比如一个人有没有病,又因为噪声的 ...
- 用R做逻辑回归之汽车贷款违约模型
数据说明 本数据是一份汽车贷款违约数据 application_id 申请者ID account_number 账户号 bad_ind 是否违约 vehicle_year ...
- 逻辑回归(LR)总结复习
摘要: 1.算法概述 2.算法推导 3.算法特性及优缺点 4.注意事项 5.实现和具体例子 6.适用场合 内容: 1.算法概述 最基本的LR分类器适合于对两分类(类0,类1)目标进行分类:这个模型以样 ...
- scikit-learn 逻辑回归类库使用小结
之前在逻辑回归原理小结这篇文章中,对逻辑回归的原理做了小结.这里接着对scikit-learn中逻辑回归类库的我的使用经验做一个总结.重点讲述调参中要注意的事项. 1. 概述 在scikit-lear ...
- 逻辑回归LR
逻辑回归算法相信很多人都很熟悉,也算是我比较熟悉的算法之一了,毕业论文当时的项目就是用的这个算法.这个算法可能不想随机森林.SVM.神经网络.GBDT等分类算法那么复杂那么高深的样子,可是绝对不能小看 ...
- 逻辑回归算法的原理及实现(LR)
Logistic回归虽然名字叫"回归" ,但却是一种分类学习方法.使用场景大概有两个:第一用来预测,第二寻找因变量的影响因素.逻辑回归(Logistic Regression, L ...
随机推荐
- 【2017-05-02】winform弹出警告框是否进行增删改操作、记事本制作、对话框控件和输出输入流
一.winform弹出警告框是否进行增删改操作 第一个参数是弹出窗体显示的内容,第二个参数是标题,第三个参数是该弹窗包含确定和取消按钮. 返回的是一个枚举类接收一下. 再进行判断,如果点的是确定按钮, ...
- poj1990树状数组
Every year, Farmer John's N (1 <= N <= 20,000) cows attend "MooFest",a social gather ...
- 详解MySQL存储过程的“异常处理”
阅读目录:存储过程的异常处理 定义异常处理 单一异常处理程序 continue exit 多个异常处理程序 关于错误编号和SQLSTATE码 使用3个处理程序 忽略某一异常的处理 异常处理的命名 异常 ...
- springmvc 方法参数自定义的解析
1.实现HandlerMethodArgumentResolver接口: 2.在配置文件中添加配置<mvc:argument-resolvers> <bean class=&qu ...
- R语言分析(一)-----基本语法
一, R语言所处理的工作层: 解释一下: 最下面的一层为数据源,往上是数据仓库层,往上是数据探索层,包括统计分析,统计查询,还有就是报告 再往上的三层,分别是数据挖掘,数据展现和数据决策. 由上图 ...
- POJ1850-Code 递推数学
题目链接:http://poj.org/problem?id=1850 题目大意: 按照字典序对升序排列组成的字母进行编号,给出一个长度不超过10的串,求出它的编号是多少?如果无法进行编号则输出0. ...
- NSA永恒之蓝病毒,如何通过360工具修复?
简介: NSA武器库的公开被称为是网络世界"核弹危机",其中有十款影响Windows个人用户的黑客工具,包括永恒之蓝.永恒王者.永恒浪漫.永恒协作.翡翠纤维.古怪地鼠.爱斯基摩卷. ...
- Java线程池总结
前一篇文章Java中实现多线程关键词整理中介绍了Java中创建多线程的各种办法,里面提到了线程池,这里对Java中的线程池做一个总结. 1. 关于ThreadPoolExecutor 为了更好地控制多 ...
- Springboot基础篇
Springboot可以说是当前最火的java框架了,非常适合于"微服务"思路的开发,大幅缩短软件开发周期. 概念 过去Spring充满了配置bean的xml文件,随着spring ...
- DevCloud让代码检查更科学
代码检查是软件开发工作中不可或缺的一部分,众所周知,规范化的编码是一个优质项目的保证.华为软件开发云(DevCloud)便提供了专业科学的自动化代码检查工作. 一.华为软件开发云(DevCloud)目 ...