吴恩达《机器学习》学习笔记四——单变量线性回归(梯度下降法)代码

  • 一、问题介绍
  • 二、解决过程及代码讲解
  • 三、函数解释
    • 1. pandas.read_csv()函数
    • 2. DataFrame.head()函数
    • 3. Dataframe.insert()函数

课程链接: https://www.bilibili.com/video/BV164411b7dx?from=search&seid=5329376196520099118

之前介绍了吴恩达机器学习课程的第一个算法——线性回归,又可以分为一元和多元,优化参数的方法包含梯度下降和正规方程两种。今天用python来完成一下相关的练习,虽然吴恩达推荐使用Octave,但是用python上手个人感觉更通用。一元的代码掌握后推广到多元很简单,而且梯度下降的优化算法更通用,所以着重讲解一下单变量线性回归(梯度下降法)的代码。

这次笔记用到的数据集:https://pan.baidu.com/s/1h5Ygse5q2wkTeXA9Pwq2RA
提取码:ottq

一、问题介绍

使用一个单变量线性回归模型来预测食品卡车的利润。假设你是一个特许经营餐厅的CEO,并且正在考虑在不同城市开设新的出口。这个连锁店已经在各个城市有卡车,你有城市的利润和人口的数据。

你希望使用此数据来帮助您选择要扩展的下一个城市。文件ex1data1.txt包含线性回归问题的数据集。第一列是城市人口,第二列是那个城市里一辆食品卡车的利润,利润为负值时表示损失。

下图为数据集文件内容部分截图:

一句话说,就是利用城市的人口数据来预测在该城市的利润,可以采用单变量线性回归模型。

二、解决过程及代码讲解

首先导入需要使用的模块:numpy,pandas和matplotlib.pyplot。

# 导入必要的模块
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

读入数据集,若数据集和代码文件放在一个文件夹下可以使用相对路径,否则要使用绝对路径才能找到数据集。

# 读入数据集data1.txt
path =  'data/data42661/ex1data1.txt'
data = pd.read_csv(path, header=None, names=['Population', 'Profit'])
data.head()  #预览数据

结果如下:

查看一下数据集的统计信息,包括数据个数、均值、方差、最大最小值等。

data.describe()


也可以通过绘制散点图具体查看数据集分布。

data.plot(kind='scatter', x='Population', y='Profit', figsize=(12,8))
plt.show()


因为是单变量问题,读入的数据可以表示成这样:
而为了将假设函数变成如下形式,以便我们可以使用向量化的解决方案来计算代价和梯度:
X需要插入一列1:
代码是:

data.insert(0, 'Ones', 1)
# 变量初始化
# set X (training data) and y (target variable)
cols = data.shape[1]
X = data.iloc[:,0:cols-1]#X是所有行,去掉最后一列
y = data.iloc[:,cols-1:cols]#X是所有行,最后一列
# 观察下 X (训练集) and y (目标变量)是否正确.
X.head()      #head()是观察前5行

y.head()


但此时X和y是DataFrame形式,需要转换为矩阵才方便运算:

# 代价函数是应该是numpy矩阵,所以我们需要转换X和Y,然后才能使用它们。 我们还需要初始化theta,即把theta所有元素都设置为0.
X = np.matrix(X.values)
y = np.matrix(y.values)
theta = np.matrix(np.array([0,0]))
# 查看一下各自的维度
X.shape, theta.shape, y.shape


定义代价函数:

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

然后就是定义梯度下降算法函数:

def gradientDescent(X, y, theta, alpha, iters):temp = np.matrix(np.zeros(theta.shape))parameters = int(theta.ravel().shape[1])cost = 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 = 1000
# 调用梯度下降,得到两个参数的最优值
g, cost = gradientDescent(X, y, theta, alpha, iters)

# 并看一下最优的代价函数值
computeCost(X, y, g)

