练习2:逻辑回归
介绍
在本练习中,您将实现逻辑回归并将其应用于两个不同的数据集。还将通过将正则化加入训练算法,来提高算法的鲁棒性,并用更复杂的情形来测试模型算法。
在开始练习前,需要下载如下的文件进行数据上传:
- ex2data1.txt -前半部分的训练数据集
- ex2data2.txt -后半部分的训练数据集
在整个练习中,涉及如下的必做作业:
- 绘制2D分类数据的函数----(3分)
- 实现Sigmoid函数--------(5分)
- 实现Logistic回归代价函数和梯度函数—(60分)
- 实现回归预测函数--------(5分)
- 实现正则Logisitic回归成本函数-------(27分)
1 Logistic回归
在该部分练习中,将建立一个逻辑回归模型,用以预测学生能否被大学录取。
假设你是大学某个部门的负责人,你要根据两次考试的结果来决定每个申请人的入学机会。目前已经有了以往申请者的历史数据,并且可以用作逻辑回归的训练集。对于每行数据,都包含对应申请者的两次考试分数和最终的录取结果。
在本次练习中,你需要建立一个分类模型,根据这两次的考试分数来预测申请者的录取结果。
1.1 数据可视化
在开始实施任何算法模型之前,最好先对数据进行可视化,这将会更加直观的获取数据特征。
现在,你需要编写代码来完成数据的绘图,显示如下所示的图形。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wWPJdcP2-1686574674578)(2-1.png)]
要点:
- 导入需要使用的python库,并将从文件
ex2data1.txt中读取数据,并显示前5行 - x-y轴分别为两次考试的分数
- 正负示例需要用不同的标记显示(不同的颜色)
###在这里填入代码###
###主要实现要点1###
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# import matplotlib.pyplot as plt_plot
path = '/home/jovyan/work/ex2data1.txt'
data = pd.read_csv(path, header=None, names=['Exam 1', 'Exam 2', 'Admitted'])
data.head()
| Exam 1 | Exam 2 | Admitted | |
|---|---|---|---|
| 0 | 34.623660 | 78.024693 | 0 |
| 1 | 30.286711 | 43.894998 | 0 |
| 2 | 35.847409 | 72.902198 | 0 |
| 3 | 60.182599 | 86.308552 | 1 |
| 4 | 79.032736 | 75.344376 | 1 |
###在这里填入代码###
###绘制数据散点图###
positive = data[data['Admitted'].isin([1])]
negative = data[data['Admitted'].isin([0])]
fig, ax = plt.subplots(figsize=(12,8))
# 正向类,绘制50个样本,c=‘b’颜色,maker=‘o’绘制的形状
ax.scatter(positive['Exam 1'], positive['Exam 2'], s=50, c='b', marker='o', label='Admitted')
ax.scatter(negative['Exam 1'], negative['Exam 2'], s=50, c='r', marker='x', label='Not Admitted')
ax.legend()# Legend 图例,获取label标签内容,如图右上角显示
ax.set_xlabel('Exam 1 Score')
Text(0.5, 0, 'Exam 1 Score')
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x900vKTm-1686574674580)(output_3_1.png)]](/https://i-blog.csdnimg.cn/blog_migrate/ba4193f009bffa309a055baaee76de8f.png)
1.2 实现
在前部分练习中所绘制的数据分布图中可以看出,在不同标识的数据点间,有一个较为清晰的决策边界。现在需要实现逻辑回归,并使用逻辑回归来训练模型用以预测分类结果。
1.2.1 Sigmoid函数
在正式开始之前,我们先来了解一个函数:Sigmoid函数。
我们还记得逻辑回归假设的定义是:
\[{
{h}{\theta }}\left( x \right)=g\left({
{
{\theta }^{T}}X} \right)\]
其中 g 代表一个常用的逻辑函数为S形函数(Sigmoid function),公式为:
\[g\left( z \right)=\frac{1}{1+{
{e}^{-z}}}\]
合起来,我们得到逻辑回归模型的假设函数:
\[{
{h}{\theta }}\left( x \right)=\frac{1}{1+{
{e}^{-{
{\theta }^{T}}X}}}\]
接下来,你需要编写代码实现Sigmoid函数,编写后试着测试一些值,如果x的正值较大,则函数值应接近1;如果x的负值较大,则函数值应接近0。而对于x等于0时,则函数值为0.5。
###在这里填入代码###
def sigmoid(z):
return 1.0/(1.0+np.exp(-z))
###请运行并测试你的代码###
###请运行并测试你的代码###
nums = np.arange(-10, 10, step=1)
fig, ax = plt.subplots(figsize=(12,8))
ax.plot(nums, sigmoid(nums), 'r')
plt.show()
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8FW2VZ8Q-1686574674582)(output_6_0.png)]](/https://i-blog.csdnimg.cn/blog_migrate/691049b6d88109eb6cf9d1e1e733c582.png)
1.2.2 代价函数和梯度
1.2.2.1 代价函数
我们知道逻辑回归的代价函数是:
J ( θ ) = 1 m ∑ i = 1 m [ − y ( i ) log ( h θ ( x ( i ) ) ) − ( 1 − y ( i ) ) log ( 1 − h θ ( x ( i ) ) ) ] J\left( \theta \right)=\frac{1}{m}\sum\limits_{i=1}^{m}{[-{
{y}^{(i)}}\log \left( {
{h}_{\theta }}\left( {
{x}^{(i)}} \right) \right)-\left( 1-{
{y}^{(i)}} \right)\log \left( 1-{
{h}_{\theta }}\left( {
{x}^{(i)}} \right) \right)]} J(θ)=m1i=1∑m[−y(i)log(hθ(x(i)))−(1−y(i))log(1−hθ(x(i)))]
现在,你需要编写代码实现代价函数以进行逻辑回归的成本计算,并且经过所给数据测试后,初始的成本约为0.693。
要点:
- 实现cost函数,参数为theta,X,y.
- 返回计算的成本值。
- 其中theta为参数,X为训练集中的特征列,y为训练集的标签列,三者均为矩阵。
###在这里填入代码###
def cost(theta,X,

本练习介绍了逻辑回归的实现过程,包括数据可视化、Sigmoid函数的实现、代价函数和梯度的计算,以及使用正则化提升模型性能。通过实际数据集,展示了如何在Python中训练逻辑回归模型,并评估其在训练数据上的准确性。

1万+

被折叠的 条评论
为什么被折叠?



