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?
machine-learning
feature-engineering
Matthieu Veron
sumber
sumber
Jawaban:
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!x y z= x y z> 0
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.
sumber
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.
sumber
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.
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.
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.
sumber