Utilitas rekayasa-fitur: Mengapa membuat fitur baru berdasarkan fitur yang ada?

30

Saya sering melihat orang membuat fitur baru berdasarkan fitur yang ada pada masalah pembelajaran mesin. Misalnya, di sini: https://triangleinequality.wordpress.com/2013/09/08/basic-feature-engineering-with-the-titanic-data/ orang telah menganggap ukuran keluarga seseorang sebagai fitur baru, berdasarkan pada jumlah saudara, saudari, dan orang tua, yang merupakan fitur yang ada.

Tapi apa gunanya ini? Saya tidak mengerti mengapa pembuatan fitur baru yang berkorelasi bermanfaat. Bukankah ini tugas algoritma untuk melakukannya sendiri?

Matthieu Veron
sumber
Terkait: stats.stackexchange.com/questions/349155/…
Sycorax mengatakan Reinstate Monica

Jawaban:

30

Contoh paling sederhana yang digunakan untuk menggambarkan hal ini, adalah masalah XOR (lihat gambar di bawah). Bayangkan bahwa Anda diberi data yang berisi dan y terkoordinasi dan kelas biner untuk diprediksi. Anda dapat mengharapkan algoritma pembelajaran mesin Anda untuk mengetahui batas keputusan yang benar dengan sendirinya, tetapi jika Anda menghasilkan fitur tambahan z = x y , maka masalahnya menjadi sepele karena z > 0 memberi Anda kriteria keputusan yang hampir sempurna untuk klasifikasi dan Anda menggunakan sederhana saja hitung!xyz=xyz>0

Masalah XOR

Jadi sementara dalam banyak kasus Anda dapat mengharapkan dari algoritma untuk menemukan solusinya, atau, dengan rekayasa fitur Anda dapat menyederhanakan masalah. Masalah sederhana lebih mudah dan lebih cepat untuk dipecahkan, dan membutuhkan algoritma yang tidak terlalu rumit. Algoritme sederhana seringkali lebih kuat, hasilnya seringkali lebih dapat diinterpretasikan, lebih terukur (sumber daya komputasi lebih sedikit, waktu untuk melatih dll) dan portabel. Anda dapat menemukan lebih banyak contoh dan penjelasan dalam pembicaraan luar biasa dari Vincent D. Warmerdam, yang diberikan dari konferensi PyData di London .

Selain itu, jangan percaya semua yang dikatakan pemasar pembelajaran mesin kepada Anda. Dalam kebanyakan kasus, algoritma tidak akan "belajar sendiri". Anda biasanya memiliki waktu, sumber daya, daya komputasi yang terbatas, dan data biasanya memiliki ukuran yang terbatas dan berisik, keduanya tidak membantu.

Mengambil ini secara ekstrem, Anda dapat memberikan data Anda sebagai foto catatan tulisan tangan dari hasil eksperimen dan meneruskannya ke jaringan saraf rumit. Pertama-tama akan belajar mengenali data pada gambar, kemudian belajar memahaminya, dan membuat prediksi. Untuk melakukannya, Anda akan memerlukan komputer yang kuat dan banyak waktu untuk melatih dan menyetel model dan membutuhkan data dalam jumlah besar karena menggunakan jaringan saraf yang rumit. Menyediakan data dalam format yang dapat dibaca komputer (sebagai tabel angka), sangat menyederhanakan masalah, karena Anda tidak memerlukan semua pengenalan karakter. Anda dapat menganggap rekayasa fitur sebagai langkah berikutnya, di mana Anda mengubah data sedemikian rupa untuk membuat bermaknafitur, sehingga algoritma Anda memiliki lebih sedikit untuk mencari tahu sendiri. Untuk memberikan analogi, itu seperti Anda ingin membaca buku dalam bahasa asing, sehingga Anda perlu mempelajari bahasa itu terlebih dahulu, dibandingkan membacanya diterjemahkan dalam bahasa yang Anda mengerti.

Dalam contoh data Titanic, algoritme Anda perlu mengetahui bahwa menjumlahkan anggota keluarga masuk akal, untuk mendapatkan fitur "ukuran keluarga" (ya, saya mempersonalisasikannya di sini). Ini adalah fitur yang jelas untuk manusia, tetapi tidak jelas jika Anda melihat data hanya sebagai beberapa kolom angka. Jika Anda tidak tahu kolom apa yang bermakna ketika dipertimbangkan bersama dengan kolom lain, algoritme dapat mengetahuinya dengan mencoba setiap kombinasi kolom yang mungkin. Tentu, kami memiliki cara cerdas untuk melakukan ini, tetapi tetap saja, akan jauh lebih mudah jika informasi tersebut diberikan kepada algoritma segera.

Tim
sumber
Terima kasih, ini dijelaskan dengan sangat baik dan sangat menarik!
Matthieu Veron
Saya menemukan jawaban Anda sangat baik tetapi saya pikir lebih baik untuk memenuhi syarat sedikit. Secara khusus, saya berpikir bahwa rekayasa fitur dalam hal istilah interaksi tidak menyederhanakan banyak hal untuk algoritma seperti RF (meskipun masih dapat membantu) karena RF menangkap istilah interaksi sampai batas tertentu sendiri. Beritahu saya jika saya kehilangan sesuatu yang penting. Tapi ya, secara umum, rekayasa fitur menyederhanakan dan membantu banyak hal.
Poete Maudit
@PoeteMaudit memang benar bahwa pohon keputusan (dan juga RF) memodelkan satu interaksi besar, tetapi ini adalah jenis interaksi tertentu, tidak setiap interaksi yang memungkinkan. Selain itu, rekayasa fitur tidak hanya tentang interaksi.
Tim
Tentunya saya setuju dengan poin Anda. Pertama, RF memodelkan jenis interaksi tertentu (maksud Anda terutama x * y?). Kedua, rekayasa fitur itu tentu bukan hanya tentang interaksi.
Poete Maudit
14

