Подтвердить что ты не робот

Sklearn: Найденные массивы с непоследовательным числом выборок при вызове LinearRegression.fit()

Просто пытаюсь сделать простую линейную регрессию, но я сбив с толку этой ошибкой для:

regr = LinearRegression()
regr.fit(df2.iloc[1:1000, 5].values, df2.iloc[1:1000, 2].values)

который производит:

ValueError: Found arrays with inconsistent numbers of samples: [  1 999]

Эти выборы должны иметь одинаковые размеры, и они должны быть массивами numpy, так что мне не хватает?

4b9b3361

Ответ 1

Похоже, что sklearn требует форму данных (номер строки, номер столбца). Если ваша форма данных (номер строки) похожа на (999, ), она не работает. Используя numpy.reshape(), вы должны изменить форму массива на (999, 1), например, используя

data=data.reshape((999,1))

В моем случае это сработало.

Ответ 2

Похоже, вы используете pandas dataframe (от имени df2).

Вы также можете сделать следующее:

regr = LinearRegression()
regr.fit(df2.iloc[1:1000, 5].to_frame(), df2.iloc[1:1000, 2].to_frame())

ПРИМЕЧАНИЕ. Я удалил "значения", поскольку это преобразовывает серию pandas в numpy.ndarray и numpy.ndarray не имеет атрибута to_frame().

Ответ 3

Загляните на курс углубленного обучения Udacity:

df = pd.read_csv('my.csv')
...
regr = LinearRegression()
regr.fit(df[['column x']], df[['column y']])

Ответ 4

Я думаю, что аргумент "X" для regr.fit должен быть матрицей, поэтому следующее должно работать.

regr = LinearRegression()
regr.fit(df2.iloc[1:1000, [5]].values, df2.iloc[1:1000, 2].values)

Ответ 5

Я столкнулся с этой ошибкой, потому что я преобразовал свои данные в np.array. Я исправил проблему, преобразовывая свои данные в np.matrix вместо этого и беря транспонирование.

ValueError: regr.fit(np.array(x_list), np.array(y_list))

Правильно: regr.fit(np.transpose(np.matrix(x_list)), np.transpose(np.matrix(y_list)))

Ответ 6

expects X(feature matrix)

Попробуйте поместить свои функции в кортеж следующим образом:

features = ['TV', 'Radio', 'Newspaper']
X = data[features]

Ответ 7

Чтобы проанализировать два массива (array1 и array2), они должны соответствовать следующим двум требованиям:

1) Они должны быть numpy.ndarray

Проверьте с помощью

type(array1)
# and
type(array2)

Если это не так, если хотя бы один из них выполняет

array1 = numpy.ndarray(array1)
# or
array2 = numpy.ndarray(array2)

2) Размеры должны быть следующими:

array1.shape #shall give (N, 1)
array2.shape #shall give (N,)

N - количество элементов, находящихся в массиве. Чтобы обеспечить массив 1 с правильным количеством осей, выполните:

array1 = array1[:, numpy.newaxis]

Ответ 8

Как уже упоминалось выше, аргумент X должен быть матрицей или массивом numpy с известными измерениями. Поэтому вы, вероятно, можете использовать это:

df2.iloc[1:1000, 5:some_last_index].values

Таким образом, ваш файл данных будет преобразован в массив с известными размерами, и вам не нужно будет его изменять.

Ответ 9

Я столкнулся с подобной проблемой. В моем случае проблема заключалась в том, что количество строк в X не было равно числу строк в y.

то есть количество записей в столбцах объектов не было равно количеству входов в целевой переменной, так как я удалил несколько строк из столбцов существ.