• 简介

在这节练习中,建立一个一元线性回归模型,以预测食品配送的利润。假设你是一家连锁餐厅的老板,正在考虑在不同的城市开设一家新的餐厅。这个连锁店在各个城市都可以配送,并且你有这个城市的利润和人口数据。

ex1data1.txt文件包含了线性回归问题的数据集。第一列是城市的人口数据,第二列是食品配送的利润,负值表示亏损。

  • 绘制数据

对于这个数据集,可以使用散点图来可视化数据,因为它只有两个属性要绘制(利润和人口)。

# PLOTDATA Plots the data points x and y into a new figure
#   PLOTDATA(x,y) plots the data points and gives the figure axes labels of
#   population and profit.
from matplotlib import pyplot as plt
import numpy as npdef plotData(x, y):plt.title("Training data")plt.xlim(4, 24)plt.ylim(-5, 25)plt.xticks(np.arange(4, 25, 2))plt.yticks(np.arange(-5, 26, 5))plt.xlabel("Population of City in 10,000s")plt.ylabel("Profit in $10,000s")plt.scatter(x, y, s=100, c='r', marker='x')plt.show()

如图:

若要加上线性回归拟合直线,加上预测值y_即可:

def plotLinearFit(x, y, y_):plt.title("Linear Regression")plt.xlim(4, 24)plt.ylim(-5, 25)plt.xticks(np.arange(4, 25, 2))plt.yticks(np.arange(-5, 26, 5))plt.xlabel("Population of City in 10,000s")plt.ylabel("Profit in $10,000s")plt.scatter(x, y, s=100, c='r', marker='x')plt.plot(x, y_, linestyle='-')plt.legend(scatterpoints=1, labels=['Linear regression', 'Training data'], loc=4)plt.show()
  • 梯度下降

这一部分使用梯度下降将线性回归参数θ拟合到数据集。

1.更新公式

线性回归的目标是最小化代价函数J(θ):

其中假设函数由线性模型给出:

模型的参数是,调整它来最小化代价函数J(θ),一种方法是采用批梯度下降算法,在批梯度下降中,每次迭代执行更新:

