import pandas as pd
import numpy as np
class_amount = 2
experiment_amount_per_class = 10
observation_amount_per_experiment = 10
experiment = np.repeat(
['experiment' + str(i+1) for i in range(class_amount*experiment_amount_per_class)],
observation_amount_per_experiment
)
x1 = np.tile(
[i+1 for i in range(class_amount*experiment_amount_per_class)],
observation_amount_per_experiment
)
x2 = np.repeat(
[i+1 for i in range(class_amount*experiment_amount_per_class)],
observation_amount_per_experiment
)[::-1]
class_ = np.repeat(
['class' + str(i+1) for i in range(class_amount)],
experiment_amount_per_class*observation_amount_per_experiment
)
y0 = np.repeat(
[i*100 for i in range(class_amount*experiment_amount_per_class)],
observation_amount_per_experiment
)
df = pd.DataFrame(
data=[experiment, x1, x2, class_, y0],
index=['experiment', 'x1', 'x2', 'class', 'y0']
).T
df = pd.get_dummies(
df,
columns=['class'],
drop_first=True
)
df['y'] = df.apply(
func=lambda x: x['y0'] * np.exp(-0.1*x['x1']) * np.exp(-0.2*x['x2']) * np.exp(-0.3*0) + 1
if x['class_class2'] == 0
else x['y0'] * np.exp(-0.1*x['x1']) * np.exp(-0.2*x['x2']) * np.exp(-0.3*1) + 1,
axis=1
)
# 使用python 多元指数回归模型 拟合 y0, x1, x2, class_class2 对 y 的影响
import pandas as pd
import numpy as np
from scipy.optimize import curve_fit
#定义多元指数回归模型
def model(x, k0, k1, k2, k3, b):
y0, x1, x2, class_class2 = x
return k0*y0 * np.exp(k0*x1) * np.exp(k1*x1) * np.exp(k2*x2) * np.exp(k3*class_class2) + b
#读取数据
#提取自变量和因变量
xdata = df[["y0", "x1", "x2", "class_class2"]].values.T
ydata = df["y"].values
#拟合模型并输出参数
popt, _ = curve_fit(model, xdata, ydata, maxfev=1000000)
print(popt)
# 验证
model(df.loc[0, ["y0", "x1", "x2", "class_class2"]], *popt)
import pandas as pd
import numpy as np
class_amount = 2
experiment_amount_per_class = 10
observation_amount_per_experiment = 10
experiment = np.repeat(
['experiment' + str(i+1) for i in range(class_amount*experiment_amount_per_class)],
observation_amount_per_experiment
)
x1 = np.tile(
[i+1 for i in range(class_amount*experiment_amount_per_class)],
observation_amount_per_experiment
)
x2 = np.repeat(
[i+1 for i in range(class_amount*experiment_amount_per_class)],
observation_amount_per_experiment
)[::-1]
class_ = np.repeat(
['class' + str(i+1) for i in range(class_amount)],
experiment_amount_per_class*observation_amount_per_experiment
)
y0 = np.repeat(
[i*100 for i in range(class_amount*experiment_amount_per_class)],
observation_amount_per_experiment
)
df = pd.DataFrame(
data=[experiment, x1, x2, class_, y0],
index=['experiment', 'x1', 'x2', 'class', 'y0']
).T
df = pd.get_dummies(
df,
columns=['class'],
drop_first=True
)
df['y'] = df.apply(
func=lambda x: x['y0'] + np.exp(0.1*x['x1']) + np.exp(-0.2*x['x2']) + np.exp(1) + 1
if x['class_class2'] == 0
else x['y0'] + np.exp(0.1*x['x1']) + np.exp(-0.2*x['x2']) + np.exp(-1) + 1,
axis=1
)
# 使用python 多元指数回归模型 拟合 y0, x1, x2, class_class_2 对 y 的影响
import pandas as pd
import numpy as np
from scipy.optimize import curve_fit
#定义多元指数回归模型
def model(x, a, b, c, d):
x1, x2, class_class_2 = x
return a + b * np.exp(c * x1) + np.exp(d * x2) + np.exp(class_class_2)
#读取数据
#提取自变量和因变量
xdata = df[["x1", "x2", "class_class2"]].values.T
ydata = df["y"].values
#拟合模型并输出参数
popt, pcov = curve_fit(model, xdata, ydata, maxfev=1000000)
print(popt)