Scikit-learn: bagaimana cara mengetahui fitur mana yang dipilih oleh FeatureUnion?

Dibuat pada 6 Jan 2016  ·  4Komentar  ·  Sumber: scikit-learn/scikit-learn

saya menjalankan kode dari,
http://scikit-learn.org/stable/auto_examples/feature_stacker.html#example -feature-stacker-py
dan dengan kode berikut,

# Build estimator from PCA and Univariate selection:
combined_features = FeatureUnion([("pca", pca), ("univ_select", selection)])

# Use combined features to transform dataset:
X_features = combined_features.fit(X, y).transform(X)

dengan data yang dimasukkan ke FeatureUnion, saya ingin tahu fitur mana yang dipilih. di dokumen FeatureUnion, ada fungsi get_feature_names() yang mendapatkan semua nama dari semua transformator. jadi panggil saja fungsi ini dan dapatkan kesalahan seperti ini,

AttributeError: Transformer pca does not provide get_feature_names.

sebenarnya, saya tahu pca tidak memiliki fungsi seperti ini. tapi mengapa FeatureUnion menyediakan fungsi ini!?

Komentar yang paling membantu

Ini mungkin tidak mengatasi masalah khusus Anda dengan PCA secara langsung, tetapi jika saya membaca pertanyaan Anda dengan benar, Anda bertanya-tanya secara umum bagaimana cara menyerap atribut melalui saluran khusus.

Terlambat ke pesta, tetapi Anda dapat mengakses elemen di dalam pipeline, betapapun rumitnya, dengan menelusuri struktur pipeline, menemukan langkah yang sesuai (bahkan dalam featureunion) dan kemudian menggunakan atribut yang sesuai. Berikut ini contoh yang baru saja saya jalankan:

