基于jupyter notebook的python编程-----运用最小二乘法,导入文件数据模拟一元线性回归分析

基于jupyter notebook的python编程-----运用最小二乘法,导入文件数据模拟一元线性回归分析


**在进行人工智能与机器学习的时候,线性回归是我们必须经历的一步,而利用最小二乘法模拟线性回归分析是基础,本次博客,我们将学习 如何利用最小二乘法,导入文件数据,进行线性回归的模拟!**

一、运行jupyter notebook,搭建python环境

1、打开Windows终端命令行,输入jupyter notebook,打开我们的jupyter工具,如下所示:

在这里插入图片描述

2、在jupyter的web网页中创建python文件,如下所示:

在这里插入图片描述

3、现在就可以在jupyter的代码行里面输入我们的代码啦!

二、以下列的csv文件为例,编写我们的最小二乘法的python代码的分解步骤

在这里插入图片描述
文件内容如下:
在这里插入图片描述
文件中为体重X,身高Y的线性回归关系

1、导入我们需要的基本库

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

2、导入我们数据文件mytest.csv

points = np.genfromtxt("D:/mytest.csv",delimiter=",")
#print(points)#输入我们文件内容,这里注释掉,有想看文件内容的小伙伴可以去掉注释,打印出来!

3、为我们的x,y赋值采样

x=points[0:20,1];
y=points[0:20,2];

以上的代码的含义是:
自变量x的取值为0~20行,第2列的数据,也就是我们的体重
因变量y的取值为0~20行,第3列的数据,也就是我们的身高

如下图:
在这里插入图片描述
上述表示,我们只取前20行的数据进行线性回归的拟合,举一反三,如果我们需要取200行,200行,我们就可以如下所示修改:
1)、前200行数据的x,y赋值

x=points[0:200,1];
y=points[0:200,2];

2)、前2000行数据的x,y赋值

x=points[0:2000,1];
y=points[0:2000,2];

4、下面就是我们最小二乘法的算法编写,求y=ax+b中的ab

x_mean = np.mean(x)
y_mean = np.mean(y)
xsize = x.size
zi = (x * y).sum() - xsize * x_mean *y_mean
mu = (x ** 2).sum() - xsize * x_mean ** 2
# 参数a b
a = zi / mu
b = y_mean - a * x_mean
# 这里对参数保留两位有效数字
a = np.around(a,decimals=2)
b = np.around(b,decimals=2)

那么,以上的公式是怎么来的呢?这就要用到我们最小二乘法计算线性回归的计算公式,如下:
在这里插入图片描述
以上的python算法就来自这个公式,最后结果只保留两位有效数字哦!

5、输出打印我们求出的线性回归方程

print(f'回归线方程:y = {a}x + {b}') 

6、通过skleran画出拟合曲线图

#借助第三方库skleran画出拟合曲线
y1 = a*x + b
plt.scatter(x,y)
plt.plot(x,y1,c='r')

以上就是我们通过最小二乘法进行一元线性回归模拟的全部过程,比较简单,应该都可以理解!

三、python最小二乘法的全部源码

#用jupyter编程(不借助第三方库),用最小二乘法,
#当体重X变量取20个的时候
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
points = np.genfromtxt("D:/mytest.csv",delimiter=",")
#points
#提取points中的两列数据,分别作为x,y
# 回归方程y = ax + b           求a 和 b
x=points[0:20,1];
y=points[0:20,2];
x_mean = np.mean(x)
y_mean = np.mean(y)
xsize = x.size
zi = (x * y).sum() - xsize * x_mean *y_mean
mu = (x ** 2).sum() - xsize * x_mean ** 2
# 参数a b
a = zi / mu
b = y_mean - a * x_mean
# 这里对参数保留两位有效数字
a = np.around(a,decimals=2)
b = np.around(b,decimals=2)
print(f'回归线方程:y = {a}x + {b}') 
#借助第三方库skleran画出拟合曲线
y1 = a*x + b
plt.scatter(x,y)
plt.plot(x,y1,c='r')

四、shift+enter运行我们的代码

1、运行结果如下图所示:

在这里插入图片描述

2、可以看出,以上是我们通过python代码拟合的自变量X(体重)取值20个的线性回归方程,接下来我们通过wps的excel对同样的数据,同样的20个取值,与我们最小二乘法的结果对比,如下图所示:

在这里插入图片描述
可以看出,python拟合出来的线性回归和我们excel拟合的线性回归的方程,大致一样,就是有效数字的问题,可以看出,我们编写的代码还是比较完美的!

3、给出自变量X取值200个和2000个的线性回归方程,大家可以自己修改x,y赋值来做!

1)、取值200个x
在这里插入图片描述
对比excel:
在这里插入图片描述
2)、取值2000个x
在这里插入图片描述
对比excel:
在这里插入图片描述
以上就是我们本次博客的全部内容,希望通过本次博客,大家可以更好的理解最小二乘法求线性回归方程哦!
遇到问题的小伙伴评论区留言哦,学长给你们耐心解答!
陈一月的又一天编程岁月^ _ ^

发布了38 篇原创文章 · 获赞 32 · 访问量 5977

猜你喜欢

转载自blog.csdn.net/qq_42451251/article/details/104801182