python拟合sir模型_Python—拟合模型

在很多情况下,大家的工作会遇到y数据与x数据存在相关性,但无法知道y与x是那种相关,需要具体知道两者关系,我们可以用拟合模型来完成这个事情。

1:随机源数据

很多初学者想动手尝试的时候,苦于无源数据,就此放弃。今天小编教大家一个生成随机数据的方法。

用到numpy,pandas 两个python库。

Numpy:是python科学计算的基础包。它提供以下功能(不限于此):快速高效的多维数组对象ndarry

用于对数组执行元素级计算以及直接对数组执行数学运算的函数

用于快速读写硬盘上基于数组的数据集工具

线性代数运算,傅里叶变换,以及随机数生成

Pandas:提供了快速便捷处理结构化数据的大量数据结构和函数。

代码:

import numpy as np

import pandas as pd

array=np.random.rand(20,20) #随机生成20*20数据数据

data_df = pd.DataFrame(array)

print data_df

writer = pd.ExcelWriter('Save_Excela.xlsx')

data_df.to_excel(writer,'page_1',float_format='%.5f') # float_format 控制精度

writer.save()

如下是执行代码后,打印出来的结果。

2:刻意生成---线性关系 源数据

现在大家已经自行能够生成随机数据,显然20列数据是没有任何关系的,刚刚小编刻意保留了本地文件 Save_Excela.xlsx,代码执行完成后,各位打开excel文件,插入Y列,生成与第一列相关的数据。如下

writer = pd.ExcelFile('Save_Excela.xlsx')

table1=writer.parse('page_1')

array0 = table1.get(0) ##第一列数据

Yi= [x for x in array0] ##目的是去掉角标,只有参与模型的值

array01 = table1.get(1)

Xi= [x for x in array01]

print array0

print Yi

print Xi

如下结果分别问:array0,Yi ,Xi

3:数据模型

3.1:简单介绍

先介绍一个相关的库:Scikit—Learn

是一个强大的机器学习的库,刻意提供完整的机器学习工具箱,包括数据预处理,分类,回归,聚类,预测和模型分析。

如下,我们开头随机生成20*20数据,多了几行代码。

from pandas import Series,DataFrame ##导入数据结构(目的是转换成array识别的数组)

from sklearn import linear_model ##导入线性回归模型

import matplotlib.pyplot as plt ##导入matplotlib

假设,我们并没有from pandas import Series,DataFrame ##导入数据结构(目的是转换成array识别的数组)

那么执行模型会出现如下情况:

3.2:数据转换

转换成识别的格式

3.3:开始建模

如下结果:

1表示呈线性相关,系数为25,拟合图形如下:

如下是y与第二列的数据拟合图形:显然不成线性相关

代码:

import numpy as np

import pandas as pd

from pandas import Series,DataFrame

from sklearn import linear_model

import matplotlib.pyplot as plt

#array=np.random.rand(20,20)

#data_df = pd.DataFrame(array)

#writer = pd.ExcelWriter('Save_Excela.xlsx')

#data_df.to_excel(writer,'page_1',float_format='%.5f') # float_format 控制精度

#writer.save()

writer = pd.ExcelFile('Save_Excela.xlsx')

table1=writer.parse('page_1')

array0 = table1.get(0)

Yi= [x for x in array0]

array01 = table1.get(1)

Xi= [x for x in array01]

s1=Series(Xi) #转为series类型

s2=Series(Yi)

corr=s1.corr(s2) #计算相关系数

print corr

Xi=np.array(Xi).reshape(-1,1)

Yi=np.array(Yi).reshape(-1,1)

# 设置模型

model = linear_model.LinearRegression()

##训练数据

model.fit(Xi, Yi)

##用训练得出的模型预测数据

y_plot = model.predict(Xi)

##打印线性方程的权重

print(model.coef_) ## 0.90045842

##绘图

plt.scatter(Xi, Yi, color='red',label="样本数据",linewidth=2)

plt.plot(Xi, y_plot, color='green',label="拟合直线",linewidth=2)

plt.legend(loc='lower right')

plt.show()

以上~

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值