1 实验目的

实现线性回归,预测该城市人口对应的利润。

2 数据集描述

现有一个数据集命名为ex1data1.txt,里面包含两个属性,即城市人口和利润。

3 使用工具

Pycharm python3

4 实验步骤

  1. 导入数据,并给每列数据命名一个名称Population,Profit
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 导入数据并查看
path="ex1data1.txt"
# 给每列数据命名一个名称Population,Profit
data=pd.read_csv(path,header=None,names=('Population','Profit'))
  1. 查看数据的前五行,和数据描述:
print(data.head())
print(data.describe())

输出结果图:

  1. 将所有数据用散点图表示:
# 可视化数据
data.plot(kind='scatter',x='Population',y='Profit',figsize=(8,5))
plt.show()

输出结果

4. 使用梯度下降实现线性回归,最小化代价函数,代价函数假设为

计算代价函数:

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

在训练集中添加一列,以便使用向量化的方法来计算代价和梯度。

# 在训练集中第0列添加一列数字1,命名为Ones
data.insert(0,'Ones',1)

取最后一列为 y,其余为 X

# 取最后一列为y,其余为X
# 列数
cols=data.shape[1]
# 取前cols-1列,即输入向量
X=data.iloc[:,0:cols-1]
# 取最后一列,即目标向量
y=data.iloc[:,cols-1:cols]

观察下 X (训练集) 是否正确

print(X.head())

输出结果:

转换X和Y,初始化theta。

# 转换X和y,初始化theta
X=np.matrix(X.values)
y=np.matrix(y.values)
theta=np.matrix([0,0])

计算初始代价函数的值,theta初始值为0

# 计算初始代价函数的值 (theta初始值为0).
print(computeCost(X, y, theta))# 32.072733877455676

批量梯度下降

def gradientDescent(X, y, theta, alpha, epoch):temp=np.matrix(np.zeros(theta.shape))  # 初始化一个 θ 临时矩阵(1, 2)parameters=int(theta.flatten().shape[1])  # 参数 θ的数量cost=np.zeros(epoch)  # 初始化一个ndarray,包含每次epoch的costm=X.shape[0]  # 样本数量mfor i in range(epoch):# 利用向量化一步求解temp=theta - (alpha / m) * (X * theta.T - y).T * Xtheta=tempcost[i]=computeCost(X, y, theta)return theta, cost

初始化一些附加变量 - 学习速率α和要执行的迭代次数。

alpha=0.01
epoch=1000

画出拟合图像:

# 运行梯度下降算法来将我们的参数θ适合于训练集。
final_theta, cost = gradientDescent(X, y, theta, alpha, epoch)
# 使用我们拟合的参数计算训练模型的代价函数(误差)。
computeCost(X, y, final_theta)
# 绘制线性模型以及数据,直观地看出它的拟合。
x = np.linspace(data.Population.min(), data.Population.max(), 100)  # 横坐标
f = final_theta[0, 0] + (final_theta[0, 1] * x)  # 纵坐标,利润
fig, ax = plt.subplots(figsize=(6,4))
ax.plot(x, f, 'r', label='Prediction')
ax.scatter(data['Population'], data.Profit, label='Traning Data')
ax.legend(loc=2)  # 2表示在左上角
ax.set_xlabel('Population')
ax.set_ylabel('Profit')
ax.set_title('Predicted Profit vs. Population Size')
plt.show()

运行结果:

  1. 画出代价随迭代次数变化的曲线图
# 每个训练迭代中输出一个代价的向量
fig, ax = plt.subplots(figsize=(8,4))
ax.plot(np.arange(epoch), cost, 'r')  # np.arange()返回等差数组
ax.set_xlabel('Iterations')
ax.set_ylabel('Cost')
ax.set_title('Error vs. Training Epoch')
plt.show()

运行结果图:

由图可知,随着迭代的次数增加,代价越来越小,即误差越来越小,函数逐渐收敛。
参考链接:吴恩达机器学习作业

