熊猫数据框中两个变量的线性回归

Posted

技术标签:

【中文标题】熊猫数据框中两个变量的线性回归【英文标题】:Linear Regression over two variables in a pandas dataframe 【发布时间】:2019-07-12 06:51:36 【问题描述】:

所以,我不是真正的程序员,但我需要找出两个变量方程的关系,我一直在广泛搜索,但我不知道如何将我的数据输入到 sklearn linear_model。

我有一个这样定义的数据框

I = [-2, 0, 5, 10, 15, 20, 25, 30]
d = 27.11 : [9.01,8.555,7.56,6.77,6.14,5.63,5.17,4.74],
     28.91 : [8.89,8.43,7.46,6.69,6.07,5.56,5.12,4.68],
     30.72 : [8.76,8.32,7.36,6.60,6.00,5.50,5.06,4.69],
     32.52 : [8.64,8.20,7.26,6.52,5.93,5.44,5.00,4.58],
     34.33 : [8.52,8.08,7.16,6.44,5.86,5.38,4.95,4.52],
     36.11 : [8.39,7.97,7.07,6.35,5.79,5.31,4.86,4.46]
oxy = pd.DataFrame(index = I, data = d) # temp, salinity to oxygenation ml/L

指数代表温度,列名代表盐度,我需要想出一种方法来根据温度和盐度预测氧化(列中的值)。

我认为我的问题主要与语法有关,

我已经尝试通过

来拟合我的数据
X = [list(oxy.columns.values),list(oxy.index.values)]
regr = linear_model.LinearRegression()
regr.fit(X,oxy)

以及许多试图获取索引值的变体,数据表中的列与每个 X 相关联。我真的只是不知道如何做到这一点。

我找到了很多关于两个变量的指南,但它们都有平面数据集,我不知道如何在没有大量输入的情况下将其展平。

所以我的问题是,有没有办法对两个变量进行回归,我的独立变量是我在 pandas 数据表上的索引和列值,或者,有没有一种快速有效的方法来展平这个数据表到一个 48 x 3 的数据表中,这样我找到的众多指南之一实际上会帮助我吗?

先谢谢你了。

【问题讨论】:

【参考方案1】:

您可以使用stack 重塑数据,然后重命名列:

oxy2 = oxy.stack().reset_index()
oxy2.columns = ['salinity','temperature','oxygenation']

输出是一个 48 x 3 的数据帧。仅显示前 5 行:

#print(oxy2.head())
    salinity  temperature  oxygenation
0         -2        27.11        9.010
1         -2        28.91        8.890
2         -2        30.72        8.760
3         -2        32.52        8.640
4         -2        34.33        8.520

然后您可以使用以下代码运行回归:

regr = linear_model.LinearRegression()
regr.fit(oxy2[['salinity','temperature']], oxy2['oxygenation'])

【讨论】:

非常感谢。我一直在搞乱 pd.melt 认为它会有所帮助,但这要好得多! 我建议目视检查温度和盐度与氧合的散点图,以确定是否有任何明显的数据转换,例如可能有助于线性回归的 log 或 exp - 这是快速且容易做到的。 我从 3D 散点图中看到数据不在平面上。当我在回归中添加“盐度*温度”的交互作用时,拟合得到了改善。

以上是关于熊猫数据框中两个变量的线性回归的主要内容,如果未能解决你的问题,请参考以下文章

请问SPSS怎么做线性回归分析

python机器学习回归算法-线性回归

绘制熊猫时间序列数据框的线性回归线的置信区间

excel数据分析线性回归中MS,SS,F,DF分别是啥意思

SPSS数据分析—非线性回归

岭回归需要变量正太分布吗