【Python】机器学习之单变量线性回归 利用批量梯度下降找到合适的参数值


本题目来自吴恩达机器学习视频。

题目:

你是一个餐厅的老板,你想在其他城市开分店,所以你得到了一些数据(数据在本文最下方),数据中包括不同的城市人口数和该城市带来的利润。第一列是城市的人口数,第二列是在这个城市开店所带来的利润数。

现在,假设一开始θ0和θ1都是0,利用梯度下降的方法,找到合适的θ值,其中学习速率α=0.01,迭代轮次为1000轮

上一个文章里,我们得出了CostFunction,即损失函数。

现在我们需要找到令损失函数最小的θ值,利用梯度下降函数

1、导包

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

2、之前写的CostFunction函数

def computeCost(X, y, theta):
inner = np.power(((X * theta.T) - y), 2)
return np.sum(inner) / (2 * len(X))

3、引入文件,把X和Y分开,在X左边加一列1,θ0和θ1设置为0,0

path = 'ex1data1.txt'
data = pd.read_csv(path, header=None, names=['Population', 'Profit'])
data.insert(0, 'Ones', 1)
rows = data.shape[0]
cols = data.shape[1]
X = data.iloc[:, 0:cols - 1]
Y = data.iloc[:, cols - 1:cols]
theta = np.mat('0,0')
X = np.mat(X.values)
Y = np.mat(Y.values) cost = computeCost(X, Y, theta)

4、设置更新速率α为0.01,设置迭代次数为1000次

alpha = 0.01
iters = 1500

5、写出梯度下降函数的实现

def gradientDescent(X, Y, theta, alpha, iters):
temp = np.mat(np.zeros(theta.shape)) # 一个数组,temp大小为θ的个数
parameters = int(theta.ravel().shape[1]) # 参数的个数
cost = np.zeros(iters) # 一个数组,存着每次计算出来的costFunction的值 for i in range(iters):
error = (X*theta.T)-Y; #误差值
for j in range(parameters):
term = np.multiply(error,X[:, j])
temp[0,j] = theta[0,j] - ((alpha/len(X)) * np.sum(term))
theta = temp
cost[i] = computeCost(X,Y,theta)
return theta, cost

解析:

temp数组存的是临时变量,因为所有的θ需要同步更新,所以先存入临时变量中,后面计算完所有θ的值后再同步更新。

parameters是一个int值的数,即有多少个变量,本题中有θ0和θ1,所以parameters=2

cost是一个数组,大小和迭代次数一样,每一层存放当前迭代次数下的CostFunction的返回值

6、调用函数,并返回结果

g, cost = gradientDescent(X, Y, theta, alpha, iters)
print(g)

最后结果g=[[-3.24140214  1.1272942 ]]

即最后的θ0=-3.24 θ1=1.127

7、把图打出来,看看是否收敛

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

发现随着迭代次数iters的增大,损失慢慢的降低,所以有效,计算正确。

PS:数据集在机器学习的第一篇中的最下方。

