线性回归(百米赛跑python)

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
x = [1940,1960,1980,2000,2020] #年份,顺序为1940,1960,1980,2000,2020
x = np.reshape(x,newshape=(5,1)) / 1000.0
y =  [21332, 20162, 19138, 18621, 18016] #百米赛跑需要的时间,单位为毫秒
y = np.reshape(y,newshape=(5,1)) / 10000.0
plt.scatter(x,y) #先绘制散点图

在这里插入图片描述

数据分析 Data Analysis

看样子像一条直线

算法采用 Algorithm

模型 Model
损失函数 Cost Function
优化方法 Optimization Method
模型 -> 损失函数 -> 优化方法

def model(a, b, x):
    return a*x + b #预测模型表达式

def cost_function(a, b, x, y):
    n = 5
    return 0.5/n * (np.square(y-a*x-b)).sum() #代价函数的计算

def optimize(a,b,x,y):
    n = 5
    alpha = 1e-1
    y_hat = model(a,b,x)
    da = (1.0/n) * ((y_hat-y)*x).sum() #梯度下降法
    db = (1.0/n) * ((y_hat-y).sum()) #梯度下降法
    a = a - alpha*da
    b = b - alpha*db
    return a, b

初始化

a = 0
b = 0

第一次遍历

def iterate(a,b,x,y,times):
    for i in range(times):
        a,b = optimize(a,b,x,y)

    y_hat=model(a,b,x)
    cost = cost_function(a, b, x, y)
    print (a,b,cost)
    plt.scatter(x,y)
    plt.plot(x,y_hat)
    return a,b
a,b = iterate(a,b,x,y,1)

在这里插入图片描述

继续遍历

a,b = iterate(a,b,x,y,5)

在这里插入图片描述

a,b = iterate(a,b,x,y,10)

在这里插入图片描述

a,b = iterate(a,b,x,y,100)

在这里插入图片描述

a,b = iterate(a,b,x,y,10000) #迭代10000次

在这里插入图片描述

a,b = iterate(a,b,x,y,90000) #迭代90000次,发现拟合效果比较好

在这里插入图片描述

模型评价

计算R平方

y_hat=model(a,b,x)
y_bar = y.mean()
SST = np.square(y - y_bar).sum()
SSR = np.square(y_hat - y_bar).sum()
SSE = np.square(y_hat - y).sum()
SST, SSR, SSE
y_hat
y_hat-y

证明 SST=SSR+SSE

error = SST - SSR -SSE
error
R_Square = SSR/SST
R_Square
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木头科技

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值