提示
目录
因为工作最近需要对数据进行拟合生成指标
所以打算写一个含有十种函数的拟合模型,去看那种拟合的r2最高,将r2最高的函数函数作为最终拟合函数。
一、最后的成果
用n 组数据生产 n组数据 拟合十种回归,保留r2最大的画出期曲线和散点图,标注好函数公式,(图是假数据,已经打码处理,大概理解下就行)
下是本篇文章正文内容,下面案例可供参考
二、导入数据
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
##
io=r'C:\Users\Viki\Desktop\****'#根据自己的需要换
city_pr2=pd.read_excel(io,sheet_name='Sheet1')
三、将数据中的自变量因变量都抽出来,进行九种回归拟合
1.代码如下:
df_d = pd.DataFrame(columns=('名称','类型','r2','系数'))
from sklearn.metrics import r2_score
#我这里原本是写了循环的 因为这种回归,肯定不是一组数据进行十种回归,这样还不如用spss
#所以这里是有 city_pr2['标签']==i 里面每个标签拿出来的数据都回归十次,选出每组数据r2最大的回归#函数,感觉大家都会加循环,我就不删了,方便大家改,可能让人难懂~算了随缘
for i in a:
jj=city_pr2[(city_pr2['位置']==i)]
# jj=city_pr2
#十种函数的回归从这里开始写了~
##线性
x_data_2=jj[['自变量']].values.tolist()
y_data_2=jj[['因变量']].values.tolist()
x_data_2=sum(x_data_2,[])
y_data_2=sum(y_data_2,[])
L=np.polyfit(x_data_2, y_data_2, 1)
print(L)
Z=np.polyval(L,x_data_2,)
score = r2_score(y_data_2, Z, multioutput='raw_values')
print('线性:'+str(score))
new=pd.DataFrame({'名称':i,
'类型':'线性',
'r2':score,
'系数':[L]})
df_d=df_d.append(new,ignore_index=(True))
##指数
x_data_2=jj[['自变量']].values.tolist()
y_data_2=jj[['因变量']].values.tolist()
x_data_2=sum(x_data_2,[])
y_data_2=sum(y_data_2,[])
L=np.polyfit(x_data_2, np.log(y_data_2), 1)
Z=np.polyval(L,x_data_2)
true=np.exp(Z)
score = r2_score(y_data_2,true, multioutput='raw_values')
print('指数:'+str(score))
new=pd.DataFrame({'名称':i,
'类型':'指数',
'r2':score,
'系数':[L]})
df_d=df_d.append(new,ignore_index=(True))
##二次
x_data_2=jj[['自变量']].values.tolist()
y_data_2=jj[['因变量']].values.tolist()
x_data_2=sum(x_data_2,[])
y_data_2=sum(y_data_2,[])
L=np.polyfit(x_data_2, y_data_2, 2)
print(L)
Z=np.polyval(L,x_data_2,)
score = r2_score(y_data_2, Z, multioutput='raw_values')
print('二次:'+str(score))
new=pd.DataFrame({'名称':i,