pipeline = Pipeline([ ('union', FeatureUnion([ ('categoric', Pipeline([ ('f_cat', feature_type_split(type = 'categoric')), #returns categoric in array for vect ('vect', vect), ])), ('numeric', Pipeline([ ('f_num', feature_type_split(type = 'numeric')), ])), ])), ('select', ff), ('tree_clf', clf), ])

Menampilkan objek pipa itu sendiri melalui print(pipeline) memberi saya titik referensi:

Pipeline(steps=[('union', FeatureUnion(n_jobs=1, transformer_list=[('categoric', Pipeline(steps=[('f_cat', feature_type_split(type='categoric')), ('vect', DictVectorizer(dtype=<type 'numpy.float64'>, separator='=', sort=True, sparse=True))])), ('numeric', Pipeline(steps=[('f_num', feature_type...it=2, min_weight_fraction_leaf=0.0, presort=False, random_state=None, splitter='best'))])

Jadi saya berjalan ke langkah serikat melalui:

pipeline.named_steps['union']

Kemudian berjalan ke level selanjutnya yaitu transformer_list (atau categoric pipeline) melalui:

pipeline.named_steps['union'].transformer_list[0]

Kemudian berjalan ke tingkat berikutnya yang merupakan langkah-langkah dalam pipa kategoris melalui:

pipeline.named_steps['union'].transformer_list[0][1]

Di atas menampilkan struktur pipa tipikal, di mana kita sekarang dapat menggunakan named_steps:
print pipeline.named_steps['union'].transformer_list[0][1].named_steps['vect']

Dan karena itu akses atribut yang kita butuhkan melalui:
print pipeline.named_steps['union'].transformer_list[0][1].named_steps['vect'].get_feature_names()

TLDR;
Telusuri struktur pipa sepotong demi sepotong dengan pipa kustom Anda, lalu akses atribut seperti biasa untuk bagian transformasi/estimator itu.

Semua 4 komentar

Saya setuju bahwa harus ada cara untuk melihat fitur mana yang dimiliki
komponen, dan saya sudah lama mengusulkan ini, tapi saya tidak berpikir itu
saat ini mungkin.

Pada 6 Januari 2016 pukul 18:23, [email protected] menulis:

saya menjalankan kode dari,

http://scikit-learnorg/stable/auto_examples/feature_stackerhtml#example -feature -stacker-py
dan dengan kode berikut,

Bangun estimator dari PCA dan seleksi Univariat:

gabungan_fitur = FeatureUnion([("pca", pca), ("univ_select", pilihan)])

Gunakan fitur gabungan untuk mengubah kumpulan data:

X_features = gabungan_fiturfit(X, y)transform(X)

dengan data yang dimasukkan ke FeatureUnion, saya ingin tahu fitur mana yang dipilih
di dokumen FeatureUnion, ada funtion get_feature_names() yang
dapatkan semua nama dari semua transformator jadi panggil saja fungsi ini
dan mendapatkan kesalahan seperti ini,
AttributeError: Transformer pca tidak menyediakan get_feature_names
sebenarnya, saya tahu pca tidak memiliki fungsi seperti ini tetapi mengapa FeatureUnion
menyediakan fungsi ini!?


Balas email ini secara langsung atau lihat di GitHub
https://github.com/scikit-learn/scikit-learn/issues/6122.

mengapa saat ini tidak mungkin!? Anda tahu, FeatureUnion memberikan fungsi get_feature_names() , dan itu juga harus berfungsi!

seperti, mungkin semuanya, model di sklearn, memiliki fungsi fit dan transform , itu harus membuat semua model yang dapat dimasukkan ke dalam FeatureUnion dan berfungsi dengan baik, memberikan atribut sebagai sumber kode get_feature_names() panggilan if not hasattr(trans, 'get_feature_names'): . jika tidak, FeatureUnion tidak selalu menyediakan fungsi get_feature_names() !!

Ini mungkin tidak mengatasi masalah khusus Anda dengan PCA secara langsung, tetapi jika saya membaca pertanyaan Anda dengan benar, Anda bertanya-tanya secara umum bagaimana cara menyerap atribut melalui saluran khusus.

Terlambat ke pesta, tetapi Anda dapat mengakses elemen di dalam pipeline, betapapun rumitnya, dengan menelusuri struktur pipeline, menemukan langkah yang sesuai (bahkan dalam featureunion) dan kemudian menggunakan atribut yang sesuai. Berikut ini contoh yang baru saja saya jalankan:

pipeline = Pipeline([ ('union', FeatureUnion([ ('categoric', Pipeline([ ('f_cat', feature_type_split(type = 'categoric')), #returns categoric in array for vect ('vect', vect), ])), ('numeric', Pipeline([ ('f_num', feature_type_split(type = 'numeric')), ])), ])), ('select', ff), ('tree_clf', clf), ])

Menampilkan objek pipa itu sendiri melalui print(pipeline) memberi saya titik referensi:

Pipeline(steps=[('union', FeatureUnion(n_jobs=1, transformer_list=[('categoric', Pipeline(steps=[('f_cat', feature_type_split(type='categoric')), ('vect', DictVectorizer(dtype=<type 'numpy.float64'>, separator='=', sort=True, sparse=True))])), ('numeric', Pipeline(steps=[('f_num', feature_type...it=2, min_weight_fraction_leaf=0.0, presort=False, random_state=None, splitter='best'))])

Jadi saya berjalan ke langkah serikat melalui:

pipeline.named_steps['union']

Kemudian berjalan ke level selanjutnya yaitu transformer_list (atau categoric pipeline) melalui:

pipeline.named_steps['union'].transformer_list[0]

Kemudian berjalan ke tingkat berikutnya yang merupakan langkah-langkah dalam pipa kategoris melalui:

pipeline.named_steps['union'].transformer_list[0][1]

Di atas menampilkan struktur pipa tipikal, di mana kita sekarang dapat menggunakan named_steps:
print pipeline.named_steps['union'].transformer_list[0][1].named_steps['vect']

Dan karena itu akses atribut yang kita butuhkan melalui:
print pipeline.named_steps['union'].transformer_list[0][1].named_steps['vect'].get_feature_names()

TLDR;
Telusuri struktur pipa sepotong demi sepotong dengan pipa kustom Anda, lalu akses atribut seperti biasa untuk bagian transformasi/estimator itu.

Silakan coba eli5 's transform_feature_names yang dapat bekerja dalam kasus di mana get_feature_names scikit-learn tidak.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat