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. shell中的Mysql查询

    1 #!/bin/bash 2 #查询 3 echo -e  4 for i in `cat id.txt` 5 do 6 A=`mysql -h10 -uw -p2012 -Ne "sel ...

  2. 简单XSS跨站脚本攻击实验

    原理:恶意Web用户将代码植入到提供给其它用户使用的页面中,如果程序没有经过过滤或者过滤敏感字符不严密就直接输出或者写入数据库.合法用户在访问这些页面的时候,程序将数据库里面的信息输出,这些恶意代码就 ...

  3. Pangolin学习

    0.1. 资料 0.2. 使用说明 0.3. HelloPangolin 0.4. Plot data with ros 0.1. 资料 泡泡机器人 github example opengl中摄像机 ...

  4. mysql语句insert后取到返回的主键id

    Q:   有时候做类似接口里的数据订正,需要取到insert语句返回的id主键,在程序里通过对象返回好取,但是写sql怎么取到呢? A:  用select @@identity得到上一次插入记录时自动 ...

  5. [刷题]算法竞赛入门经典(第2版) 5-5/UVa10391 - Compound Words

    题意:问在一个词典里,那些单词是复合词,即哪些单词是由两个单词拼出来的. 渣渣代码:(Accepted, 30ms) //UVa10391 - Compound Words #include<i ...

  6. 蚂蚁金服新一代数据可视化引擎 G2

    新公司已经呆了一个多月,目前着手一个数据可视化的项目,数据可视化肯定要用到图形库如D3.Highcharts.ECharts.Chart等,经决定我的这个项目用阿里旗下蚂蚁金服所开发的G2图表库. 官 ...

  7. jQuery手风琴菜单!!!!

    jQuery手风琴菜单 第一次发博客也不知道说点什么好,以前敲得一个手风琴菜单刚刚整理出来了,就来分享个大家 手风琴的排版 排版完事了,接下来就写样式吧,把自己喜欢的颜色或者是图片添加进来,就会变成你 ...

  8. 搭建struct环境

    昨天学习了struts,发现struts并不是struts2同一框架的升级,完全是属于两个框架.struts2是在freework的基础上进行封装的. 1.struts的环境搭载   (1)创建web ...

  9. Java 程序员快速上手 Kotlin 11 招

    欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 作者:霍丙乾 近经常会收到一些 "用 Kotlin 怎么写" 的问题,作为有经验的程序员, ...

  10. 关于jQuery插件imgAreaSelect基础讲解

    关于ImgAreaSelect,  是一jQuery插件,它支持用户通过鼠标拖曳选择图片的一部分,如图片拖曳.图片编辑等~~来具体看一下 1.先下载imgAreaSelect插件 下载地址: 英文:h ...