目前我的代码设置如下:
def lregression(data, X, y):
X = df['sales'].values.reshape(-1, 1)
y = df['target']
model = LinearRegression()
result = model.fit(X, y)
return model.score(X, y)
然后,我尝试将这个模型应用于每个品牌:
df.groupby('brand').apply(lregression, X, y)
但结果只是应用于完整数据集:
Brand A 0.734
Brand B 0.734
Brand C 0.734
我在这里遗漏了什么吗?我希望模型为每个组单独运行,但我显然是将模型应用于完整的数据集,然后为每个组返回总体分数。谢谢!
一个最小的可重现示例总是很好,我将在这里提供它:
np.random.seed(42)
data = {
'brand': np.random.choice(['Brand A', 'Brand B', 'Brand C'], size=300),
'sales': np.random.randint(100, 1000, size=300),
'target': np.random.randint(100, 1000, size=300)
}
df = pd.DataFrame(data)
对我来说,不清楚你是否想要返回单个回归的
score
(即R^2)或coef
,在这两种情况下,函数仅略有变化:
得分
def lregression(group):
X = group['sales'].values.reshape(-1, 1)
y = group['target']
model = LinearRegression()
result = model.fit(X, y)
return result.score(X, y)
系数
def lregression(group):
X = group['sales'].values.reshape(-1, 1)
y = group['target']
model = LinearRegression()
result = model.fit(X, y)
return result.coef_
然后是最后一步(
coef_
场景):
>>> df.groupby('brand').apply(lregression)
brand
Brand A [0.20322970187699263]
Brand B [0.09134770152569331]
Brand C [0.043343302335992005]
dtype: object
效果符合预期