是否有更快的方法来获取基于线性回归模型的值并将其附加到 DataFrame 中的新列?

Posted

技术标签:

【中文标题】是否有更快的方法来获取基于线性回归模型的值并将其附加到 DataFrame 中的新列?【英文标题】:Is there faster way to get values based on the linear regression model and append it to a new column in a DataFrame? 【发布时间】:2021-11-13 07:32:45 【问题描述】:

我在下面创建了这段代码,以便在我的数据框中创建一个新列来比较实际值和回归值:

b = dfSemoga.loc[:, ['DoB','AA','logtime']]
y = dfSemoga.loc[:,'logCO2'].values.reshape(len(dfSemoga)+1,1)
lr = LinearRegression().fit(b,y)

z = lr.coef_[0,0]
j = lr.coef_[0,1]
k = lr.coef_[0,2]
c = lr.intercept_[0]

for i in range (0,len(dfSemoga)):
    dfSemoga.loc[i,'EF CO2 Predict'] = (c + dfSemoga.loc[i,'DoB']*z  + 
                                        dfSemoga.loc[i,'logtime']*k + dfSemoga.loc[i, 'AA']*j) 

所以,我基本上对包含三个变量的列进行回归1) AA、2) logtime 和 3) DoB。 但是在这段代码中,为了在名为dfSemoga['EF CO2 Predict'] 的新列中获取回归值,我手动分配系数,如 for 循环中所示。

有没有我可以编写的花哨的单行代码来提高我的工作效率?

【问题讨论】:

【参考方案1】:

没有样本数据我无法确认,但你应该可以做到

dfSemoga["EF CO2 Predict"] = c + (z * dfSemoga["DoB"]) + (k * dfSemoga["logtime"]) + (j * dfSemoga["AA"])

演示:

In [4]: df
Out[4]:
   a  b
0  0  0
1  0  8
2  7  6
3  3  1
4  3  8
5  6  6
6  4  8
7  2  7
8  3  8
9  8  1

In [5]: df["c"] = 3 + 0.5 * df["a"] - 6 * df["b"]

In [6]: df
Out[6]:
   a  b     c
0  0  0   3.0
1  0  8 -45.0
2  7  6 -29.5
3  3  1  -1.5
4  3  8 -43.5
5  6  6 -30.0
6  4  8 -43.0
7  2  7 -38.0
8  3  8 -43.5
9  8  1   1.0

【讨论】:

以上是关于是否有更快的方法来获取基于线性回归模型的值并将其附加到 DataFrame 中的新列?的主要内容,如果未能解决你的问题,请参考以下文章

基于 R的 广义线性模型分析

线性回归

一元线性回归方程的计算步骤

逻辑回归评分卡100问——基于申请评分卡

机器学习-广义线性模型

拟合贝叶斯线性回归并预测不可观察的值