# 可以看一下此时的假设函数的拟合程度,从图中看拟合程度还算可以。
x = np.linspace(data.Population.min(), data.Population.max(), 100)
f = g[0, 0] + (g[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')
ax.legend(loc=2)
ax.set_xlabel('Population')
ax.set_ylabel('Profit')
ax.set_title('Predicted Profit vs. Population Size')
plt.show()


还可以通过看代价函数的变化曲线来判断是否正确工作。

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

三、函数解释

1. pandas.read_csv()函数

read_csv()函数是用来读取csv文件的内容进而转化为易于操作的数据结构dataframe的常用函数,具有十分强大的功能。

各参数详解参考:
pandas.read_csv()函数

2. DataFrame.head()函数

在用Pandas读取数据之后,我们往往想要观察一下数据读取是否准确,这就要用到Pandas里面的head( )函数,但是head( )函数只能读取前五行数据

3. Dataframe.insert()函数

在Dataframe的指定列中插入数据。各参数详解参考:Dataframe.insert()函数

吴恩达《机器学习》学习笔记四——单变量线性回归(梯度下降法)代码相关推荐

  1. 吴恩达机器学习 Coursera 笔记(二) - 单变量线性回归

    Model and Cost Function 1 模型概述 - Model Representation To establish notation for future use, we'll us ...

  2. 吴恩达机器学习 Coursera 笔记(二) - 单变量线性回归...

    Model and Cost Function 1 模型概述 - Model Representation To establish notation for future use, we'll us ...

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

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

  4. 吴恩达机器学习(一)单变量线性回归(假设函数、代价函数、梯度下降)

    目录 0. 前言 1. 假设函数(Hypothesis) 2. 代价函数(Cost Function) 3. 梯度下降(Gradient Descent) 学习完吴恩达老师机器学习课程的单变量线性回归 ...

  5. 吴恩达机器学习总结五:单变量线性回归实战

    线性回归实战总结: 单变量线性回归: 1.加载和查看数据(准备工作) data = load('ex1data1.txt'); x=data(:,1); y=data(:,2); plot(x,y,' ...

  6. 吴恩达机器学习总结二:单变量线性回归

    第二章 单变量线性回归 3.代价函数:(是参数的方程,最常用平方误差代价函数) 定义:也叫损失函数,用来进行参数估计.当用一个确定的方程来拟合一些数据集时,为了保证方程最为合适拟合程度最好,即每一个点 ...

  7. 吴恩达机器学习课程笔记章节二单变量线性回归

    1.模型描述 Univariate(One variable)Linear Regression m=训练样本的数目,x's=输入的变量/特征,y's=输出变量/目标变量 2.代价函数 基本定义: 3 ...

  8. 吴恩达机器学习学习笔记第七章:逻辑回归

    分类Classification分为正类和负类 (规定谁是正谁是负无所谓) 吴恩达老师举例几个例子:判断邮箱是否是垃圾邮箱 一个在线交易是否是诈骗 一个肿瘤是良性的还是恶性 如果我们用之前学习的lin ...

  9. 吴恩达机器学习学习笔记第二章:单变量线性回归

    模型描述: 训练集(training set):是监督学习中独有的概念,由我们人喂给电脑的既有既有特征x又有结果y的数据.下图x是房子面积 ,y是房屋对应的价格 符号记法解释: (x^(1),y^(1 ...

最新文章

  1. windows远程桌面如果超出最大连接数, 使用命令行mstsc /console登录即可
  2. 缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级
  3. bootstrap signin将邮件改成用户名_[源码和文档分享]基于VC++和Oracle数据库的邮件管理系统的设计与实现...
  4. 程序员内卷的结局 | 每日趣闻
  5. http php mysql_apache+php+mysql
  6. 祛除雀斑的健康方法 - 健康程序员,至尚生活!
  7. 腾讯终于有动作了:国行版Switch快来了...
  8. android 混淆方法名,android – 如何告诉Proguard混淆类名
  9. mongodb 无法查出数据_MongoDB,再见还是再等等?
  10. flask框架(四):通过局域网访问网站
  11. node js 非阻塞io_Node Express JS:套接字IO模块示例
  12. python找不到sys模块_在本地目录中找不到模块,存在于sys.path中
  13. html表格背景图片格式,CSS常见样式(二)——列表,背景,边框,行高,表格,vertical-align...
  14. python屏蔽警告
  15. 如何在百度和各大网站搜索到自己的文章
  16. 【WebServerProgramming】Ch.1 网络因特网Web
  17. etsy开店流程遇到的问题整理
  18. arm服务器芯片尺寸,华为公开ARM服务器芯片“Hi1620”:7nm+64核心
  19. Dubbo服务端服务发布(一)Invoker创建
  20. Kali安装中文输入法ibus

热门文章

  1. 对照表 - 用心整理了一批国内省份、城市、县城的对照表,用于匹配,拿走不谢
  2. java 反射的弊端_java反射机制的一些学习心得小结
  3. 预训练再次跨界!百度提出ERNIE-GeoL,地理位置-语言联合预训练!
  4. 新型冠状病毒传染性有多强?何时达到疫情峰值?来看一下数学和统计建模结果...
  5. 深度学习在美团推荐平台排序中的运用
  6. 爬取热门网站的热榜,集中展示
  7. 【TensorFlow】实现简单的鸢尾花分类器
  8. 专家:人工智能开始对现实世界产生重大影响​​
  9. Python深度学习:No handles with labels found to put in legend.
  10. English trip -- VC(情景课)5 Around Town