sklearn: A găsit array-uri cu numere inconsistente de eșantioane la apelarea LinearRegression.fit() (Programare, Scikit Learn)

Sunny a intrebat.
a intrebat.

Încerc doar să fac o regresie liniară simplă, dar sunt nedumerit de această eroare pentru:

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

care produce:

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

Aceste selecții trebuie să aibă aceleași dimensiuni și ar trebui să fie matrici numpy, deci ce îmi scapă?

11 răspunsuri
Yul

Se pare că sklearn necesită forma datelor de (număr rând, număr coloană). Dacă forma datelor dvs. este (număr rând, ), cum ar fi (999, ), nu funcționează. Folosind numpy.reshape(), ar trebui să schimbați forma matricei în (999, 1), de exemplu, folosind

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

În cazul meu, a funcționat în acest mod.

Comentarii

  • forma datelor mele este (10L,), cum o convertesc în (10L,1). Atunci când folosesc data=data.reshape(len(data),1), forma rezultată este (10L,1L) și nu (10L,1) –  > Por user3841581.
  • @user3841581 vă rugăm să consultați această postare. –  > Por George Liu.
  • @Boern Mulțumesc pentru comentariu. Am descoperit, de asemenea, că X_train ar trebui să fie de dimensiune (N,1), dar y_train ar trebui să fie de dimensiune (N,) nu (N,1), altfel nu funcționează, cel puțin nu pentru mine. –  > Por CrossEntropy.
  • data.reshape(…) poate afișa un avertisment de deprivare dacă datele sunt obiecte Series. Utilizați data.values.reshape(…) -.  > Por NightFurry.
  • data = data.reshape(-1,1) –  > Por Itachi.
user24981

Se pare că folosiți pandas dataframe (după numele df2).

De asemenea, ați putea face următoarele:

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

NOTĂ: Am eliminat „values”, deoarece acesta convertește pandas Series în numpy.ndarray și numpy.ndarray nu are atributul to_frame().

xilef

Văzut la cursul Udacity deep learning foundation:

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

Comentarii

  • Mulțumesc! Acesta este într-adevăr cel mai simplu și mai ușor de înțeles! –  > Por Juan A. Navarro.
  • De fapt, parametrul Y este așteptat ca o formă (lungime, ). Vă mulțumim! –  > Por Michael_Zhang.
Anish

Cred că argumentul „X” din regr.fit trebuie să fie o matrice, așa că următoarele ar trebui să funcționeze.

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

Josh Grinberg

Am întâlnit această eroare deoarece mi-am convertit datele într-un fișier np.array. Am rezolvat problema prin convertirea datelor mele în format np.matrix în schimb și luând transpunerea.

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

Corect: regr.fit(np.transpose(np.matrix(x_list)), np.transpose(np.matrix(y_list)))

Yuanxu Xu
expects X(feature matrix)

Încercați să puneți caracteristicile dvs. într-un tuplu ca acesta:

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

Shivam Agrawal

M-am confruntat cu o problemă similară. În cazul meu, problema era că numărul de rânduri din X nu era egal cu numărul de rânduri din y.

adică numărul de intrări în coloanele caracteristicilor nu era egal cu numărul de intrări în variabila țintă, deoarece am eliminat unele rânduri din coloanele caracteristicilor.

Richard

Pentru a analiza două array-uri (array1 și array2), acestea trebuie să îndeplinească următoarele două cerințe:

1) Trebuie să fie un numpy.ndarray

Verificați cu

type(array1)
# and
type(array2)

Dacă nu este cazul pentru cel puțin unul dintre ele, executați

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

2) Dimensiunile trebuie să fie după cum urmează:

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

N este numărul de elemente care se află în array.Pentru a furniza array1 cu numărul corect de axe efectuați:

array1 = array1[:, numpy.newaxis]

Andy J.

După cum s-a menționat mai sus, argumentul X trebuie să fie o matrice sau un array numpy cu dimensiuni cunoscute. Deci, probabil că ați putea folosi acest lucru:

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

Astfel, dataframe-ul dvs. va fi convertit într-un array cu dimensiuni cunoscute și nu va fi nevoie să îl remodelați.

naveen

în timpul divizării testului de antrenament s-ar putea să fi făcut o greșeală.

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

Codul de mai sus este corect

S-ar putea să fi făcut ca mai jos, ceea ce este greșit.

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

Inginer Saliheen Afridi

În unele zile m-am confruntat cu aceeași problemă. Motivul a fost array-uri de dimensiuni diferite.