一、单变量线性回归

一、作业内容

假设你是一家特许经营餐厅的首席执行官,正在考虑在不同的城市开一家新店,该连锁店已经在各个城市开设了餐车,文件ex1data1.txt中包含你这些城市的利润和人口数据。第一列是一个城市的人口,第二列是该城市一辆餐车的利润。利润为负值表示亏损。您将使用一个变量实现线性回归,以预测餐车的利润。
数据集下载位置(包含吴恩达机器学课后作业全部数据集):data

二、作业分析

1、数据集中包含了正确的答案,目的是通过这些数据集可以算出更多正确的答案。所以使用的是机器学习算法中的监督学习

2、此类问题也被称为回归问题,即设法预测连续值的属性。

3、根据人口预测利润,输入变量只有一个特征:人口,输出变量为利润。所以使用单变量线性回归

4、对于监督学习来说,我们需要一个假设函数来拟合输入数据。
可以尝试使用一元线性表达式:

5、对于假设函数,我们要设法选取最优的θ值,所以我们使用代价函数

代价函数又称为平方误差代价函数,代价函数时解决回归问题最常用的手段。

通过求得代价函数的最小值,便能计算出最优的θ。

6、可以使用梯度下降法实现代价函数最小化

梯度下降函数

梯度下降法取得的是局部最优,当初始值不同时,得到的局部最优也不同。但线性回归的代价函数则总是凸函数,因此并没有多个局部最优解,唯一的局部最优解就是全局最优解。

梯度下降法在计算的过程中要注意同步更新

三、代码实战

引入所需函数库

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn import linear_model

首先我们加载数据,并且绘制散点图查看数据分布

# 加载数据
path = 'ex1data1.txt'
data = pd.read_csv(path, header=None, names=['Population', 'Profit'])# 绘制图像
data.plot(kind='scatter', x='Population', y='Profit', figsize=(12,8))
plt.show()

然后,我们先对数据做一些预处理

# 为了使用向量化的解决方案来计算代价和梯度
# 在第0列插入一列,这列值全为1
data.insert(0, 'Ones', 1)
#0:行;1:列
cols = data.shape[1]
# X是所有行,去掉最后一列
X = data.iloc[:,0:cols-1]
#y是所有行,最后一列
y = data.iloc[:,cols-1:cols]
# 将X和y转化为numpy矩阵
X = np.matrix(X.values)
y = np.matrix(y.values)
# theta为初始值为0的(1,2)矩阵
theta = np.matrix(np.array([0,0]))

对数据做完预处理后,首先我们将创建一个以参数θ为特征函数的代价函数

#计算代价函数
def computeCost(X, y, theta):inner = np.power(((X * theta.T) - y), 2)return  np.sum(inner) / (2 * len(X))

再创建一个批量梯度下降函数

# 批量梯度下降
# alpha学习率,iters迭代次数
def gradientDescent(X, y, theta, alpha, iters):# 创建一个与theta相同维度的0矩阵temp = np.matrix(np.zeros(theta.shape))# parameters:训练的theta的个数# ravel()将多维降为一维parameters = int(theta.ravel().shape[1])# 保存迭代之后的costcost = np.zeros(iters)for i in range(iters):error = (X * theta.T) - yfor j in range(parameters):term = np.multiply(error, X[:,j])temp[0,j] = theta[0,j] - ((alpha / len(X)) * np.sum(term))theta = tempcost[i] = computeCost(X, y, theta)return theta, cost

此时我们可以初始化一些附加变量 :学习速率α和要执行的迭代次数。
并且运行梯度下降算法来将训练我们的参数θ使其适合于训练集。

alpha = 0.01
iters = 1000theta, cost = gradientDescent(X, y, theta, alpha, iters)
print(theta)

查看得到的theta值

[[-3.24140214  1.1272942 ]]

最后,我们可以使用我们拟合的参数计算训练模型的代价函数(误差)

result = computeCost(X, y, theta)
print(result)

查看最优theta下的误差是多少

4.515955503078912

最后我们来绘制线性模型以及数据,直观地看出它的拟合

def plot():# 横坐标在最大和最小直接分100份x = np.linspace(data.Population.min(), data.Population.max(), 100)f = theta[0, 0] + (theta[0, 1] * x)# 设置窗口尺寸fig, ax = plt.subplots(figsize=(12, 8))ax.plot(x, f, 'r', label='Prediction')ax.scatter(data.Population, data.Profit, label='Traning Data')#控制图例位置,loc=2即4象项中的第二象项ax.legend(loc=2)ax.set_xlabel('Population')ax.set_ylabel('Profit')ax.set_title('Predicted Profit vs. Population Size')plt.show()

