Scikit-learn: Jenis label DecisionTreeClassifier tidak diketahui: 'continuous-multioutput'

Dibuat pada 31 Okt 2016  ·  18Komentar  ·  Sumber: scikit-learn/scikit-learn

Keterangan


DecisionTreeClassifier lumpuh dengan unknown label type: 'continuous-multioutput' . Saya sudah mencoba memuat file csv menggunakan csv.reader, pandas.read_csv dan beberapa hal lain seperti parsing baris demi baris.

Langkah/Kode untuk Mereproduksi

from sklearn import tree
feature_df = pd.read_csv(os.path.join(_PATH, 'features.txt'))
target_df = pd.read_csv(os.path.join(_PATH, 'target.txt'))
feature_df = feature_df._get_numeric_data()
target_df = target_df._get_numeric_data()
feature_df = feature_df.fillna(0)
target_df = target_df.fillna(0)
clf = tree.DecisionTreeClassifier()
clf_o = clf.fit(feature_df, target_df)

fitur.txt
target.txt

Hasil yang diharapkan


Kesalahan yang dilemparkan memberi tahu pengguna apa yang BENAR-BENAR salah, bahwa kumpulan datanya tidak mengikuti asumsi (dan apa itu)

Hasil nyata

Traceback (most recent call last):
  File "D:\Piotr\Documents\uni\bap\BAPFingerprintLocalisation\main.py", line 19,
 in <module>
    decision_tree.treeClassification()
  File "D:\Piotr\Documents\uni\bap\BAPFingerprintLocalisation\code\decision_tree
.py", line 56, in treeClassification
    clf_o = clf.fit(feature_df, target_df)
  File "C:\Python35\lib\site-packages\sklearn\tree\tree.py", line 182, in fit
    check_classification_targets(y)
  File "C:\Python35\lib\site-packages\sklearn\utils\multiclass.py", line 172, in
 check_classification_targets
    raise ValueError("Unknown label type: %r" % y_type)
ValueError: Unknown label type: 'continuous-multioutput'

Versi

Windows-10-10.0.14393-SP0
Python 3.5.1 (v3.5.1:37a07cee5969, Dec  6 2015, 01:54:25) [MSC v.1900 64 bit (AMD64)]
NumPy 1.11.0
SciPy 0.17.1
Scikit-Learn 0.18

Memperbarui:

Saya telah mengubah jumlah variabel target menjadi satu, hanya untuk menyederhanakan banyak hal

clf_o = clf.fit(feature_df, target_df.ix[:,1])

Keluaran: Unknown label type: 'continuous'

Komentar yang paling membantu

Anda harus menggunakan DecisionTreeRegressor

Semua 18 komentar

Anda harus menggunakan DecisionTreeRegressor

Sekali lagi, dokumentasi kekurangan informasi tentang berapa banyak kelas yang dapat ditangani oleh klasifikasi. Saya dapat melihat bahwa dataset saya memiliki terlalu banyak kelas, tetapi pesan kesalahan Anda menyebutkan sesuatu seperti 'label' yang cukup membingungkan untuk melupakan bagaimana dataset sebenarnya terlihat dan mencampuri metode pengiriman dataset.
Saya telah memperbarui masalah dan meminta Anda untuk membukanya kembali.

Target klasifikasi harus direpresentasikan sebagai bilangan bulat atau string. Anda dapat meminta Panda untuk membaca data target sebagai string dan Anda akan baik-baik saja.

Atau gunakan DecisionTreeRegressor

Itu bukan masalah saya

Lihat bagian 'Hasil yang Diharapkan' dari masalah saya

Anda benar bahwa pesan kesalahan bisa lebih berguna, tetapi dokumentasi untuk fit memang mengatakan "label kelas dalam klasifikasi". Jangan ragu untuk mengirimkan masalah yang lebih jelas tentang perlunya mendokumentasikan tipe data yang diharapkan untuk klasifikasi y s, dan satu lagi untuk memunculkan pesan kesalahan yang sesuai ketika data float diteruskan sebagai y ke pengklasifikasi.

