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

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

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

TensorFlow实现单隐层神经网络

这里使用MNIST数据集,MNIST数据集的下载地址http://yann.lecun.com/exdb/mnist/ from tensorflow.examples.tutorials.mnist import input_data import tensorflow as tf mnist input_data.read_data_sets(r"D:\PycharmProjects\tensorflow\MNIST_data"…

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

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

Ubuntu 中Mysql 操作

一、mysql服务操作 0、查看数据库版本 sql-> status; 1、net start mysql //启动mysql服务 2、net stop mysql //停止mysql服务  3、mysql -h主机地址 -u用户名 -p用户密码 //进入mysql数据库 4、quit //退出mysql操作 5、mysqladmin -u用户名 -p旧密码 passwor…

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

吴恩达《机器学习》学习笔记五——逻辑回归一、 分类(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.梯度下降的情…

Swift - 数组排序方法(附样例)

下面通过一个样例演示如何对数组元素进行排序。数组内为自定义用户对象,最终要实现按用户名排序,数据如下: 1234var userList [UserInfo]()userList.append(UserInfo(name: "张三", phone: "4234"))userList.append(Use…

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.…

需要自己调研的框架,以及需要学习的内容

_webView 图文解析需要学习 Core Text 来解决图文混合的xml文件 项目中用到哪些数据持久化,什么场景下使用? http://www.cocoachina.com/ios/20150720/12610.html 解决问题的网站 CSDN.NETCocoaChina51CTO技术论坛特酷吧国外it技术论坛stack overflow 需…

Python获得一篇文档的不重复词列表并创建词向量

获得一篇文档的不重复词列表: def loadDataSet():postingList [[my, dog, has, flea, problems, help, please],[maybe, not, take, him, to, dog, park, stupid],[my, dalmation, is, so, cute, I, love, him],[stop, posting, stupid, worthless, garbage],[mr,…

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

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

Python实现一个数组除以一个数

如果直接用python的一个list除以一个数,会报错: a [1.0, 1.0, 1.0] c a/3 print(c) TypeError: unsupported operand type(s) for /: list and int 使用Numpy可以轻松做到: import numpy as npa np.array([1,1,1]) c a/3 print(c)

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

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

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

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

Android数据存储——SQLite数据库(模板)

本篇整合Android使用数据库,要保存一个实体类的样本。 首先看一下数据库语句: ORM:关系对象映射 添加数据: ContentValues values new ContentValues();values.put("name", "小丽");values.put("phone", &qu…

Python切分文本(将文本文档切分为词列表)

对于一个句子,一种简单的方法是使用split() a This is an apple. Do you like apple? b a.split() print(b) # [This, is, an, apple., Do, you, like, apple?] 可以看到切分结果不错,但标点符号也当成了词的一部分,可以使用正则表达式…

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

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