Использование sklearn для нахождения коэффициентов каждой группы данных - PullRequest
0 голосов
/ 03 мая 2019

У меня есть фрейм данных (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 ]
                            })

1 Ответ

0 голосов
/ 03 мая 2019

Здесь есть несколько проблем:

  1. пандам apply() нужна функция в качестве входных данных, а не возвращаемое значение функции, поэтому вы можете сделать только:

    df1.groupby('id').apply(ols)
    

    и не похоже на то, что ты сделал. ols(df1[["day"]], df1["value"]) возвращает LinearRegression объект, который не принят apply и, следовательно, ошибку.

  2. groupby('id').apply(...) применяет предоставленную функцию к частям информационного кадра в соответствии с группами в df. Таким образом, вы не можете просто предоставить данные целиком df1[["day"]], df1["value"] методу ols и ожидать, что они будут соответствовать различным группам.

Кроме этого вопрос очень неясен. Что именно вы хотите сделать? Хотите ли вы использовать df1 в качестве обучающих данных, по которым вы хотите узнать коэффициенты для каждой группы ('id'), а затем использовать их для прогнозирования значений в df2 для того же 'id'?

...