在pandas数据框中使用两个变量进行线性回归

3

所以,我并不是一个真正的程序员,但我需要解决一个关于两个变量的方程式的关系问题。我已经进行了广泛的谷歌搜索,但我不知道如何将我的数据输入到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数据表上索引和列值的两个变量进行回归分析,或者有没有一种快速有效的方法将此数据表压缩为48x3的数据表,以便我找到的众多指南实际上会对我有所帮助?

提前感谢您。

1个回答

3
您可以使用stack来重新塑造数据,然后重命名列:
oxy2 = oxy.stack().reset_index()
oxy2.columns = ['salinity','temperature','oxygenation']

输出是一个48行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'])

1
非常感谢。我一直在尝试使用 pd.melt,但是这个方法更好! - Enquandriant
我建议通过视觉检查温度和盐度与氧化物的散点图,以确定是否存在任何明显的数据转换,例如对数或指数,这可能有助于线性回归 - 这很快也很容易实现。 - James Phillips
我从一个三维散点图中看到数据不在一个平面上。当我在回归模型中添加“盐度*温度”的交互作用时,拟合效果得到了改善。 - James Phillips

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接