sklearn: знайдені масиви з непослідовною кількістю зразків при виклику LinearRegression.fit ()


102

Я просто намагаюся зробити просту лінійну регресію, але мене це бентежить за:

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]

Ці виділення повинні мати однакові розміри, і вони повинні бути нумерованими масивами, і що я пропускаю?

Відповіді:


116

Схоже, sklearn вимагає форми даних (номер рядка, номер стовпця). Якщо ваша форма даних (номер рядка,) схожа (999, ), вона не працює. Використовуючи numpy.reshape(), ви повинні змінити форму масиву на (999, 1), наприклад, використовуючи

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

У моєму випадку воно працювало з цим.


6
моя форма даних (10L,), як я конвертую її в (10L, 1). Коли я використовую data = data.reshape (len (data), 1), отримана форма (10L, 1L) не (10L, 1)
user3841581

@ user3841581, будь ласка, зверніться до цього повідомлення .
Джордж Лю

1
@Boern Дякую за коментар. Я також виявив, що X_train має бути розміром (N, 1), але y_train повинен бути розміром (N,) не (N, 1), інакше це не працює, принаймні не для мене.
CrossEntropy

data.reshape (...) може відображати попередження про зображення, якщо дані є об'єктом Series. Використовуйте data.values.reshape (...)
NightFurry

data = data.reshape (-1,1)
Ітачі

24

Схоже, ви використовуєте фрейм даних панд (від назви df2).

Ви також можете зробити наступне:

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

ПРИМІТКА. Я видалив "значення", оскільки це перетворює серію панд у numpy.ndarray і numpy.ndarray не має атрибута to_frame ().


11

Побачено на курсі фундаментального навчання для глибокого навчання Udacity:

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

2
Дякую! Це дійсно найпростіше і найлегше зрозуміти!
Хуан А. Наварро

Власне, параметр Y очікується як (довжина,) форма. Дякую!
Michael_Zhang

5

Я думаю, що "X" аргумент regr.fit повинен бути матрицею, тому слід працювати наступне.

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

4

Я зіткнувся з цією помилкою, тому що я перетворив свої дані в 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)))


2
expects X(feature matrix)

Спробуйте помістити свої функції в такий кортеж:

features = ['ТВ', 'Радіо', 'Газета']
X = дані [функції]

1

Я зіткнувся з подібною проблемою. Проблема в моєму випадку полягала в тому, що кількість рядків у X не дорівнює кількості рядків у y.

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


0

Щоб проаналізувати два масиви (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]

0

Як було зазначено вище, аргумент X повинен бути матрицею або нумерованим масивом з відомими розмірами. Тож ви, ймовірно, могли скористатися цим:

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

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


-1

під час розбивки випробувань поїздів ви могли помилитися

x_train,x_test,y_train,y_test=sklearn.model_selection.train_test_split(X,Y,test_size)

Вищенаведений код правильний

Ви могли зробити так, як нижче, що неправильно

x_train,y_train,x_test,y_test=sklearn.model_selection.train_test_split(X,Y,test_size)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.