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?

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.


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 ().


11

Terlihat di kursus dasar deep learning Udacity:

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

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)

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)))


2
expects X(feature matrix)

Coba letakkan fitur Anda dalam tupel seperti ini:

fitur = ['TV', 'Radio', 'Koran']
X = data [fitur]

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.


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]

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



-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)
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.