当前位置:   article > 正文

ex1-linearRegression_inner = np.power(x @ w - y, 2)

inner = np.power(x @ w - y, 2)

练习1:线性回归


介绍

在本练习中,您将 实现线性回归并了解其在数据上的工作原理。

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

  • ex1data1.txt -单变量的线性回归数据集
  • ex1data2.txt -多变量的线性回归数据集

在整个练习中,涉及如下的必做作业,及标号*选做作业

必做作业为实现单变量的线性回归;选做作业为实现多变量线性回归。

1 实现简单示例函数

在该部分练习中,将通过代码实现返回一个5*5对角矩阵。输出与如下相同:

  1. 1 0 0 0 0
  2. 0 1 0 0 0
  3. 0 0 1 0 0
  4. 0 0 0 1 0
  5. 0 0 0 0 1

1.1 提交解决方案

在以下代码框中进行如上的实现,完成部分练习后,得到如上的相同结果即为通过。

  1. ###在这里填入代码###
  2. import numpy as np
  3. A = np.eye(5)
  4. 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 绘制数据

在开始进入练习之前,对数据进行可视化通常很有用。对于该数据集,可以使用散点图进行可视化,因为它只有两个属性(人口、利润)。

  1. # 引入所需要的库文件
  2. import numpy as np
  3. import pandas as pd
  4. import matplotlib.pyplot as plt
  5. import os
  6. %matplotlib inline
  1. # 数据存储路径
  2. path = 'ex1data1.txt'
  3. # 读入相应的数据文件
  4. data = pd.read_csv(path, header=None,names=['Population','Profit'])
  5. #查看数据的前五条
  6. data.head(5)
PopulationProfit
06.110117.5920
15.52779.1302
28.518613.6620
37.003211.8540
45.85986.8233

接下来需要实现数据可视化的代码,该部分数据绘制出的图像应与如下相同。

要点:

  • 实现散点图可视化
  • 数据分布为红色点
  • 标清横纵坐标名称

 

 

  1. ###在这里填入代码###
  2. data.plot(kind='scatter', x='Population', y='Profit', figsize=(12,8))
  3. 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。

  1. #在列索引为0处添加数据列,该列值均为1
  2. data.insert(0, 'Ones', 1)
  3. #获取数据列数
  4. cols = data.shape[1]
  5. #对变量X和y进行初始化,并将其数据类型转换为矩阵
  6. X = data.iloc[:,0:cols-1]
  7. y = data.iloc[:,cols-1:cols]
  8. X = np.matrix(X.values)
  9. y = np.matrix(y.values)
  10. #学习率、迭代次数的初始化
  11. alpha = 0.01
  12. iterations = 1500

 2.2.3 计算成本J(θ)

在执行梯度下降最小化成本函数J(θ)J(θ)时,通过计算成本来监视收敛状态是有帮助的。

在该部分练习任务中,你需要实现一个计算成本J(θ)J(θ)的函数computeCost,用于检查梯度下降实现的收敛性。

其中,Xy不是标量值,而是矩阵,其行代表训练集中的示例。

要点: 完成该函数后,将θθ值初始化为0并进行成本的计算,将得到的成本值打印出来。

如果结果为32.07,则计算通过。

  1. ###在这里填入代码###
  2. def computeCost(X, y, w):
  3. inner = np.power(((X * w) - y), 2)
  4. return np.sum(inner) / (2 * len(X))
  5. w = np.matrix(np.zeros((2,1)))
  6. computeCost(X, y, w)

 

2.2.4 梯度下降

接下来,我们将实现梯度下降,给出的代码已经实现了循环结构,你只需要在每次的迭代中提供

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/546904
推荐阅读
相关标签