Izinkan saya mengutip seluruh bagian dokumentasi yang mendokumentasikan parameter y dari fungsi yang cocok di kelas DecisionTreeClassifier

Nilai target (label kelas dalam klasifikasi, bilangan real dalam regresi). Dalam kasus regresi, gunakan dtype=np.float64 dan order='C' untuk efisiensi maksimum.

Itu tidak mengatakan bahwa kelas memiliki batas. Apa yang membuat variabel target berlabel kontinu? Berapa banyak kelas yang harus ada untuk dianggap sebagai variabel target tipe regresi? Jika berbicara tentang regresi, apakah saya bisa melakukan regresi menggunakan DecisionTreeClassifier? Kenapa tidak? Dll...

Adapun komentar Anda sebelumnya:

Target klasifikasi harus direpresentasikan sebagai bilangan bulat atau string. Anda dapat meminta Panda untuk membaca data target sebagai string dan Anda akan baik-baik saja.

Apakah itu berarti bahwa kelas tidak dapat direpresentasikan sebagai pelampung? Atau sebagai dikte? Daftar? Tuple? rindu? Ganda? byte? Saya tahu logis untuk mewakili kelas sebagai bilangan bulat atau string, karena mereka seharusnya tidak banyak. Tapi apakah mereka harus melakukannya? Apa batasannya?

Dan untuk membuat tiket baru, bukankah itu tidak berguna karena kita sudah cukup banyak bicara di sini? Membuat tiket baru hanya untuk menjelaskan hal yang sama kepada pria lain?

Bukan jumlah kelas. Ini penggunaan non-integer dan non-string.

Saya suka deskripsi masalah difokuskan. Kekhawatiran Anda seperti yang diangkat di sini
tampaknya lebih merupakan masalah penggunaan.

Dan tolong jangan ganggu saya tentang apa yang saya sarankan. Ini bukan satu-satunya masalah
saya berurusan dengan.

Pada 2 November 2016 pukul 00:24, Piotr Kamoda [email protected] menulis:

Izinkan saya mengutip seluruh bagian dokumentasi yang mendokumentasikan parameter y dari
fungsi cocok di kelas DecisionTreeClassifier

Nilai target (label kelas dalam klasifikasi, bilangan real dalam
regresi). Dalam kasus regresi, gunakan dtype=np.float64 dan order='C' untuk
efisiensi maksimum.

Itu tidak mengatakan bahwa kelas memiliki batas. Apa yang membuat variabel target
berlabel kontinu? Berapa banyak kelas yang harus ada untuk dipertimbangkan
variabel target tipe regresi? Jika dikatakan tentang regresi, maka dapatkah saya melakukannya
regresi menggunakan DecisionTreeClassifier? Kenapa tidak? Dll...

Dan untuk membuat tiket baru, bukankah itu tidak berguna karena kita sudah cukup banyak
bicara di sini? Membuat tiket baru hanya untuk menjelaskan hal yang sama kepada pria lain?


Anda menerima ini karena Anda mengubah status buka/tutup.
Balas email ini secara langsung, lihat di GitHub
https://github.com/scikit-learn/scikit-learn/issues/7801#issuecomment -257565248,
atau matikan utasnya
https://github.com/notifications/unsubscribe-auth/AAEz63zNA0Qc4lzgHttXx-4VFkJFwFaDks5q5z16gaJpZM4KlSFw
.

Anda tidak harus menyelesaikannya hari ini, saya hanya mencoba membuat masalah deskripsi kesalahan yang buruk dan dokumentasi yang buruk pada pengklasifikasi dan regresor pohon untuk menjadi aktif dan tugas untuk rilis mendatang.

Untuk pesan kesalahan apakah "Tipe keluaran yang tidak didukung: 'continuous-multioutput'" akan lebih baik? Itu adalah masalah _real_. Lihat juga #7809 untuk docstring.

