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

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

  • 一、问题介绍
  • 二、解决过程及代码讲解
  • 三、函数解释
    • 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()函数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/491771.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从IoT World 2019看全球IoT九大发展趋势

来源:全球物联网观察美国时间5月14日,IoT World2019在美国硅谷圣克拉拉会议中心举行,今年的主题是“工业与IOT的交互”,从大会主题演讲内容和现场产品展示来看,随着5G的商用和人工智能技术的大面积落地,IoT…

美国一箭投放60颗卫星 马斯克组互联网“星链”

来源:新华网美国太空探索公司当地时间23日晚在美国佛罗里达州一处空军基地发射火箭,将60颗小卫星送入近地轨道。这标志着企业家埃隆马斯克组建互联网卫星群的“星链”项目迈出实质性一步,抢在电子商务巨头亚马逊公司创始人杰夫贝索斯的“柯伊…

吴恩达《机器学习》学习笔记五——逻辑回归

吴恩达《机器学习》学习笔记五——逻辑回归一、 分类(classification)1.定义2.阈值二、 逻辑(logistic)回归假设函数1.假设的表达式2.假设表达式的意义3.决策界限三、 代价函数1.平方误差函数的问题2.logistic回归的代价函数四、梯…

协方差与相关系数

定义: 协方差用于衡量两个变量的总体误差。而方差是协方差的一种特殊情况,即当两个变量是相同的情况。 期望值分别为E[X]与E[Y]的两个实随机变量X与Y之间的协方差Cov(X,Y)定义为: 如果两个变量的变化趋势一致,也就是说如果其中一…

吴恩达《机器学习》学习笔记六——过拟合与正则化

吴恩达《机器学习》学习笔记六——过拟合与正则化一、 过拟合问题1.线性回归过拟合问题2.逻辑回归过拟合问题3.过拟合的解决二、 正则化后的代价函数1.正则化思想2.实际使用的正则化三、 正则化的线性回归1.梯度下降的情况2.正规方程的情况四、 正则化的逻辑回归1.梯度下降的情…

5G时代,智能工厂迎来4大改变!

来源:亿欧网作为新一代移动通信技术,5G技术切合了传统制造企业智能制造转型对无线网络的应用需求,能满足工业环境下设备互联和远程交互应用需求。在物联网、工业自动化控制、物流追踪、工业AR、云化机器人等工业应用领域,5G技术起…

主成分分析PCA以及特征值和特征向量的意义

定义: 主成分分析(Principal Component Analysis,PCA), 是一种统计方法。通过正交变换将一组可能存在相关性的变量转换为一组线性不相关的变量,转换后的这组变量叫主成分。PCA的思想是将n维特征映射到k维上…

吴恩达《机器学习》学习笔记七——逻辑回归(二分类)代码

吴恩达《机器学习》学习笔记七——逻辑回归(二分类)代码一、无正则项的逻辑回归1.问题描述2.导入模块3.准备数据4.假设函数5.代价函数6.梯度下降7.拟合参数8.用训练集预测和验证9.寻找决策边界二、正则化逻辑回归1.准备数据2.特征映射3.正则化代价函数4.…

从认知学到进化论,详述强化学习两大最新突破

来源:大数据文摘深层强化学习(deep RL)近年来在人工智能方面取得了令人瞩目的进步,在Atari游戏、围棋及无限制扑克等领域战胜了人类。通过将表征学习与奖励驱动行为相结合,深层强化学习又引发了心理学和神经科学领域的…

吴恩达《机器学习》学习笔记九——神经网络相关(1)

吴恩达《机器学习》学习笔记九——神经网络相关(1)一、 非线性假设的问题二、 神经网络相关知识1.神经网络的大致历史2.神经网络的表示3.前向传播:向量化表示三、 例子与直觉理解1.问题描述:异或XOR、同或XNOR2.单个神经元如何计算…

刚刚,科学家发现了一大堆解释人类进化的基因...

图片来源:《Nature Genetics》来源:中国生物技术网 5月27日发表在《Nature Genetics》上的一项新研究发现, 以前被认为在不同生物体中具有相似作用的数十种基因,实际上是人类独有的, 这或许有助于解释我们这个物种是如…

吴恩达《机器学习》学习笔记八——逻辑回归(多分类)代码

吴恩达《机器学习》笔记八——逻辑回归(多分类)代码导入模块及加载数据sigmoid函数与假设函数代价函数梯度下降一对多分类预测验证课程链接:https://www.bilibili.com/video/BV164411b7dx?fromsearch&seid5329376196520099118 之前笔记…

DeepMind 综述深度强化学习:智能体和人类相似度竟然如此高!

来源:AI科技评论近年来,深度强化学习(Deep reinforcement learning)方法在人工智能方面取得了瞩目的成就,从 Atari 游戏、到围棋、再到无限制扑克等领域,AI 的表现都大大超越了专业选手,这一进展…

吴恩达《机器学习》学习笔记十——神经网络相关(2)

吴恩达《机器学习》学习笔记十——神经网络相关(2)一、 代价函数二、 反向传播算法三、 理解反向传播算法四、 梯度检测五、 随机初始化1.全部初始化为0的问题2.随机初始化的思想六、 神经网络算法整体流程1.选择网络具体架构2.训练神经网络课程链接&…

吴恩达《机器学习》学习笔记十一——神经网络代码

吴恩达《机器学习》学习笔记十一——神经网络代码数据准备神经网络结构与代价函数初始化设置反向传播算法训练网络与验证课程链接:https://www.bilibili.com/video/BV164411b7dx?fromsearch&seid5329376196520099118 数据集链接:https://pan.baidu…

中国科研人员发明单晶体管逻辑结构新原理

▲随着晶体管不断缩小特征尺寸,集成电路的性能得以持续提升。然而在超小器件尺寸下,硅材料的物理极限导致了功耗的大幅提升,难以进一步持续减小晶体管的特征尺寸。来源:文汇网通过引入层状半导体,并依据其特性设计新型…

Java 内存模型

1、并发模型编程的分类 在并发模型编程中,我们需要解决两个关键问题:线程之间如何通信以及线程之间如何同步。线程之间的通信包括两种:共享内存和消息传递。 Java并发采用的是共享内存模型。 2、Java内存模型的抽象 Java内存模型的主要目标是…

PyTorch框架学习一——PyTorch的安装(CPU版本)

PyTorch框架学习一——PyTorch的安装(CPU版本)PyTorch简介PyTorch的安装(CPU版)机器学习/深度学习领域的学习都是需要理论和实践相结合的,而它们的实践都需要借助于一个框架来实现,PyTorch在学术界目前处于…

你的大脑在自动驾驶,而你一无所知

来源:果壳想象一下,你的大脑里有着两个小人,它们在不停地打架,试图夺取控制你行动的权力。当然,这两个小人并不是你善意和邪恶的念头。那它们是什么?在很多人看来,这两者就是我们的意识和无意识…

常用的损失函数

来自 机器学习成长之路公众号 本文将常用的损失函数分为了两大类:分类和回归。然后又分别对这两类进行了细分和讲解,其中回归中包含了一种不太常见的损失函数:平均偏差误差,可以用来确定模型中存在正偏差还是负偏差。 从学习任务…