熊猫数据框中两个变量的线性回归
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 散点图中看到数据不在平面上。当我在回归中添加“盐度*温度”的交互作用时,拟合得到了改善。以上是关于熊猫数据框中两个变量的线性回归的主要内容,如果未能解决你的问题,请参考以下文章