Itu lebih baik. Tapi tetap saja saya tidak mengerti mengapa Anda tidak menamakannya seperti itu. Karena literatur kebanyakan menyebut variabel 'Target' itu, dan output bisa disalahartikan dengan output fungsi. Pengecualian dilemparkan dari fungsi 'check_classification_targets', jadi meskipun Anda mengatakan itu variabel 'target', dan Anda masih ingin menyebutnya 'label' atau 'output'. Saya bukan anggota anggota scikit-learn, jadi Anda akan melakukannya sesuka Anda, tetapi saya akan merekomendasikan untuk menggunakan kata-kata 'Variabel target' dalam doscstring dan pesan kesalahan. Dan saya meminta Anda untuk menjelaskan aturan di mana saja yang harus diikuti oleh data input (atau target). Kalimat pendek - 'Variabel target (parameter y) harus int atau str'.

Mungkin perlu disebutkan di/di samping bagian baru (45cb11d / #7519)
tentang pemasangan multiclass dan multilabel dalam tutorial. Atau mungkin ini semua
termasuk dalam bagian panduan pengguna tentang konvensi representasi data,
menjelaskan format input/output untuk semua metode standar...?

Pada 2 November 2016 pukul 20:56, Piotr Kamoda [email protected] menulis:

Itu lebih baik. Tapi tetap saja saya tidak mengerti mengapa Anda tidak menamakannya seperti itu
adalah. Karena literatur kebanyakan menyebut variabel 'Target' itu, dan output
bisa salah dengan output fungsi. Pengecualian dilemparkan dari fungsi
'check_classification_targets', jadi meskipun Anda mengatakan itu adalah variabel 'target',
dan Anda masih ingin menyebutnya 'label' atau 'output'. Saya bukan anggota
anggota scikit-learn, jadi Anda akan melakukan sesuka Anda, tetapi saya akan merekomendasikan untuk
gunakan kata-kata 'Variabel target' di doscstring dan pesan kesalahan. Dan aku bertanya padamu
untuk menjelaskan aturan di mana saja yang harus diikuti oleh data input (atau target). SEBUAH
kalimat pendek - 'Variabel target (parameter y) harus int atau str'.


Anda menerima ini karena Anda mengubah status buka/tutup.
Balas email ini secara langsung, lihat di GitHub
https://github.com/scikit-learn/scikit-learn/issues/7801#issuecomment -257820087,
atau matikan utasnya
https://github.com/notifications/unsubscribe-auth/AAEz68AqYGWrP1C-BinLXGGHNt0VtV_qks5q6F5rgaJpZM4KlSFw
.

Saya telah memindai dokumen dan sepertinya tempat yang bagus untuk menyebutkan konvensi itu. Juga jika Anda tidak ingin mengaburkan pesan kesalahan terlalu banyak, maka gagasan untuk memasukkan informasi itu ke dalam panduan pengguna juga tidak buruk.
Nah, solusi terakhir (jika ada) akan seperti yang Anda inginkan, saya hanya mengatakan bahwa idenya tampaknya baik-baik saja, tetapi Anda memiliki konvensi. Aku tidak akan membuatmu melakukan sesuatu.

'Variabel target (parameter y) harus int atau str'. tidak benar, karena kami mendukung multi-label dan multi-output multi-target

Juga, objek arbitrer yang bukan float didukung sebagai label kelas, mereka tidak harus berupa bilangan bulat atau string.

Jika kita menempatkan sebagai iput training_data_X, training_scores_Y agar sesuai dengan metode itu menyebabkan kesalahan. Untuk menghindarinya, kami akan mengonversi dan menyandikan label

dari preprocessing impor sklearn
dari sklearn import utils
lab_enc = prapemrosesan.LabelEncoder()
y_train = lab_enc.fit_transform(y_train)
cetak(y_train)
print(utils.multiclass.type_of_target(y_train))
print(utils.multiclass.type_of_target(y_train.astype('int')))
print(utils.multiclass.type_of_target(y_train))

Saya mengalami masalah yang sama, apakah ada solusi untuk itu?

Apakah halaman ini membantu?
0 / 5 - 0 peringkat