单变量线性回归实验分析相关推荐

  1. R使用lm构建单变量线性回归模型

    R使用lm构建单变量线性回归模型 回归分析是一种应用非常广泛的统计工具,用来建立两个变量之间的关系模型(单变量回归分析).其中一个变量被称为预测变量(predictor variable),它的值是通 ...

  2. 【吴恩达机器学习】学习笔记——2.1单变量线性回归算法

    1 回顾 1.1 监督学习 定义:给定正确答案的机器学习算法 分类: (1)回归算法:预测连续值的输出,如房价的预测 (2)分类算法:离散值的输出,如判断患病是否为某种癌症 1.2 非监督学习 定义: ...

  3. 单变量线性回归模型_了解如何为单变量模型选择效果最好的线性回归

    单变量线性回归模型 by Björn Hartmann 比约恩·哈特曼(BjörnHartmann) 找出哪种线性回归模型最适合您的数据 (Find out which linear regressi ...

  4. 吴恩达《机器学习》学习笔记二——单变量线性回归

    吴恩达<机器学习>学习笔记二--单变量线性回归 一. 模型描述 二. 代价函数 1.代价函数和目标函数的引出 2.代价函数的理解(单变量) 3.代价函数的理解(两个参数) 三. 梯度下降- ...

  5. 【Machine Learning 二】单变量线性回归,代价函数,梯度下降

    吴恩达机器学习笔记整理--单变量线性回归 通过模型分析,拟合什么类型的曲线. 一.基本概念 1.训练集 由训练样例(training example)组成的集合就是训练集(training set), ...

  6. 吴恩达机器学习笔记 1单变量线性回归

    机器学习 (小白通俗理解) 机器学习包括监督学习和无监督学习 监督学习 首先,监督学习,我们所给的数据集由正确答案组成,计算机根据正确数据集对未知样本进行结果预测 无监督学习 无监督学习,所给数据集并 ...

  7. 吴恩达机器学习之单变量线性回归理论部分

    理论部分 1.方程形式 在进行数据处理过程中,有时数据图像可拟合成单变量线性函数,即 2.如何拟合 此时,我们虽知道拟合函数的形式,但如何拟合仍是个问题,怎样拟合可以最接近实际数据情况呢? 最小二乘法 ...

  8. python装饰器带参数函数二阶导数公式_机器学习【二】单变量线性回归

    吴恩达机器学习笔记整理--单变量线性回归 通过模型分析,拟合什么类型的曲线. 一.基本概念 1.训练集 由训练样例(training example)组成的集合就是训练集(training set), ...

  9. 机器学习之八大算法②and①——多变量线性回归(单变量线性回归)

    分析 线性回归分为单变量线性回归.多变量线性回归 区别 多变量比单变量多个特征缩放 代码及注释 import numpy as np import matplotlib.pyplot as plt# ...

最新文章

  1. 花式云毕业:《我的世界》建大学,日本机器人替身领证 | 网友:搞点阳间的东西...
  2. intellij idea 怎么全局搜索--转
  3. 学习笔记(Spring事务管理)
  4. 解决Mac nginx问题 [emerg] 54933#0: bind() to 0.0.0.0:80 failed (13: Permission denied)
  5. java追加txt文件_java怎么追加写入txt文件
  6. 三、Arcgis api js -- 图形管理 Layer
  7. form中的fieldset标签应用
  8. 《推荐系统笔记(五)》svd降维 —— 以图片处理为例
  9. OpenCV总结:实现马赛克和毛玻璃滤镜效果
  10. 保姆级教程,手把手教你制作数据分析报告
  11. 解决 AMD 卡 OBS 全屏录制黑屏
  12. 服务器部署Nodejs api 接口
  13. 51单片机C语言程序100例
  14. ArcGIS:矢量、栅格文件裁剪(批量处理)
  15. 使用Clang作为编译器 —— Clang 中的Diagnostic flags
  16. html地址欄小圖標,网站地址栏前面的小图标favicon.ico制作方法
  17. 【学神】1-15 linux启动及常见故障的排除
  18. Java影院网上购票管理系统_java影院售票管理系统
  19. 结构体 位段 枚举 联合体
  20. 2005考研阅读Text1翻译

热门文章

  1. android王者荣耀号苹果可以登陆吗,王者荣耀安卓转苹果什么时候开始 苹果手机可以用安卓账号登录了吗...
  2. 计算机配色故障,计算机配色不理想?究竟问题出在哪?数据库,很重要!
  3. 怎么卸载jdk 才能卸载干净(怎么卸载jdk)
  4. Pythony应用(01)-学习监控(02)
  5. 用QRCode.js制作二维码的生成器(qrcode.makeCode方法生成二维码)
  6. 电信 802.1p 设置_手机SIM卡怎么设置密码
  7. MATLAB--190903--欧拉计划(九)
  8. arduino 舵机接线图_arduino+16路舵机驱动板连接测试(示例代码)
  9. Cesium开发高级篇 | 04粒子系统
  10. Unity打包发布IOS端记录