问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

一元线性回归——最小二乘法详细介绍

创作时间:
作者:
@小白创作中心

一元线性回归——最小二乘法详细介绍

引用
CSDN
1.
https://blog.csdn.net/m0_74383359/article/details/139634992

最小二乘法是机器学习中一个非常重要且基础的算法,它不是回归分析本身,而是一种用于执行回归分析的技术。通过最小化预测值与实际值之间的误差平方和来估计回归模型的参数,从而帮助我们找到描述因变量和自变量之间关系的最佳拟合线或曲线。

最小二乘法介绍

形如:y=k*x+b的图像。我们可以根据点到直线的距离计算出距离,使得距离最小。得到一个关于k与b的一元线性方程。为了使得距离最小,在高等数学里面一般就是求导、当倒数等于零时取最小。所以说我们要对这个一元线性方程对k,b分别进行求导。最后算出两个关于k和b的式子到这一步基本上我们回归方程基本构建完成。

使用Python实现步骤

1. 引入库

import numpy as np
import matplotlib.pyplot as plt

2. 读入数据

编写一个读取csv的函数,提取出数据以及标签

def reed_csv():
    data = np.genfromtxt("太阳镜销售数据集.csv", delimiter=',')
    x = data[:, 1]
    y = data[:, 0]
    print(data)
    return x, y

# 运行结果:
[[ 75.   2.]
 [ 90.   5.]
 [148.   6.]
 [183.   7.]
 [242.  22.]
 [263.  25.]
 [278.  28.]
 [318.  30.]
 [256.  22.]
 [200.  18.]
 [140.  10.]
 [ 80.   2.]]

3. 逻辑实现

3.1 这里用三个自定义函数搞定
第一个函数(kbcost)用于计算斜率以及截距和损失值
def kbcost(x, y):
    L = len(x)
    # 获取当前数据的长度
    x_sum = np.sum(x)  # 计算和
    y_sum = np.sum(y)
    x_avg = x_sum/L  # 平均值计算
    y_avg = y_sum/L
    tmp1 = 0
    tmp2 = 0
    for i in range(L):  # 在L里面经行循环遍历i
        tmp1 += (x[i]-x_avg)*(y[i]-y_avg) 
        tmp2 += (x[i]-x_avg)**2
    k = tmp1 / tmp2
    b = y_avg - k * x_avg
    cost = 0
    for i in range(L):
        cost += (y[i]-k*x[i]-b)**2
    cost = cost/L
    return k, b, cost
第二个函数用于画图,将我们求的k,和b值绘制成线性方程
def darw_L(x, y, k, b):
    plt.scatter(x, y)
    plt.plot(x, k*x+b, 'r')
    plt.show()

最后一个主函数

调用read_csv()函数将变量保存在x,y里面无需参数,
调用kbcost(x,y)函数用于计算k,b,cost传入参数为x,y,\
在进行可视化,画出一元线性回归方程
最后用户随机输入一个值经行预测,并且计算损失值

if __name__ == "__main__":
    x, y = reed_csv()
    k, b, cost = kbcost(x, y)
    print(cost)
    darw_L(x, y, k, b)
    x_in = int(input())
    print(x_in*k+b)

总结

最小二乘法是机器学习最重要最基础的一个算法,最小二乘法不是回归分析本身,而是一种用于执行回归分析的技术。它通过最小化预测值与实际值之间的误差平方和来估计回归模型的参数,从而帮助我们找到描述因变量和自变量之间关系的最佳拟合线或曲线。

完整项目参考GitHub(Gitee)ZMCpythonProject: 人工智能机器学习代码 (gitee.com)

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号