Saya mencoba menggunakan train_test_split
dari paket scikit Learn, tetapi saya mengalami masalah dengan parameter stratify
. Selanjutnya kodenya:
from sklearn import cross_validation, datasets
X = iris.data[:,:2]
y = iris.target
cross_validation.train_test_split(X,y,stratify=y)
Namun, saya terus mendapatkan masalah berikut:
raise TypeError("Invalid parameters passed: %s" % str(options))
TypeError: Invalid parameters passed: {'stratify': array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2])}
Apakah seseorang tahu apa yang sedang terjadi? Di bawah ini adalah dokumentasi fungsinya.
[...]
stratify : array-like atau None (default-nya adalah None)
Jika bukan None, data akan dibagi secara bertingkat, menggunakan ini sebagai larik label.
Baru di versi 0.17: stratify splitting
[...]
split
scikit-learn
training-data
test-data
Daneel Olivaw
sumber
sumber
Jawaban:
Scikit-Learn hanya memberi tahu Anda bahwa ia tidak mengenali argumen "bertingkat", bukan karena Anda menggunakannya secara tidak benar. Ini karena parameter ditambahkan pada versi 0.17 seperti yang ditunjukkan dalam dokumentasi yang Anda kutip.
Jadi, Anda hanya perlu memperbarui Scikit-Learn.
sumber
scikit-learn 0.21.2 py37h2a6a0b8_0 conda-forge
stratify
Parameter ini melakukan pemisahan sehingga proporsi nilai dalam sampel yang dihasilkan akan sama dengan proporsi nilai yang diberikan pada parameterstratify
.Misalnya, jika variabel
y
adalah variabel kategorikal biner dengan nilai0
dan1
terdapat 25% dari nol dan 75% dari satu,stratify=y
akan memastikan bahwa pemisahan acak Anda memiliki 25% dari0
dan 75% dari1
.sumber
stratify
. Kemudian kedua, untuk memperbaiki ketidakseimbangan, Anda akhirnya perlu menjalankan oversampling atau undersampling di set pelatihan. Banyak pengklasifikasi Sklearn memiliki parameter yang disebut bobot kelas yang dapat Anda atur menjadi seimbang. Terakhir, Anda juga dapat menggunakan metrik yang lebih sesuai daripada akurasi untuk set data yang tidak seimbang. Coba, F1 atau area di bawah ROC.Untuk masa depan saya yang datang ke sini melalui Google:
train_test_split
sekarang masukmodel_selection
, maka:adalah cara menggunakannya. Pengaturan
random_state
diinginkan untuk reproduktifitas.sumber
Dalam konteks ini, stratifikasi berarti bahwa metode train_test_split mengembalikan subset pelatihan dan pengujian yang memiliki proporsi label kelas yang sama dengan kumpulan data masukan.
sumber
Coba jalankan kode ini, "berfungsi":
sumber
sklearn
versi '0.17', distribusi Anaconda untuk Python 3,5. Saya hanya dapat menyarankan untuk memeriksa sekali lagi jika Anda memasukkan kode dengan benar dan memperbarui perangkat lunak Anda.sklearn
...