sklearn: Ditemukan array dengan jumlah sampel yang tidak konsisten saat memanggil LinearRegression.fit ()

102

Hanya mencoba melakukan regresi linier sederhana tetapi saya bingung dengan kesalahan ini untuk:

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

yang menghasilkan:

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

Pilihan ini harus memiliki dimensi yang sama, dan harus berupa array numpy, jadi apa yang saya lewatkan?

cerah
sumber

Jawaban:

116

Sepertinya sklearn membutuhkan bentuk data (nomor baris, nomor kolom). Jika bentuk data Anda adalah (nomor baris,) seperti (999, ), itu tidak berfungsi. Dengan menggunakan numpy.reshape(), Anda harus mengubah bentuk array menjadi (999, 1), misalnya menggunakan

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

Dalam kasus saya, itu berhasil.

Yul
sumber
6
bentuk data saya adalah (10L,), bagaimana cara mengubahnya menjadi (10L, 1). Ketika saya menggunakan data = data.reshape (len (data), 1), bentuk yang dihasilkan adalah (10L, 1L) bukan (10L, 1)
user3841581
@ user3841581 silakan lihat posting ini .
George Liu
1
@Boern Terima kasih atas komentarnya. Saya juga menemukan bahwa X_train harus berukuran (N, 1) tetapi y_train harus berukuran (N,) bukan (N, 1), jika tidak maka tidak akan berfungsi, setidaknya tidak untuk saya.
CrossEntropy
data.reshape (...) mungkin menampilkan peringatan deprication jika datanya adalah objek Series. Gunakan data.values.reshape (...)
NightFurry
data = data.reshape (-1,1)
Itachi
24

Sepertinya Anda menggunakan pandas dataframe (dari nama df2).

Anda juga bisa melakukan hal berikut:

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

CATATAN: Saya telah menghapus "nilai" karena itu mengubah Seri panda menjadi numpy.ndarray dan numpy.ndarray tidak memiliki atribut to_frame ().

pengguna24981
sumber
11

Terlihat di kursus dasar deep learning Udacity:

df = pd.read_csv('my.csv')
...
regr = LinearRegression()
regr.fit(df[['column x']], df[['column y']])
xilef
sumber
2
Terima kasih! Ini benar-benar yang paling sederhana dan termudah untuk dipahami!
Juan A. Navarro
Sebenarnya, parameter Y diharapkan sebagai bentuk (panjang). Terima kasih!
Michael_Zhang
5

Saya pikir argumen "X" dari regr.fit harus berupa matriks, jadi berikut ini seharusnya berfungsi.

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

Saya mengalami kesalahan ini karena saya mengonversi data saya ke np.array. Saya memperbaiki masalah dengan mengubah data saya menjadi np.matrixdan mengambil transpose.

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

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

Josh Grinberg
sumber
2
expects X(feature matrix)

Coba letakkan fitur Anda dalam tupel seperti ini:

fitur = ['TV', 'Radio', 'Koran']
X = data [fitur]
Yuanxu Xu
sumber
1

Saya menghadapi masalah yang sama. Masalah dalam kasus saya adalah, Jumlah baris di X tidak sama dengan jumlah baris di y.

yaitu jumlah entri dalam kolom fitur tidak sama dengan jumlah entri dalam variabel target karena saya telah menghapus beberapa baris dari kolom freature.

Shivam Agrawal
sumber
0

Untuk menganalisis dua larik (larik1 dan larik2), mereka harus memenuhi dua persyaratan berikut:

1) Mereka harus numpy.ndarray

Periksa dengan

type(array1)
# and
type(array2)

Jika tidak demikian, setidaknya salah satu dari mereka tampil

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

2) Dimensi harus sebagai berikut:

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

N adalah jumlah item yang ada di dalam array. Untuk menyediakan array1 dengan jumlah sumbu yang tepat lakukan:

array1 = array1[:, numpy.newaxis]
Richard
sumber
0

Seperti yang disebutkan di atas, argumen X harus berupa matriks atau array numpy dengan dimensi yang diketahui. Jadi Anda mungkin bisa menggunakan ini:

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

Jadi, kerangka data Anda akan dikonversi menjadi larik dengan dimensi yang diketahui dan Anda tidak perlu membentuknya kembali

Andy J.
sumber
0

Beberapa hari saya menghadapi masalah yang sama. Alasannya adalah array ukuran yang berbeda.

Engr Saliheen Afridi
sumber
-1

selama tes split train Anda mungkin telah melakukan kesalahan

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

Kode diatas benar

Anda mungkin telah melakukan seperti di bawah ini yang salah

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