美文网首页
一元线性回归

一元线性回归

作者: WuYankang | 来源:发表于2020-09-24 17:18 被阅读0次

B站覃秉丰机器学习课程实战练习,感兴趣的小伙伴可以去看原视频学习,老师讲的很仔细,没时间看视频学习的小伙伴也可以看我的练习代码,作为小白的我是从最简单的一元线性回归学起,可能也许大概会持续更新🙃


基础知识

回归分析(Regression):建立方程模拟两个或多个变量之间的关联,最简单的回归就是一元线性回归了。

一元线性回归
代价函数(Cost Function):用于评估回归方程和真实值之间的误差。对于一元线性回归,代价函数是以θ0和θ1为自变量的函数。
代价函数
回归分析目的:求解代价函数的最小值,以确定θ0和θ1。
梯度下降法(Gradient Descent):梯度下降法求解最优模型,使得代价函数达到全局最小值或局部极小值。梯度下降的过程是先初始化θ0和θ1,之后不断改变θ0和θ1,直到代价函数达到全局最小值或局部最小值。θ0/θ1每次改变多少呢?Δθ的值为代价函数J对θ0或θ1求在(θ0,θ1)处的偏导再乘以学习率(learning rate),分别求出Δθ0和Δθ1后同时更新θ0和θ1。下图是梯度下降的过程。
梯度下降法
代价函数求导函数比较简单,结果为下图:
梯度下降法
之后就是通过程序实现梯度下降的过程。

Python实现一元线性回归

import numpy as np
import matplotlib.pyplot as plt
#随机生成x,y,在y=x上下浮动
x = np.arange(10,100) + np.random.uniform(-10,10,90)
y = np.arange(10,100) + np.random.uniform(-10,10,90)
#画个散点图
plt.scatter(x,y)
plt.show()
散点图
#学习率
lr = 0.0001
#初始化截距/theta0/bias
b = 0
#初始化斜率/theta1
k = 0
#最大迭代次数
epochs = 50

#代价函数
def cost(b, k, x, y):
    the_cost = 0
    for i in range(len(x)):
        the_cost += ((b + k * x[i]) - y[i])**2
    return the_cost / 2*len(x)

#梯度下降
def gradient_descent_runner(b,k,x,y,lr,epochs):
    #样本点数量
    m = len(x)
    #循环epochs次进行梯度下降
    for i in range(epochs):
        b_grad = 0
        k_grad = 0
        for j in range(m):
            b_grad += (1/m)*(b+k*x[j]-y[j])
            k_grad += (1/m)*(b+k*x[j]-y[j])*x[j]
        b = b - b_grad * lr
        k = k - k_grad * lr

        #每循环5次进行一次输出,感受一下梯度下降的过程
        if i % 5 == 0:
            print('###第{}次循环###'.format(i+1)) 
            print('b={}'.format(b))
            print('k={}'.format(k))
            print('cost is {}'.format(cost(b,k,x,y)))  
            plt.plot(x, y, 'b.')
            plt.plot(x, k*x+b, 'r')
            plt.show()
        
    return b, k

result = gradient_descent_runner(b,k,x,y,lr,epochs)
print('The final model is:')
print('b = {}'.format(result[0]))
print('k = {}'.format(result[1]))
print('Error = {}'.format(cost(result[0],result[1],x,y)))
  

结果:


一元线性回归

Sklearn 实现一元线性回归

通过sklearn实现一元线性回归就非常简单了。

from sklearn.linear_model import LinearRegression
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

datadf = pd.read_csv('data0.csv')    #从文件中读取数据,数据和上面类似
x = datadf['x']     #x,y类型为series      
y = datadf['y']
plt.scatter(x, y)
x = x[:, np.newaxis]    #x在列上新增一维, model输入要求为2D。也可使用reshape
y = y[:, np.newaxis]    #y可不增加维度

model = LinearRegression()
model.fit(x, y)

#画模型拟合线
plt.plot(x, y, 'b.')
plt.plot(x, model.predict(x), 'r')
plt.show()

最后的结果:


一元线性回归

相关文章

  • 2020-02-14

    线性回归:线性回归分为一元线性回归和多元线性回归,一元线性回归用一条直线描述数据之间的关系,多元回归是用一条曲线描...

  • Matlab一元/多元回归(后续会有更新)

    一元线性回归&一元非线性回归 多元回归/逐步回归 多元回归 先画散点图,看有没有线性性质,再决定能不能用多元线性回...

  • 一元线性回归方程

    目标:写清楚一元线性回归分析的全部过程。 一元线性回归分析步骤: 确定变量variable:independent...

  • 数学建模系列笔记2:回归和时间序列

    数学建模 @[toc] 3-1-1 一元线性回归 一般,假设 若 称为一元正态线性回归模型 回归分析要解决的主要问...

  • 机器学习

    1.线性回归 1.1一元线性回归 y=a+bx 1.2多元线性回归 y=a+b1x1+b2x2+...+bnxn ...

  • 机器学习第4天:线性回归及梯度下降

    联系我:ke.zb@qq.com我的技术博客:明天依旧可好-CSDN 一、简单线性回归(即一元线性回归) 线性回归...

  • 多元线性回归

    前言 一元线性回归只是让我们好理解回归这个概念。在实际中特征很少说只有一个。所有就有多元线性回归。 概念 与一元线...

  • 2020-08-13--线性回归01

    线性回归算法简介 解决回归问题 思想简单,容易实现 许多强大的非线性模型的基础 结果具有很好的 线性回归分为一元线...

  • Multiple Regression——多元回归

    在上一节线性回归内容中,我们提到了多元线性回归例如下图中,左边是一元线性回归,右边是二元线性回归,中间为体长观察值...

  • 2020-08-19

    线性回归模型 一元线性回归模型 “一元”就是指单个特征。 通过预测房价的问题作为例子。 将训练集中的数据用图像的形...

网友评论

      本文标题:一元线性回归

      本文链接:https://www.haomeiwen.com/subject/xqzzyktx.html