IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> Programming Exercise 2: Logistic Regression -> 正文阅读

[数据结构与算法]Programming Exercise 2: Logistic Regression

题目要求及材料下载链接:Coursera下载地址

没用的信息略过,有用的翻译一下。

image.png

本练习中包含的文件:

  • ex2.m - Octave/MATLAB脚本
  • ex2_reg.m - Octave/MATLAB脚本,用于练习
  • ex2data1.txt -练习前半部分的训练集
  • ex2data2.txt -练习后半部分的训练集
  • submit.m -交作业脚本
  • mapFeature.m -函数生成多项式特征
  • plotDecisionBoundary.m -绘制决策边界
  • plotData. m -绘制2D分类数据
  • sigmoid.m - Sigmoid函数
  • costFunction.m -逻辑回归代价函数
  • predict.m - 逻辑回归预测函数
  • costFunctionReg.m -逻辑回归代价函数正则化

其中

  • 表示您需要完成的文件

1 Logistic Regression

在这里插入图片描述
在练习的这一部分,你将建立一个逻辑回归模型来预测一个学生是否被大学录取。

在这里插入图片描述
假设你是一所大学的管理员,你想根据两次考试的成绩来预测每个申请人的录取机会。你现在有以前申请者的数据作为逻辑回归的训练集。对于每个样例,你都有申请人在两次考试中的分数和录取结果。你的任务是建立一个分类模型,根据这两次考试的分数来估计申请人的录取概率。

1.1 Visualizing the data

在这里插入图片描述

在学习算法之前,最好将数据可视化。在ex2.m的第一部分中过调用函数plotData将加载的数据生成二维图像。现在,完成plotData.m的代码,显示结果如图1。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

为了让你练习所以让你完成plotData.m的代码。但是这是选做题,你可以不做,下边直接给你答案了,你可以直接复制粘贴。

% Find Indices of Positive and Negative Examples
pos = find(y==1); neg = find(y == 0);
% Plot Examples
plot(X(pos, 1), X(pos, 2), 'k+','LineWidth', 2, ...
'MarkerSize', 7);
plot(X(neg, 1), X(neg, 2), 'ko', 'MarkerFaceColor', 'y', ...
'MarkerSize', 7);

直接复制进去长这样:
在这里插入图片描述
改完之后进入函数所在的目录运行octave,执行ex2函数就会看到你的图像跟图1一样。
在这里插入图片描述

1.2 实施

1.2.1 Warmup exercise: sigmoid function

在这里插入图片描述

在开始代价函数之前,回忆一下逻辑回归假设的定义如下:

h θ ( x ) = g ( θ T x ) , h_{\theta}(x)=g\left(\theta^{T} x\right), hθ?(x)=g(θTx),

函数g是S型曲线函数,定义如下:

g ( z ) = 1 1 + e ? z g(z)=\frac{1}{1+e^{-z}} g(z)=1+e?z1?

在这里插入图片描述

在这里插入图片描述
第一步是sigmoid.m中实现这个函数,以便它可以被程序的其余部分调用。完成后,尝试通过在Otave里调用sigmoid(x)来测试一些值。对于x,如果是很大的正数,那sigmoid应接近1;如果是很大的负数,那sigmoid应接近0。sigmoid(0)应该是0.5。您的代码还要能处理向量和矩阵。对于矩阵执行sigmoid函数时候应该对每个元素都进行操作。
做完这些提交。去Coursera上找令牌。不知道怎么搞的看上一个作业Programming Exercise 1: Linear Regression的1.1。

答案是g = 1 ./ ( 1 + exp( -1 * z ));

来分析一下,是让你完成sigmoid这个曲线函数,在上边提到了这个函数就是 g ( z ) = 1 1 + e ? z g(z)=\frac{1}{1+e^{-z}} g(z)=1+e?z1?,现在意思是给你输入一个x,让你求 g ( x ) = 1 1 + e ? x g(x)=\frac{1}{1+e^{-x}} g(x)=1+e?x1?,这个x可能是数,可能是矩阵,可能是向量。
在这里插入图片描述
来看看原题,给出这个函数sigmoid,返回值是g,函数体第一句是先把这个返回值赋值,给他一个零矩阵,矩阵维度和z一样。也就是说如果z是矩阵那返回值g也是矩阵,如果z是数那返回值g也是个数。那你直接把z带入到上边的函数式子里就可以了啊。

g = 1 ./ ( 1 + exp( -1 * z ));

  • ? 1 ? z -1 * z ?1?z,矩阵和数相乘用*,数和数相乘也用*
  • e x p ( ) exp() exp(),求 e n e^n en就是exp(n)
  • 1 + e x p ( ? 1 ? z ) 1+exp( -1 * z ) 1+exp(?1?z),矩阵和数相加直接用+就可以,数和数相加也是+
  • 1. / ( 1 + e x p ( ? 1 ? z ) ) 1 ./ ( 1 + exp( -1 * z )) 1./(1+exp(?1?z)),矩阵和数字相除必须用./,所以这里要注意!!!
  • 最后加上;是为了让运行过程不显示g的结果。在octave中如果加上分号就不显示运行结果;如果不加分号,执行一步就会显示一步的结果。
  • 如果你这些都不记得了,那我建议你回忆一下:Octave简明教程

