赞
踩
在本练习中,您将 实现线性回归并了解其在数据上的工作原理。
在开始练习前,需要下载如下的文件进行数据上传:
在整个练习中,涉及如下的必做作业,及标号*
的选做作业:
必做作业为实现单变量的线性回归;选做作业为实现多变量线性回归。
在该部分练习中,将通过代码实现返回一个5*5
的对角矩阵。输出与如下相同:
- 1 0 0 0 0
- 0 1 0 0 0
- 0 0 1 0 0
- 0 0 0 1 0
- 0 0 0 0 1
在以下代码框中进行如上的实现,完成部分练习后,得到如上的相同结果即为通过。
- ###在这里填入代码###
-
- import numpy as np
-
- A = np.eye(5)
-
- print(A)
[[1. 0. 0. 0. 0.] [0. 1. 0. 0. 0.] [0. 0. 1. 0. 0.] [0. 0. 0. 1. 0.] [0. 0. 0. 0. 1.]]
2 单变量线性回归
在该部分练习中,将实现单变量线性回归并用来预测餐车的利润。
假设你是一家餐厅的领导,正在考虑在不同的城市开设新的分店。该连锁店已经在不同的城市有了餐车,并且你能够获得每个城市的人口和利润数据。
现在需要使用这些数据来帮助你选择下一个被扩展的城市。
文件
ex1data1.txt
包含线性回归问题的数据集。第一列数据对应城市人口,第二列数据对应那座城市的餐车的利润。利润为负时表示亏损。2.1 绘制数据
在开始进入练习之前,对数据进行可视化通常很有用。对于该数据集,可以使用散点图进行可视化,因为它只有两个属性(人口、利润)。
- # 引入所需要的库文件
- import numpy as np
- import pandas as pd
- import matplotlib.pyplot as plt
- import os
-
- %matplotlib inline
- # 数据存储路径
- path = 'ex1data1.txt'
-
- # 读入相应的数据文件
- data = pd.read_csv(path, header=None,names=['Population','Profit'])
-
- #查看数据的前五条
- data.head(5)
Population Profit 0 6.1101 17.5920 1 5.5277 9.1302 2 8.5186 13.6620 3 7.0032 11.8540 4 5.8598 6.8233
接下来需要实现数据可视化的代码,该部分数据绘制出的图像应与如下相同。
要点:
- 实现散点图可视化
- 数据分布为红色点
- 标清横纵坐标名称
- ###在这里填入代码###
-
- data.plot(kind='scatter', x='Population', y='Profit', figsize=(12,8))
- plt.show()
2.2 梯度下降
在该部分中,将使用梯度下降来选择合适的线性回归参数θ用以拟合给定数据集。
2.2.1 更新公式
线性回归的目的是最小化成本函数:
假设hθ(X)hθ(X)由以下线性模型给出:
回顾一下,模型的参数是θjθj的值,这些将用来调整以最小化成本J(θ)J(θ)。
其中一种方法是使用批量梯度下降算法,在批量梯度下降中,每次迭代地执行更新,随着梯度下降的每一步计算,参数θjθj越来越接近能够使得成本J(θ)J(θ)达到最低的最佳值。
(同时更新所有的θjθj)
2.2.2 实现
在上一部分的练习中,我们已经将所需要用到的数据加载至变量
data
中,并为其列分别进行命名。接下来,我们在数据中添加了一个维度来拟合截距项θ0θ0。并将初始参数值设为0,学习率αα设为0.01。
- #在列索引为0处添加数据列,该列值均为1
- data.insert(0, 'Ones', 1)
-
- #获取数据列数
- cols = data.shape[1]
-
- #对变量X和y进行初始化,并将其数据类型转换为矩阵
- X = data.iloc[:,0:cols-1]
- y = data.iloc[:,cols-1:cols]
- X = np.matrix(X.values)
- y = np.matrix(y.values)
-
- #学习率、迭代次数的初始化
- alpha = 0.01
- iterations = 1500
2.2.3 计算成本J(θ)
在执行梯度下降最小化成本函数J(θ)J(θ)时,通过计算成本来监视收敛状态是有帮助的。
在该部分练习任务中,你需要实现一个计算成本J(θ)J(θ)的函数
computeCost
,用于检查梯度下降实现的收敛性。其中,
X
和y
不是标量值,而是矩阵,其行代表训练集中的示例。要点: 完成该函数后,将θθ值初始化为0并进行成本的计算,将得到的成本值打印出来。
如果结果为32.07,则计算通过。
- ###在这里填入代码###
-
- def computeCost(X, y, w):
- inner = np.power(((X * w) - y), 2)
- return np.sum(inner) / (2 * len(X))
-
-
- w = np.matrix(np.zeros((2,1)))
- computeCost(X, y, w)
2.2.4 梯度下降
接下来,我们将实现梯度下降,给出的代码已经实现了循环结构,你只需要在每次的迭代中提供
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/546904
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。