Nah, jika Anda berencana untuk menggunakan classifier linier yang sederhana, sangat masuk akal untuk menghasilkan fitur-fitur baru yang merupakan fungsi non-linear dari yang sudah ada, khususnya jika pengetahuan domain Anda menunjukkan bahwa fitur yang dihasilkan akan bermakna dan informatif. Perhatikan bahwa classifier linier tidak dapat mempertimbangkan fitur-fitur kompleks kecuali Anda secara eksplisit menyediakannya.

Idealnya, Jika Anda menggunakan algoritma klasifikasi nonlinier yang cukup kuat, ia harus dapat membuat batas keputusan yang mempertimbangkan transformasi non-linear sewenang-wenang dari fitur input jika mereka informatif untuk klasifikasi. Namun, dalam praktiknya sebagian besar pengklasifikasi non-linear hanya melihat beberapa jenis transformasi. Misalnya, SVM kernel polinomial akan mempertimbangkan interaksi polinomial antar fitur, tetapi mungkin fitur yang lebih informatif dapat dibuat dengan menerapkan jenis transformasi lainnya ...

Singkatnya, jika pengetahuan domain menunjukkan bahwa kombinasi fitur non-linear buatan tangan mungkin informatif, masuk akal untuk menambahkannya ke dalam set fitur yang ada.

Daniel López
sumber
Baik, saya mengerti ! Tetapi bagaimana saya bisa tahu jika fitur yang saya buat bermakna dan informatif? Maksud saya, masalah dapat memiliki penjelasan kontra-intuitif. Dari apa yang saya mengerti, membuat fitur adalah cara untuk mengarahkan algoritma dalam satu arah, untuk menghemat waktu pada prediksi. Jadi dalam beberapa cara, kami memengaruhi algoritme. Bagaimana cara memverifikasi bahwa kita memengaruhi dengan benar?
Matthieu Veron
2
Nah, itu adalah pengetahuan domain yang masuk. Misalnya, jika Anda merancang sistem diagnosis medis, Anda dapat berbicara dengan dokter dan menanyakan informasi apa yang mereka gunakan untuk mendiagnosis pasien. Misalnya, jika seorang dokter mengatakan "Jika pasien mengalami demam dan sakit kepala, maka ia kemungkinan menderita flu". Kalimat itu mungkin menunjukkan bahwa menyertakan fitur bendera baru yang menunjukkan adanya demam dan sakit kepala mungkin merupakan ide yang baik (khususnya jika Anda menggunakan classifier linier, yang tidak dapat "melihat" fitur interaksi polinom dengan sendirinya).
Daniel López
1
Namun demikian, ini lebih merupakan seni daripada sains. Pada akhirnya, Anda perlu memvalidasi keefektifan fitur kerajinan tangan Anda dengan menguji model Anda pada set pengujian dengan protokol eksperimental yang tidak bias ...
Daniel López
3

Memang benar bahwa beberapa model pembelajaran mesin memiliki kemampuan untuk menangani non-linearitas dan interaksi antar variabel, namun, tergantung pada situasinya, saya melihat tiga alasan mengapa ini menjadi perlu.

  1. Y=1

Batas Lingkaran

x1x2y=x0+c1x1+c2x2y=x0+c1x12+c2x22

  1. Jika Anda tahu sebelumnya bahwa beberapa fitur (dari pengetahuan atau pengalaman bisnis), ini dapat membantu membuatnya untuk mempercepat runtime model dan membuatnya mudah untuk model Anda. Misalnya, dalam contoh data Titanic Anda dan jika Anda menggunakan model klasifikasi pohon keputusan. Jika Anda tahu bahwa wanita tua (usia & jenis kelamin) lebih mungkin untuk bertahan hidup, dengan membuat fitur tunggal yang menangkap informasi, pohon Anda dapat membuat satu pemisahan pada variabel baru alih-alih membuat dua pemisahan pada dua variabel. Ini dapat mempercepat waktu perhitungan jika Anda tahu sebelumnya bahwa fitur itu signifikan.

  2. Di dunia nyata, Anda tidak akan mendapatkan satu set data seperti yang disediakan Kaggle. Sebagai gantinya, Anda mendapatkan informasi dari semua tempat. Misalnya, jika Anda ingin memperkirakan gesekan pelanggan untuk perusahaan ritel online seperti Amazon, Anda memiliki info demografi pelanggan, beli info transaksi. Anda perlu menghasilkan banyak fitur dari berbagai sumber, dalam hal ini, Anda akan menemukan banyak fitur yang berguna dapat diperoleh / dikumpulkan dari tingkat transaksi. Seperti yang dikatakan Andrew Ng: Sering kali, kemampuan untuk melakukan fitur-teknik mendefinisikan keberhasilan atau kegagalan proyek pembelajaran mesin.

Anthony Lei
sumber