Sebuah kolom-vektor y dilewatkan ketika array 1d diharapkan


117

Aku harus sesuai RandomForestRegressordari sklearn.ensemble.

forest = ensemble.RandomForestRegressor(**RF_tuned_parameters)
model = forest.fit(train_fold, train_y)
yhat = model.predict(test_fold)

Kode ini selalu berfungsi sampai saya membuat beberapa preprocessing data ( train_y). Pesan kesalahan mengatakan:

DataConversionWarning: Kolom-vektor y dilewatkan saat array 1d diharapkan. Silahkan rubah bentuk y menjadi (n_samples,), misalnya menggunakan ravel ().

model = forest.fit (train_fold, train_y)

Sebelumnya train_yadalah Seri, sekarang menjadi array numpy (itu adalah vektor kolom). Jika saya terapkan train_y.ravel(), maka menjadi vektor baris dan tidak muncul pesan error, melalui langkah prediksi membutuhkan waktu yang sangat lama (sebenarnya tidak pernah selesai ...).

Dalam dokumen RandomForestRegressorsaya menemukan bahwa train_yharus didefinisikan sebagai y : array-like, shape = [n_samples] or [n_samples, n_outputs] Ada ide bagaimana mengatasi masalah ini?


apa train_fold.shapedan train_y.shape?
Alexander

@ Alexander: train_fold: tuple (749904,24) ... train: y.ravel (): tuple (749904,)
Klausos Klausos

Tampak baik-baik saja. Sudahkah Anda mencoba melatih 100 baris data untuk memastikannya berfungsi dengan baik (karena Anda mengatakan tidak pernah selesai)? Selain itu, train_ysudahkah Anda memeriksa konten data Anda untuk memastikan pra-pemrosesan tidak merusaknya?
Alexander

RF_tuned_parametersTolong cetak untuk kami.
Imanol Luengo

@imaluengo: {'n_estimators': 40, 'max_features': 0.8, 'n_jobs': 2, 'verbose': True, 'min_samples_split': 6, 'random_state': 123}
Klausos Klausos

Jawaban:


190

Ubah baris ini:

model = forest.fit(train_fold, train_y)

untuk:

model = forest.fit(train_fold, train_y.values.ravel())

Edit:

.valuesakan memberikan nilai dalam array. (bentuk: (n, 1)

.ravel akan mengonversi bentuk array itu menjadi (n,)


33
Seseorang mungkin menjelaskan apa yang sebenarnya berubah.
Rahul Bali

2
AttributeError: objek 'numpy.ndarray' tidak memiliki atribut 'nilai'
john ktejik

12
Jika Anda memiliki numpy.ndarray, gunakan train_y.ravel () sebagai gantinya.
Charity Leschinski

13
@RahulParashar apa yang ravel()dilakukan adalah: ketika Anda memiliki y.shape == (10, 1), menggunakan y.ravel().shape == (10, ). Dengan kata lain ... itu meratakan array.
PascalVKooten

Apakah ini peringatan yang berguna?
alex

18

Saya juga mengalami situasi ini saat mencoba melatih pengklasifikasi KNN . tapi sepertinya peringatan itu hilang setelah saya ubah:
knn.fit(X_train,y_train)
menjadi
knn.fit(X_train, np.ravel(y_train,order='C'))

Di depan garis ini saya gunakan import numpy as np.


Saat menggunakan .ravel()pendekatan vektor kolom saya adalah konverter ke vektor baris daripada array, tetapi perbaikan ini berhasil untuk saya.
kabdulla

12

Saya memiliki masalah yang sama. Masalahnya adalah bahwa label berada dalam format kolom seperti yang diharapkan dalam satu baris. menggunakannp.ravel()

knn.score(training_set, np.ravel(training_labels))

Semoga ini menyelesaikannya.


1
Maksudmu np.ravel()?
Pramesh Bajracharya

10

gunakan kode di bawah ini:

model = forest.fit(train_fold, train_y.ravel())

apakah Anda masih mendapatkan slap by error seperti di bawah ini?

Unknown label type: %r" % y

gunakan kode ini:

y = train_y.ravel()
train_y = np.array(y).astype(int)
model = forest.fit(train_fold, train_y)

3

Cara lain untuk melakukan ini adalah dengan menggunakan ravel

model = forest.fit(train_fold, train_y.values.reshape(-1,))

Saya hanya ingin menambahkan bahwa ini akan berfungsi untuk Pandas Series, tetapi tidak Pandas DataFrames.
Sal Alturaigi

2

Dengan neuraxle , Anda dapat dengan mudah menyelesaikan ini:

p = Pipeline([
   # expected outputs shape: (n, 1)
   OutputTransformerWrapper(NumpyRavel()), 
   # expected outputs shape: (n, )
   RandomForestRegressor(**RF_tuned_parameters)
])

p, outputs = p.fit_transform(data_inputs, expected_outputs)

Neuraxle adalah kerangka kerja mirip sklearn untuk penyetelan hyperparameter dan AutoML dalam proyek pembelajaran mendalam!


1
format_train_y=[]
for n in train_y:
    format_train_y.append(n[0])

2
Meskipun kode ini dapat menyelesaikan pertanyaan, termasuk penjelasan tentang bagaimana dan mengapa ini menyelesaikan masalah akan sangat membantu untuk meningkatkan kualitas posting Anda, dan mungkin menghasilkan lebih banyak suara. Ingatlah bahwa Anda menjawab pertanyaan untuk pembaca di masa depan, bukan hanya orang yang bertanya sekarang. Harap edit jawaban Anda untuk menambahkan penjelasan dan memberikan indikasi batasan dan asumsi apa yang berlaku.
Dharman

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.