直接调用该函数

if __name__ == '__main__':plot()

由于梯度方程式函数也在每个训练迭代中输出一个代价的向量,所以我们也可以绘制

def optplot():fig, ax = plt.subplots(figsize=(12, 8))ax.plot(np.arange(1000), cost, 'r')ax.set_xlabel('Iterations')ax.set_ylabel('Cost')ax.set_title('Error vs. Training Epoch')plt.show()

代价总是降低 - 这是凸优化问题的一个例子

二、多变量线性回归

一、作业内容

假设你要卖掉你的房子,你想知道一个好的市场价格是多少。其中一种方法是,首先收集最近出售的房屋的信息,并制作房价模型。文件ex1data2.txt包含俄勒冈州波特兰市的房价训练集。第一栏是房子的面积(单位:平方英尺),第二栏是卧室的数量,第三栏是房子的价格。您将使用多元线性回归来预测房屋价格。

二、作业分析

1、预测房价,输入变量有两个特征,房子面积,房子卧室数量。输出变量,房子的价格

2、该数据集中有多个特征可用于房价分析,所以我们使用多元线性回归

3、根据该数据集,我们使用多元假设函数和多元梯度下降算法,原理上和一元一样。
假设函数

梯度下降算法


梯度下降函数

代价函数

4、在进行多元的梯度下降时,如果各个特征的取值范围比较相,那么梯度下降的收敛速度会比较。如果各个特征的取值范围差异较大,那么梯度下降的收敛过程就会比较缓慢

所以我们需要对特征进行缩放,通过对特征进行缩放就可以获得一个梯度下降更快的代价函数。

对于梯度下降,特征的取值范围最好是位于**[-1,1]**之间。

在进行特征缩放时可采用两种方法:
(1)数值除以最大值的
(2)均值归一化

均值归一化:
(1)通常会使用特征 x i x_i xi​减去该特征的均值 u i u_i ui​,这样可以使你的特征值具有为0的平均值
(2)对于 x 0 x_0 x0​是不需要进行变换的,因为不可能使得具有为0的平均值
(3) S i S_i Si​=当前特征最大值-当前特征最小值, x i x_i xi​代表当前特征的原数值, u i u_i ui​代表当前特征的原数值的平均值。当然Si也可以用当前特征的标准差来代替。

5、在选取学习速率时,通常通过绘制一幅图来判断是否正确运行梯度下降,当代价函数下降幅度不大时,就差不多是收敛了。

6、梯度下降异常的情况及解决方案
(1)异常:梯度没有下降,反而上升
解决方案:使用更小的α
(2)异常:梯度反复上升下降
解决方案:使用更小的α

7、求最优θ的另一种方法:正规方程
正规方程
正规方程是通过求解来找出使得代价函数最小的参数的。
假设我们的训练集特征矩阵为 X(包含了 x 0 x_0 x0​=1)并且我们的训练集结果为向量 y,则利用正规方程解出向量

梯度下降与正规方程的比较:

梯度下降:需要选择学习率α,需要多次迭代,当特征数量n大时也能较好适用,适用于各种类型的模型
正规方程:不需要选择学习率α,一次计算得出,需要计算。如果特征数量n较大则运算代价大,因为矩阵逆的计算时间复杂度为

