Как сделать регрессию, начиная со списка списка элементов - PullRequest
0 голосов
/ 24 ноября 2018

Я пытаюсь запустить регрессию в Python.У меня есть список списков (часть большего списка), который выглядит примерно так:

[[1307622004, 0.0, 339.093, 130.132], 
[10562004, 0.0, 206.818, 62.111], 
[127882004, 0.0, 994.624, 360.497], 
[63702004, 0.0, 89.653, 19.103], 
[655902004, 0.0, 199.613, 83.296], 
[76482004, 0.0, 1891.0, 508.0], 
[16332004, 0.0, 160.344, 25.446], 
[294352004, 0.0, 67.115, 22.646], 
[615922004, 0.0, 134.501, 41.01], 
[1212572004, 0.0, 232.616, 5.086], 
[658992004, 0.0, 189.155, 7.906], 
[61962004, 0.0, 806.7, 164.1], 
[121712004, 0.0, 1147.532, 271.014], 
[1250142004, 0.0, 29.556, -5.721], 
[148082004, 0.0, 22.05, -17.655]]

Это выглядит так, потому что каждая строка представляет собой строку из файла CSV, из которого я импортирую данные.С этого момента, пожалуйста, посмотрите на элементы в списке как столбцы переменных, чтобы лучше понять, что я пытаюсь регрессировать.Например, первые 4 списка из списка выглядели бы примерно так, чтобы они превратились в столбцы (мне не нужны переменные, превращенные в столбцы, я сделал это в целях иллюстрации):

1307622004     0.0    339.093    130.132
10562004       0.0    206.818    62.111
127882004      0.0    994.624    360.497

Чтобы продолжитьНапример, я хочу, чтобы первый столбец был моей зависимой переменной, а все остальные столбцы были независимыми переменными.Я пытался использовать Numpy, чтобы преобразовать список в массив, а затем применить регрессию sklearn.Ниже приведен фрагмент кода:

Важно отметить: list_of_lists содержит много элементов, похожих на список, который я предоставил в начале вопроса.

from sklearn import datasets ## imports datasets from scikit-learn
from sklearn.linear_model import LinearRegression
import numpy as np

for item in list_of_lists:
    test_array = np.asarray(item)
    # print(test_array)
    X, Y = test_array[:, 0], test_array[:, 1]
    mdl = LinearRegression().fit(X, Y)
    scores = LinearRegression.score(X, Y)
    print('--------------------------')

Проблема в том, что я получаю следующий вывод:

Измените ваши данные либо с помощью array.reshape (-1, 1), если ваши данные имеют одну функцию илиarray.reshape (1, -1), если он содержит одну выборку.

Я новичок в python и использую массивы, матрицы в python, поэтому я не совсем понимаю, что происходит,

1 Ответ

0 голосов
/ 24 ноября 2018

Я не совсем уверен, почему вы перебираете свой список списков.Лучше просто подогнать регрессию к вашему массиву.Кроме того, если вы хотите, чтобы первый столбец был вашей (зависимой) переменной отклика, а все остальные - переменными-предикторами (независимыми), вам нужно изменить определения X и Y, потому что, как у вас есть,у вас есть первый столбец в качестве предиктора и второй столбец в качестве ответа:

test_array = np.asarray(list_of_lists)
# Set independent variables to be all columns after first, dependent to first col
X, Y = test_array[:, 1:], test_array[:, 0]

# Create a regressor 
reg = LinearRegression()
# Fit it to your data   
mdl = reg.fit(X, Y)
# Exctract the R^2
scores = reg.score(X,Y)
...