python - 使用 sklearn 查找每组数据帧的系数
问题描述
我有一个包含一些值和多个组的数据框(df1)。我想对每个组执行线性回归,所以我可以使用系数来完成 df2,然后将它们连接起来(df3)。到目前为止,我对我的整个数据框都进行了管理
from sklearn import linear_model
import pandas as pd
def ols (X, y):
return linear_model.LinearRegression().fit(X, y)
X = df1[["day"]]
y = df1["value"]
results = linear_model.LinearRegression().fit(df1[["day"]], df1["value"])
df2['value'] = results.coef_*df2['day']+results.intercept_
df3 = pd.concat([df1, df2])
这可行,但是当我尝试使用 groupby 并应用时,就像result = df1.groupby('id').apply(ols(df1[["day"]], df1["value"]))
我收到错误一样TypeError: 'LinearRegression' object is not callable
,我知道我没有初始化 LinearRegression 类的实例,但是如何使用 groupby 来做到这一点?
df1 = pd.DataFrame({'id': ['a', 'a', 'b', 'b'],
'day' : [179,194, 184, 194],
'value' : [0.667, 1.229, 1.079, 1.69 ]
})
df2 = pd.DataFrame({'id': ['a', 'b'],
'day' : [191, 192],
'value' : ['lai', 'lai']
})
df1 = pd.DataFrame({'id': ['a', 'a','a', 'b', 'b', 'b'],
'day' : [179,191, 194, 184, 192, 194],
'value' : [0.667, 1.1166, 1.229, 1.079,1.5678,, 1.69 ]
})
解决方案
这里有多个问题:
pandas
apply()
需要一个函数作为输入,而不是函数的返回值,所以你只能这样做:df1.groupby('id').apply(ols)
不像你所做的那样。
ols(df1[["day"]], df1["value"])
返回一个LinearRegression
不被接受的对象,apply
因此返回错误。groupby('id').apply(...)
将根据df
. 因此,您不能简单地将整个数据df1[["day"]], df1["value"]
提供给该ols
方法并期望它适合不同的组。
除此之外,这个问题非常不清楚。你到底想做什么?你想使用你df1
的训练数据来学习每个组的系数('id'),然后用它们来预测df2
相同的值'id'
吗?
推荐阅读
- python-3.7 - 如何获得结果
- reinforcement-learning - 值迭代示例可能是错误的?
- java - 启动错误 - 原因:java.lang.NullPointerException
- c# - 如何在 EF Core 3.1.3 中禁用延迟加载?
- verilog - Modelsim:错误:(vsim-3033)...“MUT”的实例化失败。未找到设计单位
- javascript - Angular javascript页面编译但显示空白
- swift - 已发布值上的 SwiftUI toggle() 函数停止使用 Swift 5.2 触发 didSet
- python - 如何在 python(openCV) 中增加文件名
- go - 当struct实现接口时,“不能在赋值中使用x([struct]类型的变量)作为[interface]值”
- javascript - 通过拖动和滚动循环菜单项