吴恩达机器学习课后作业——线性回归相关推荐

  1. 吴恩达机器学习课后作业——线性回归(Python实现)

    1.写在前面 吴恩达机器学习的课后作业及数据可以在coursera平台上进行下载,只要注册一下就可以添加课程了.所以这里就不写题目和数据了,有需要的小伙伴自行去下载就可以了. 作业及数据下载网址:吴恩 ...

  2. pytorch实现吴恩达机器学习课后作业——线性回归

    线性回归 题目和数据 题目:使用ex1data1.txt中给出的两个变量,分别设为x,y,来预测卡车利润(y)的收益值. 在数据集,第一列表示城市人数(x),第二列该城市的卡车利润(y) 数据集: 6 ...

  3. 目录:吴恩达机器学习课后作业

    简单介绍 本博客为作者自行完成的吴恩达机器学习课后练习题目录,均使用PyTorch进行实现,无法保证对错,仅供参考. 作业题目以及源代码 百度云盘连接 提取码:3dvb 题目的命名方式与下表中的作业名 ...

  4. 吴恩达机器学习课后作业1——单变量线性回归(Linear regression with one variable)

    1. 问题和数据 假设你是一家连锁餐车店的老板,但是你又和别的土老板不一样,你又刚好是个懂线性回归,还懂编程的老板,正在考虑在不同的城市开一家新店.该连锁店已经在各个城市开设了餐车,你可以获得这些城市 ...

  5. 吴恩达机器学习课后作业1.1——多变量线性回归(Linear regression with multiple variable)

    1. 问题和数据 假设你要卖掉你的房子,你想知道一个好的市场价格是多少.其中一种方法是,首先收集最近出售的房屋的信息.在本部分的练习中,你将使用多元线性回归来预测房屋价格. 数据ex1data2.tx ...

  6. 吴恩达机器学习课后作业——偏差和方差

    1.写在前面 吴恩达机器学习的课后作业及数据可以在coursera平台上进行下载,只要注册一下就可以添加课程了.所以这里就不写题目和数据了,有需要的小伙伴自行去下载就可以了. 作业及数据下载网址:吴恩 ...

  7. 吴恩达机器学习课后作业ex1(python实现)

    作业介绍 吴恩达老师的作业资源可以在github或者网上找到 . ex1主要是对线性回归的一些复习和梯度下降.损失函数等的具体代码实现. pdf文件是对作业的说明.文件夹则是作业数据的各种格式,pyt ...

  8. 吴恩达机器学习课后作业——SVM支持向量机

    支持向量机 一.作业内容 在本练习的前半部分,您将对各种示例2D数据集使用支持向量机(svm).使用这些数据集进行试验将帮助您直观地了解支持向量机的工作方式,以及如何在支持向量机中使用高斯核.在练习的 ...

  9. 吴恩达机器学习课后作业Python实现(一):线性回归

    目录 前言 单变量线性回归 代码实现 数据集准备 代价函数 梯度下降 跑模型并预测 绘制线性模型及代价函数图 多元线性回归 代码实现 结果图 前言         写本篇文章的主要目的是记录自己机器学 ...

最新文章

  1. PacBio But Not Illumina Technology Can Achieve Fast, Accurate and Complete Closure of the High GC, C
  2. 0510JS基础:定义、输出、变量
  3. 隔空操作之简单的模拟三种行为
  4. 如何为物联网选择微控制器?
  5. ipython是解释器吗_Ipython 解释器
  6. c语言制作图片软件,大佬们,小菜鸟想问一问用vc编译器做简易画图软件
  7. (day 30 - 二叉树的先序遍历 )剑指 Offer 55 - I. 二叉树的深度
  8. vue routes路由
  9. 报表的查询条件只能在数据上方吗?
  10. 消息队列原理和应用场景总结
  11. 【Typecho插件】SakuraLoad
  12. 微信号注册人工服务器,两个方法让你一次性找到微信人工客服,简单而又粗暴!...
  13. Raspberry 静态IP配置
  14. java frappuccino_星巴克的“十二星座代表饮品” 你是星冰乐还是特浓咖啡?
  15. ProcessingJoy —— 字母流光粒子【JAVA】
  16. 攀藤 5003粉尘激光传感器arduino使用
  17. JVM之内存结构详解
  18. 2009 junior T1 多项式输出 题解
  19. 2021高考北京大峪中学成绩查询,最新披露:京城30所中学高考成绩
  20. 【观察】新华三:登顶Wi-Fi 6市场榜首,引领时代更创造时代

热门文章

  1. 软件测试面试题:1.怎样看待加班问题?
  2. 【JZOJ A组】海明距离
  3. 数据库安全保护、权限授予
  4. 2023 QS世界大学学科排名:中国大陆高校有32个学科进入世界前20,材料科学、化学、生物科学等表现优异 | 美通社头条...
  5. java算法编程题:士兵列队问题
  6. python分析彩票数据,这波太炸了!Python脚本可视化居然可以这么玩
  7. python中glob模块怎么下载_python中的glob模块
  8. linux搭建seafile_CentOS7+seafile搭建私有云盘测试过程记录
  9. 新的计算方法:预测益生菌在不同生长条件下的相互作用
  10. 穷人与富人的经典差异