Bir 1d dizisi beklendiğinde bir sütun vektörü y geçirildi


119

Ben oturması lazım RandomForestRegressorgelen sklearn.ensemble.

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

Bu kod, verilerin ( train_y) bazı ön işlemlerini yapana kadar her zaman çalıştı . Hata mesajı şunu söylüyor:

DataConversionWarning: Bir 1d dizisi beklendiğinde bir sütun vektörü y geçirildi. Lütfen y'nin şeklini (n_samples,) olarak değiştirin, örneğin ravel () kullanarak.

model = orman.fit (tren_fold, tren_y)

Önceden train_ybir Seri idi, şimdi ise uyuşmuş bir dizi (bir sütun vektörüdür). Eğer uygularsam train_y.ravel(), bir satır vektörü olur ve hiçbir hata mesajı görünmez, tahmin adımı çok uzun sürer (aslında hiç bitmez ...).

Ait dokümanlar ise RandomForestRegressorki ben bulunamadı train_yolarak tanımlanması gerektiğini y : array-like, shape = [n_samples] or [n_samples, n_outputs] bu sorunu çözmek için nasıl Herhangi fikri?


nedir train_fold.shapeve train_y.shape?
Alexander

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

İyi görünüyor. Düzgün çalıştığından emin olmak için 100 satırlık veriyi eğitmeyi denediniz mi (hiç bitmediğini söylediniz)? Ayrıca, train_yön işlemenin verileri bozmadığından emin olmak için verilerinizin içeriğini incelediniz mi?
Alexander

RF_tuned_parametersLütfen bizim için yazdırın .
Imanol Luengo

@imaluengo: {'n_estimators': 40, 'max_features': 0.8, 'n_jobs': 2, 'ayrıntılı': True, 'min_samples_split': 6, 'random_state': 123}
Klausos Klausos

Yanıtlar:


192

Bu satırı değiştirin:

model = forest.fit(train_fold, train_y)

için:

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

Düzenle:

.valuesbir dizideki değerleri verir. (şekil: (n, 1)

.ravel bu dizi şeklini (n,)


33
Birisi gerçekte neyin değiştiğini açıklayabilir.
Rahul Bali

2
AttributeError: 'numpy.ndarray' nesnesinin 'değerleri' özniteliği yok
john ktejik

12
Bir numpy.ndarray'iniz varsa, bunun yerine train_y.ravel () kullanın.
Charity Leschinski

13
@RahulParashar ne ravel()yapar: ne zaman y.shape == (10, 1), kullanmak y.ravel().shape == (10, ). Kelimelerle ... bir diziyi düzleştirir.
PascalVKooten

Bu faydalı bir uyarı mı?
alex

18

Bir KNN sınıflandırıcısını eğitmeye çalışırken de bu durumla karşılaştım . ama ben değiştirdikten sonra uyarı gitmişti görünüyor:
knn.fit(X_train,y_train)
hiç
knn.fit(X_train, np.ravel(y_train,order='C'))

Bu çizginin ilerisinde kullandım import numpy as np.


.ravel()Yaklaşımı kullanırken sütun vektörüm bir dizi yerine bir satır vektörüne dönüştürücüydü, ancak bu düzeltme benim için çalıştı.
kabdulla

12

Ben de aynı sorunu yaşadım. Sorun, etiketlerin bir satırda beklenirken sütun biçiminde olmasıydı. kullanımnp.ravel()

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

Umarım bu sorunu çözer.


1
Demek np.ravel()istiyorsun?
Pramesh Bajracharya

10

aşağıdaki kodu kullanın:

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

Hala aşağıdaki gibi aynı hata sonucu tokat alıyorsanız?

Unknown label type: %r" % y

bu kodu kullanın:

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

3

Bunu yapmanın başka bir yolu da ravel

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

Bunun Pandas Series için işe yarayacağını, ancak Pandas DataFrames için geçerli olmadığını eklemek isterim.
Sal Alturaigi

2

Neuraxle ile bunu kolayca çözebilirsiniz:

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, derin öğrenme projelerinde hiperparametre ayarı ve AutoML için sklearn benzeri bir çerçevedir!


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

2
Bu kod soruyu çözebilirken, sorunun nasıl ve neden çözüldüğüne dair bir açıklama da dahil olmak üzere , gönderinizin kalitesini artırmaya gerçekten yardımcı olur ve muhtemelen daha fazla oy almanıza neden olur. Sadece şu anda soran kişi için değil, gelecekte okuyucular için soruyu yanıtladığınızı unutmayın. Açıklamalar eklemek ve hangi sınırlamaların ve varsayımların geçerli olduğuna dair bir gösterge vermek için lütfen yanıtınızı düzenleyin .
dharman

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.