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 ...
随机推荐
- PHP填补数字前后的0
PHP数字填补0 经常会遇到这样的问题: 自然数字是0,1,2,3...而我们需要的却是满足多少多少位数的数字,如:001,002. 在ID,编号,学号中我们会经常用到补全前面或者后面的空位(一般为前 ...
- 关于vs code的个人配置
vs code官方下载地址 : https://code.visualstudio.com/Download 下载好的vs code相当是一款纯文本编辑器,接下来开始进行对其配置: 页面设 ...
- Linux学习之竿头直上
今天第二讲昨天我们讲解了10基础命令,今早上我继续为大家讲解10个linux常见命令 今天主要讲解与网络相关的命令和软件安装的命名 NetworkManager 与rpm 在windows中我们查看网 ...
- TP5学习基础二:目录结构、URL路由、数据操作
一.安装1.使用git或者composer(composer update)进行实时更新,区别在于git不会清空核心框架目录而composer会清空.2.使用官网打包好的TP压缩包(解压即可用)-&g ...
- H5 canvas圆形的时钟
今天用H5中的canvas标签做一个时钟,H5中有很多好用的新增标签,真的很不错. 1.canvas标签介绍 <canvas> 标签定义图形,比如图表和其他图像,你必须使用脚本来绘制图形. ...
- Python学习之路-Day2-Python基础2
Python学习之路第二天 学习内容: 1.模块初识 2.pyc是什么 3.python数据类型 4.数据运算 5.bytes/str之别 6.列表 7.元组 8.字典 9.字符串常用操作 1.模块初 ...
- Oracle与mysql的字段类型整理
Oralce的字段类型整理如下: Mysql的字段类型整理如下: 最后面一栏是对应JAVA的基本类型.希望对初学者有用,初学者在学习JAVA的时候,不知道怎么把JAVA的对象指向到ORALCE或者MY ...
- 关于java和c++中的i++
看到一个题目,大概是i=i++之类. 乍一看很简单,都知道i++的先参与计算再自增, 所以i不变. 但是仔细一想, 如果i不变, 那么在赋值之后, 自增的i, 增加的是谁呢? 逻辑顺序是怎样的呢? / ...
- [刷题]算法竞赛入门经典(第2版) 6-1/UVa673 6-2/UVa712 6-3/UVa536
这三题比较简单,只放代码了. 题目:6-1 UVa673 - Parentheses Balance //UVa673 - Parentheses Balance //Accepted 0.000s ...
- dubbo 入门
1 介绍 1.1 背景 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进. 1.2 说明 DUBB ...