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?

Klausos Klausos
sumber
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,)

Linda MacPhee-Cobb
sumber
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.

Simon Leung
sumber
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.

mohammad hassan bigdeli shamlo
sumber
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)
Karang
sumber
3

Cara lain untuk melakukan ini adalah dengan menggunakan ravel

model = forest.fit(train_fold, train_y.values.reshape(-1,))
sushmit
sumber
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!

AlexB
sumber
1
format_train_y=[]
for n in train_y:
    format_train_y.append(n[0])
Bibby Wang
sumber
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
0

Y = y.values ​​[:, 0]

Y - formated_train_y

y - train_y

Jeyakeethan Geethan
sumber