练习2:逻辑回归

介绍
在本练习中,您将实现逻辑回归并将其应用于两个不同的数据集。还将通过将正则化加入训练算法,来提高算法的鲁棒性,并用更复杂的情形来测试模型算法。

在开始练习前,需要下载如下的文件进行数据上传:

ex2data1.txt -前半部分的训练数据集
ex2data2.txt -后半部分的训练数据集
在整个练习中,涉及如下的必做作业:

· 绘制2D分类数据的函数----(3分)
· 实现Sigmoid函数--------(5分)
· 实现Logistic回归代价函数和梯度函数—(60分)
· 实现回归预测函数--------(5分)
· 实现正则Logisitic回归成本函数-------(27分)

1 Logistic回归

在该部分练习中,将建立一个逻辑回归模型,用以预测学生能否被大学录取。

假设你是大学某个部门的负责人,你要根据两次考试的结果来决定每个申请人的入学机会。目前已经有了以往申请者的历史数据,并且可以用作逻辑回归的训练集。对于每行数据,都包含对应申请者的两次考试分数和最终的录取结果。

在本次练习中,你需要建立一个分类模型,根据这两次的考试分数来预测申请者的录取结果。

1.1 数据可视化

在开始实施任何算法模型之前,最好先对数据进行可视化,这将会更加直观的获取数据特征。

现在,你需要编写代码来完成数据的绘图,显示如下所示的图形。

在这里插入图片描述

要点:

导入需要使用的python库,并将从文件ex2data1.txt中读取数据,并显示前5行
x-y轴分别为两次考试的分数
正负示例需要用不同的标记显示(不同的颜色)

###在这里填入代码###
###主要实现要点1###
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
path = 'ex2data1.txt'
data = pd.read_csv(path, header=None, names=['Exam 1', 'Exam 2', 'Admitted'])
data.head()

1
2
3
4
5
6
7
8
9
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')
ax.set_ylabel('Exam 2 Score')
plt.show()




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

在这里插入图片描述

1.2 实现

在前部分练习中所绘制的数据分布图中可以看出,在不同标识的数据点间,有一个较为清晰的决策边界。现在需要实现逻辑回归,并使用逻辑回归来训练模型用以预测分类结果。

1.2.1 Sigmoid函数

在正式开始之前,我们先来了解一个函数:Sigmoid函数。
我们还记得逻辑回归假设的定义是:
[{ {h}{\theta }}\left( x \right)=g\left({ { {\theta }^{T}}X} \right)]
其中 g 代表一个常用的逻辑函数为S形函数(Sigmoid function),公式为:
g(z)=11+e−z
g(z)=11+e−z

合起来,我们得到逻辑回归模型的假设函数:
[{ {h}{\theta }}\left( x \right)=\frac{1}{1+{ {e}^{-{ {\theta }^{T}}X}}}]

接下来,你需要编写代码实现Sigmoid函数,编写后试着测试一些值,如果x的正值较大,则函数值应接近1;如果x的负值较大,则函数值应接近0。而对于x等于0时,则函数值为0.5。

确保在进行调用你实现的Sigmoid函数后,以下代码会输出如下的图片:
在这里插入图片描述

###在这里填入代码###
def sigmoid(z):
    return 1.0 / (1.0 + np.exp(-z))

1
2
3
4
###请运行并测试你的代码###
nums = np.arange(-10, 10, step=1)

fig, ax = plt.subplots(figsize=(12,8))
ax.plot(nums, sigmoid(nums), 'r')
plt.show()

1
2
3
4
5
6
7

在这里插入图片描述

1.2.2 代价函数和梯度

1.2.2.1 代价函数

现在,你需要编写代码实现代价函数以进行逻辑回归的成本计算,并且经过所给数据测试后,初始的成本约为0.693。

要点:

实现cost函数,参数为theta,X,y.
返回计算的成本值。
其中theta为参数,X为训练集中的特征列,y为训练集的标签列,三者均为矩阵。

###在这里填入代码###
def cost(theta,X,y):
    theta = np.matrix(theta)
    X = np.matrix(X)
    y = np.matrix(y)
    first = np.multiply(-y, np.log
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值