【Python】机器学习之单变量线性回归 利用批量梯度下降找到合适的参数值的更多相关文章

  1. 【Python】机器学习之单变量线性回归 利用正规方程找到合适的参数值

    [Python]机器学习之单变量线性回归 利用正规方程找到合适的参数值 本次作业来自吴恩达机器学习. 你是一个餐厅的老板,你想在其他城市开分店,所以你得到了一些数据(数据在本文最下方),数据中包括不同 ...

  2. 机器学习 (一) 单变量线性回归 Linear Regression with One Variable

    文章内容均来自斯坦福大学的Andrew Ng教授讲解的Machine Learning课程,本文是针对该课程的个人学习笔记,如有疏漏,请以原课程所讲述内容为准.感谢博主Rachel Zhang的个人笔 ...

  3. 吴恩达机器学习(二) 单变量线性回归(Linear Regression with one variable)

    一.模型表示 1.一些术语 如下图,房价预测.训练集给出了房屋面积和价格,下面介绍一些术语: x:输入变量或输入特征(input variable/features). y:输出变量或目标变量(out ...

  4. 机器学习之单变量线性回归(Linear Regression with One Variable)

    1. 模型表达(Model Representation) 我们的第一个学习算法是线性回归算法,让我们通过一个例子来开始.这个例子用来预测住房价格,我们使用一个数据集,该数据集包含俄勒冈州波特兰市的住 ...

  5. 【Python】机器学习之单变量线性回归练习(计算Cost Function)

    注:练习来自于吴恩达机器学习 翻译后的题目: 你是一个餐厅的老板,你想在其他城市开分店,所以你得到了一些数据(数据在本文最下方),数据中包括不同的城市人口数和该城市带来的利润.第一列是城市的人口数,第 ...

  6. python 单变量线性回归

      单变量线性回归(Linear Regression with One Variable)¶ In [54]: #初始化工作 import random import numpy as np imp ...

  7. 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 2_Linear regression with one variable 单变量线性回归

    Lecture2   Linear regression with one variable  单变量线性回归 2.1 模型表示 Model Representation 2.1.1  线性回归 Li ...

  8. 机器学习第2课:单变量线性回归(Linear Regression with One Variable)

    2.1  模型表示 之前的房屋交易问题为例,假使我们回归问题的训练集(Training Set)如下表所示: 我们将要用来描述这个回归问题的标记如下: m                代表训练集中实 ...

  9. 机器学习(二)--------单变量线性回归(Linear Regression with One Variable)

    面积与房价 训练集 (Training Set) Size       Price 2104       460 852         178 ...... m代表训练集中实例的数量x代表输入变量 ...

随机推荐

  1. zabbix通过钉钉报警

    1.创建报警脚本  vim /usr/local/share/zabbix/alertscripts/dingalert.py #!/usr/bin/env python import json im ...

  2. 002_STM32程序移植之_DHT11

    1. 测试环境:STM32C8T6 2. 测试模块:DHT11温湿度模块 3. 测试接口: 1. DHT11温湿度模块接口: DS1302引脚 ---------单片机引脚 VCC---------- ...

  3. 019_linux驱动之_定时器的引入

    (一)定义一个timer_list定时器结构体,linux 内核定时器 timer_list详解 (二)初始化定时器,当超时时间expires到之后会调用buttons_timer_function函 ...

  4. java项目添加log4j打印日志+转换系统时间

    1.pom.xml文件引入依赖如下: <dependency> <groupId>org.springframework.boot</groupId> <ar ...

  5. [DK] 化学竞赛的大奖

    https://www.luogu.org/problemnew/show/T16502 无向图  缩点  树的直径  到直径两个端点的距离的较大值 #include <iostream> ...

  6. MySQL数据分析-(14)表补充:字符集

    大家好,我是jacky朱元禄,很高兴继续跟大家学习<MySQL数据分析实战>,本节课程jacky分享的主题是表补充之字符集 在分享课程之前,jacky在跟大家强调一下逻辑的重要性,我们学习 ...

  7. vue 使用 echart ,自定义样式案例

    1.vue 安装 echart 库 npm install echarts --save 2.vue代码 引入 let echarts = require("echarts/lib/echa ...

  8. JavaWeb_(Mybatis框架)MyBatis Generator简单入门

    官方文档 传送门 下载地址 传送门 MyBatis Generator(MBG)简介: MyBatis Generator(MBG)是MyBatis MyBatis 和iBATIS的代码生成器.它将为 ...

  9. Tecplot中如何计算Ma数(马赫数)【转载】

    转载自:http://blog.163.com/wanglei2146073@126/blog/static/90689607201282555055144/ fluent是我们常用的CFD软件,但由 ...

  10. Java并发指南4:Java中的锁 Lock和synchronized

    Java中的锁机制及Lock类 锁的释放-获取建立的happens before 关系 锁是java并发编程中最重要的同步机制.锁除了让临界区互斥执行外,还可以让释放锁的线程向获取同一个锁的线程发送消 ...