(同时更新所有的

随着梯度下降的每一次迭代,参数会更接近最优值,达到最低代价J(θ)。

2.初始化

将初始参数初始化为0,学习速率alpha初始化为0.01。

3.计算代价函数J(θ)

在执行梯度下降以学习最小化代价函数J(θ)时,通过计算代价来监控收敛性是很有帮助的。这一部分实现一个计算J(θ)的函数,以便检查梯度下降实现的收敛性。

# COMPUTECOST Compute cost for linear regression
#   J = COMPUTECOST(X, y, theta) computes the cost of using theta as the
#   parameter for linear regression to fit the data points in X and ydef computeCost(X, y, theta):m = len(y)J = 0for i in range(m):J += (float(X[i].dot(theta)) - y[i])**2return J/(2*m)

4.梯度下降

# GRADIENTDESCENT Performs gradient descent to learn theta
#   theta = GRADIENTDESCENT(X, y, theta, alpha, num_iters) updates theta by
#   taking num_iters gradient steps with learning rate alpha
from computeCost import computeCost
import numpy as npdef gradientDescent(X, y, theta, alpha, num_iters):m = len(y)  # number of training examplesJ_history = np.zeros(shape=(num_iters, 1))for i in range(num_iters):deriv_0 = 0deriv_1 = 0for j in range(m):deriv_0 += float(X[j].dot(theta))-y[j]deriv_1 += (float(X[j].dot(theta))-y[j])*X[j][1]theta[0] -= deriv_0*alpha/mtheta[1] -= deriv_1*alpha/m# Save the cost J in every iterationJ_history[i] = computeCost(X, y, theta)if i % 300 == 0:print("After %d steps, the cost function:" % i, J_history[i])print("the gradient:", theta)return theta

线性回归拟合数据得到的结果如图:

  • 可视化代价函数J(θ)

为了更好地理解代价函数J(θ),在值的二维网格上绘制三维代价函数曲线图。

具体代码参考:https://github.com/hanmy1021/MachineLearning

一元线性回归(Linear Regression)相关推荐

  1. Coursera公开课笔记: 斯坦福大学机器学习第四课“多变量线性回归(Linear Regression with Multiple Variables)”

    Coursera公开课笔记: 斯坦福大学机器学习第四课"多变量线性回归(Linear Regression with Multiple Variables)" 斯坦福大学机器学习第 ...

  2. Coursera公开课笔记: 斯坦福大学机器学习第二课“单变量线性回归(Linear regression with one variable)”

    Coursera公开课笔记: 斯坦福大学机器学习第二课"单变量线性回归(Linear regression with one variable)" 发表于 2012年05月6号 由 ...

  3. Ng第二课:单变量线性回归(Linear Regression with One Variable)

    二.单变量线性回归(Linear Regression with One Variable) 2.1  模型表示 2.2  代价函数 2.3  代价函数的直观理解 2.4  梯度下降 2.5  梯度下 ...

  4. Stanford机器学习---第二讲. 多变量线性回归 Linear Regression with multiple variable

    本栏目(Machine learning)包括单参数的线性回归.多参数的线性回归.Octave Tutorial.Logistic Regression.Regularization.神经网络.机器学 ...

  5. 机器学习方法:回归(一):线性回归Linear regression

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 开一个机器学习方法科普系列:做基础回顾之用,学而时习之:也拿出来与大家分享.数学水平有限,只求易懂,学习与工 ...

  6. 复盘:手推LR(逻辑回归logistics regression),它和线性回归linear regression的区别是啥

    复盘:手推LR(逻辑回归logistics regression),它和线性回归linear regression的区别是啥? 提示:系列被面试官问的问题,我自己当时不会,所以下来自己复盘一下,认真学 ...

  7. 线性回归 Linear Regression 与逻辑回归 Logistic Regression

    1 线性回归 Linear Regression 理论 线性回归模型研究多个变量x与y之间的关系,通过回归模型预测位置样本的数据. 假设函数 损失函数 损失函数寻优,最小二乘法 即: 注:最小二乘法需 ...

  8. 西瓜书+实战+吴恩达机器学习(四)监督学习之线性回归 Linear Regression

    文章目录 0. 前言 1. 线性回归参数求解方法 2. 线性回归正则化 2.1. 岭回归 2.2. LASSO 3. 局部加权线性回归 4. 广义线性模型 如果这篇文章对你有一点小小的帮助,请给个关注 ...

  9. 多元线性回归算法: 线性回归Linear Regression、岭回归Ridge regression、Lasso回归、主成分回归PCR、偏最小二乘PLS

    0. 问题描述 输入数据:X=(x1,x2,....,xm)\mathbf{X} = (x_1, x_2,...., x_m)X=(x1​,x2​,....,xm​), 相应标签 Y=(y1,y2,. ...

  10. 线性回归 linear regression

    回归一词,指的是我们根据已有的数据,预测出一个准确的输出值. 假设函数 一元线性回归的假设函数模型: hθ(x)=θ0+θ1∗xh_{θ}(x) = θ_0 + θ_1 * xhθ​(x)=θ0​+θ ...

最新文章

  1. Linux设置程序开机启动-tomcat开机启动
  2. Java实用教程笔记 类与对象
  3. maven 导入数据库
  4. jquery.cookie.js 使用方法
  5. 促使整个团队改善的首要驱动力一定来自技术领域
  6. ad采样做按键开关_电池应用中的电流采样电阻设计
  7. 电脑投屏软件哪个好_无线投屏器和软件投屏的区别是什么,哪个更好用?
  8. .net工具类 获取枚举类型的描述
  9. paip.java 注解的详细使用代码
  10. android viewflipper 动态加载,Android开发之ViewFlipper自动播放图片功能实现方法示例...
  11. DB2 SQLCODE 异常大全编辑(一)
  12. 人肉搜索、人肉语言及人肉程序设计
  13. SpCL阅读笔记:Self-paced Contrastive Learning with Hybrid Memory for Domain Adaptive Object Re-ID
  14. php 爬取股票数据库,【实例】--股票数据定向爬取
  15. Office 2010 中受保护的视图
  16. 关于ARM的内核架构
  17. pycharm pep8 代码格式化
  18. MVC与MVVM区别
  19. linux所说的挂载是什么意思
  20. (hiho一下第三周)#1015 KMP算法 【模版】

热门文章

  1. OS开发(Objective-C)常用库索引
  2. C++类成员函数的传参问题
  3. (转载)C#中如何获取当前路径的几种方法
  4. [转]有关TinyXML使用的简单总结
  5. TanDEM-X 90m DEM介绍与下载
  6. 使用sobel、prewitt、拉普拉斯算子、差分法提取图像的边缘
  7. ImageLoader的简单分析(五)
  8. 关于socket的简单的客户服务端编程
  9. 年度回顾 | 2019 年的 Apache Flink(文末有福利)
  10. 改 3 行代码不应该花一整天的时间