实例演示如何通过统计计算和线性回归模型(Linear model)对比两组数据

实例演示如何通过统计计算和回归模型(Linear model)对比两组数据

系统环境

系统:WIin10
编译器:Anaconda3 下的 Jupyter Notebook 6.0.1
语言:Python 3.7.4
Github:LinearRegression_Sample(供下载测试,走过路过给颗星呗)
欢迎大家讨论相关问题~

0 库引用

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

1 Plot设置

plt.rcParams['font.sans-serif'] = ['SimHei'] # 显示中文
plt.rcParams['axes.unicode_minus'] = False   # 显示负号
plt.rcParams['figure.dpi'] = 540             # 图片清晰度
size = 11                                    # 图字体大小

2 Sample设置

N=500            # 假设总体数为500
n=300            # 假设样本数为300
ylabel = '风速'  # 假设为风速数据
unit = 'm/s'     # 风速单位

3 获取数据

这里使用的是随机数据,稍微加了亿点点转换,让数据看上去更加真实亿点点 😛

# 风速数据
# 让它看起来真实一点!
data1 = np.random.rand(n)
data2 = np.random.rand(n)

data1 = (data1-0.5)*1.5
data2 = (data2-0.5)*1.5

data1 = np.abs(data1 + [i/100 for i in range(n)])
data2 = np.abs(data2 + [i/100 for i in range(n)])

4 数据分析

numpy 自带有相关系数、算术平均值、和标准差的计算,记得有效利用 😃

r = np.corrcoef(data1,data2)[0,1]   # 相关系数
X=data1.reshape(n,1)        # 数据格式转换
y=data2.reshape(n,1)        # 数据格式转换
m = np.mean(y-X)            # 系统差
s = np.std(y-X)             # 标准差

5 Plot

model = LinearRegression()
model.fit(X,y)                   # 数据录入线性回归模型
intercept = model.intercept_[0]  # 获取 intercept
coef = model.coef_[0][0]         # 获取 slope

X2 = [[np.min(X)],[np.max(X)]]   # 取出 x 最大最小值
y2 = model.predict(X2)           # 用 x 最大最小值计算对应 y 的值
X3 = [np.min(X),np.max(X)]       # 取出 x 最大最小值来画基准线
y3 = [np.min(X),np.max(X)]       # 取出 x 最大最小值来画基准线

fig2 = plt.figure(figsize=(8,8))
plt.plot(X,y,'k.')     # 点图
plt.plot(X2,y2,'r-')   # 线性回归模型
plt.plot(X3,y3,'b--')  # 基准线

plt.legend([ylabel,'y='+str(round(intercept,4))+'+'+str(round(coef,4))+'x','y=x'],
           bbox_to_anchor=(1,1),fontsize = size) # label,model,baseline
plt.text(0,np.max(X),
         'N={}\nn={}\nx={}{}\ns={}{}\nr={}'.format(N,n,round(m,3),unit,round(s,3),unit,round(r,3)),
         verticalalignment='top',fontsize = size,color='r') # size, sample size, difference mean, difference std, correlation
plt.xlabel('实际测得风速'+ylabel,fontdict={'size':size})
plt.ylabel('真实风速'+ylabel,fontdict={'size':size})
plt.title(ylabel+'相关对比图',fontdict={'size':size})
plt.tick_params(labelsize=size-3)
fig2.tight_layout()
plt.show

6 效果图

Linear Model

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值