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, так что мне не хватает?
Ответы
Ответ 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.
то есть количество записей в столбцах объектов не было равно количеству входов в целевой переменной, так как я удалил несколько строк из столбцов существ.