Простая линейная регрессия, применяемая к нескольким записям данных (не множественная линейная регрессия)

#python #pandas #numpy #scikit-learn #linear-regression

#python #pandas #numpy #scikit-учиться #линейная регрессия

Вопрос:

Мне нужно выполнить следующие вычисления.

  1. Данный фрейм данных Nx1 pandas
  2. Преобразование фрейма данных в матрицу Numpy (это будет переменная Y регрессии)
  3. Преобразование сдвинутого (на 1) фрейма данных в матрицу Numpy (это будет переменная X регрессии)
  4. Выполнение простой линейной регрессии между X и Y
  5. Используя коэффициент линейной регрессии (массив 1×1), вычислите новую матрицу Numpy Nx1 как (1/1-coefficient)*(Y.T) - (coefficient/1-coefficient)*(X.T)
  6. Преобразуйте результат в фрейм данных pandas Nx1

Пожалуйста, рассмотрите следующий код:

 def function(data):

        Y = np.nan_to_num(np.asmatrix(data)).T
        X = np.nan_to_num(np.asmatrix(data.shift(1))).T
        
        M = lm.LinearRegression().fit(X, Y)
    
        result = (np.dot((1/1-M.coef_), Y.T)) - (np.dot(M.coef_ / 1-M.coef_, X.T))
        
        return pd.DataFrame(result.T, columns = data.columns, index = data.index)
 

Как я могу эффективно выполнить (было бы намного лучше избежать for цикла) тот же процесс, когда данный фрейм данных pandas равен NxM? В этом случае массив коэффициентов регрессии будет равен 1xM, причем каждый столбец представляет собой коэффициент между i-столбцом X и i-столбцом Y.