写完之后文件如下。

在这里插入图片描述

用octave运行一下,确实和题干说的一样:

对于x,如果是很大的正数,那sigmoid应接近1;如果是很大的负数,那sigmoid应接近0。sigmoid(0)应该是0.5。

在这里插入图片描述
提交一下。

不知道怎么搞的看上一个作业Programming Exercise 1: Linear Regression的1.1。

在这里插入图片描述
显示我五分全得到了。OK完工。

1.2.2 代价函数和梯度下降

在这里插入图片描述
在这里插入图片描述

现在实现一下逻辑回归的代价函数和梯度下降算法。在costFunction.m中完成代码。
代价函数:
J ( θ ) = ? 1 m [ ∑ i = 1 m y ( i ) log ? h θ ( x ( i ) ) + ( 1 ? y ( i ) ) log ? ( 1 ? h θ ( x ( i ) ) ) ] \begin{aligned} J(\theta) =-\frac{1}{m}\left[\sum_{i=1}^{m} y^{(i)} \log h_{\theta}\left(x^{(i)}\right)+\left(1-y^{(i)}\right) \log \left(1-h_{\theta}\left(x^{(i)}\right)\right)\right] \end{aligned} J(θ)=?m1?[i=1m?y(i)loghθ?(x(i))+(1?y(i))log(1?hθ?(x(i)))]?
梯度下降:
? J ( θ ) ? θ j = 1 m ∑ i = 1 m ( h θ ( x ( i ) ) ? y ( i ) ) x j ( i ) \frac{\partial J(\theta)}{\partial \theta_{j}}=\frac{1}{m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right) x_{j}^{(i)} ?θj??J(θ)?=m1?i=1m?(hθ?(x(i))?y(i))xj(i)?

答案是

hx = sigmoid(X*theta);
add = y .* log(hx) + (1 - y) .* log(1 - hx);
J = -1 / m .* sum(add);

for j = 1 : n = length(theta)
  grad(j) = 1 / m .* sum((hx - y) .* X(:,j:j));
endfor

还是先分析一下给出的这个函数:
在这里插入图片描述
让你写costFunction函数,有两个返回值J和grad。J就是代价函数,grad就是梯度下降求偏导。接下来按照公式来就可以了。

hx = sigmoid(X*theta);
add = y .* log(hx) + (1 - y) .* log(1 - hx);
J = -1 / m .* sum(add);
  • hx就是 h ( x ) h(x) h(x),但是你要想清楚这里是逻辑回归!!!记住他和线性回归的公式不一样!!!刚好用上前一步的sigmoid函数。
    (😢我因为用错了公式浪费了几十分钟。怎么检查代码都没错,但是提交不得分。最后发现我 h ( x ) h(x) h(x)用的是线性回归的公式……
  • add就是加数,求和公式里边这一块 y ( i ) log ? h θ ( x ( i ) ) + ( 1 ? y ( i ) ) log ? ( 1 ? h θ ( x ( i ) ) ) y^{(i)} \log h_{\theta}\left(x^{(i)}\right)+\left(1-y^{(i)}\right) \log \left(1-h_{\theta}\left(x^{(i)}\right)\right) y(i)loghθ?(x(i))+(1?y(i))log(1?hθ?(x(i)))
  • J就是最后的代价函数啦

再分析这一块代码:

for j = 1 : n = length(theta)
  grad(j) = 1 / m .* sum((hx - y) .* X(:,j:j));
endfor
  • grad是对每个x求偏导。有多少个θ就有多少个x,所以这里直接求theta向量的长度
  • 用一个for循环就不用grad写了
  • X(:,j:j):取矩阵X的所有行的第j列。也就是取出所有的 x j x_j xj?
  • sum((hx - y) .* X(:,j:j):就是求 ∑ i = 1 m ( h θ ( x ( i ) ) ? y ( i ) ) x j ( i ) \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right) x_{j}^{(i)} i=1m?(hθ?(x(i))?y(i))xj(i)?
  • 1 / m .* sum((hx - y) .* X(:,j:j)):求整个的 1 m ∑ i = 1 m ( h θ ( x ( i ) ) ? y ( i ) ) x j ( i ) \frac{1}{m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right) x_{j}^{(i)} m1?i=1m?(hθ?(x(i))?y(i))xj(i)?

写完以后就这样:

在这里插入图片描述

提交一下看看:

在这里插入图片描述
在这里插入图片描述
两项都得分啦。

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-08-27 12:07:09  更:2021-08-27 12:07:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 22:27:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码