Konstruksi fitur dan normalisasi dalam pembelajaran mesin


13

Katakanlah saya ingin membuat Logistic Classifier untuk film M. Fitur saya akan seperti usia orang, jenis kelamin, pekerjaan, lokasi. Jadi set latihan akan menjadi seperti:

  • Lokasi Pekerjaan Jenis Kelamin Seperti (1) / Tidak Suka (0)
  • 23 M Perangkat Lunak US 1
  • 24 F Dokter UK 0

dan seterusnya .... Sekarang pertanyaan saya adalah bagaimana saya harus mengukur dan merepresentasikan fitur saya. Salah satu cara saya berpikir: Bagi usia sebagai kelompok umur, jadi 18-25, 25-35, 35 di atas, Jenis kelamin sebagai M, F, Lokasi sebagai AS, Inggris, Lainnya. Sekarang buat fitur biner untuk semua nilai ini, maka usia akan memiliki 3 fitur biner yang masing-masing terkait dengan kelompok umur dan seterusnya. Jadi, 28 tahun Pria dari AS akan diwakili sebagai 010 10 100 (010-> Kelompok Umur 25-35, 10 -> Pria, 100 -> AS)

Apa yang bisa menjadi cara terbaik untuk mewakili fitur di sini? Juga, saya perhatikan dalam beberapa mis. dari sklearn bahwa semua fitur telah diskalakan / dinormalisasi dalam beberapa cara, misalnya Jender diwakili oleh dua nilai, 0,0045 dan -,0,0045 untuk Pria dan wanita. Saya tidak tahu bagaimana melakukan scaling / mormalisasi seperti ini?


Tidak jelas bagi saya mengapa Anda ingin mengukur fitur Anda? Seringkali fitur dinormalisasi untuk memiliki 0 mean unity std dev. Anda mungkin perlu mendefinisikan masalah dalam hal apa kelas yang Anda coba untuk mengklasifikasikan, regresi logistik berguna untuk klasifikasi biner.
BGreene

Anda tentu tidak ingin mengategorikan usia. Bagaimana "peringkat film" diukur? Apakah skala 1 sampai 10, "suka / tidak suka" atau apa?
Peter Flom - Reinstate Monica

Untuk mempermudah, mari kita asumsikan bahwa hanya ada dua kelas, Suka dan Tidak Suka. Seperti menjadi 1 dan Tidak suka menjadi 0. Telah mengubah pernyataan masalah untuk mencerminkan hal ini.
snow_leopard

Jawaban:


15

Kasus biner

Jika Anda ingin fitur Anda menjadi biner, representasi yang bagus untuk nilai kategorikal ( nyata ) adalah yang panas pengkodean (resp. Termometer ). Anda tidak perlu menormalkannya.

Untuk yang panas pengkodean dari fitur kategorikal , Anda cukup mencadangkan satu bit untuk setiap kelas. Karena itu, panjang penyandian ini adalah jumlah kelas fitur Anda. Mari kita ambil contoh negara Anda,

  • 00001 untuk AS
  • 00010 untuk Inggris
  • 00100 untuk Asia
  • 01000 untuk Eropa
  • 10.000 untuk lainnya

Untuk pengkodean termometer dari fitur nyata / bilangan bulat , Anda harus memilih panjang dan ambang. Untuk contoh usia Anda, Anda telah memilih untuk membagi usia sesuai dengan ambang batas 18,25 dan 35. Pengodeannya akan

  • 000 untuk 0-17
  • 001 untuk 18-25
  • 011 untuk 25-34
  • 111 untuk 35 di atas

00010UK01130yHai

Kasus terus menerus

00010UK3030yHai

Seperti yang dikatakan BGreene, Anda harus menormalkan nilai ini untuk mempertahankan nilai rata-rata 0 dan standar deviasi 1, yang menjamin stabilitas banyak model regresi. Untuk melakukan itu, cukup kurangi mean empiris dan bagi dengan deviasi standar empiris.

Y_normalized = ( Y - mean(Y) ) / std(Y)

(30-25)/10=0,5

00010UK0,530yHai

Keren ... jadi katakanlah kita memiliki contoh orang sebagai berikut: Negara: Inggris, AgeGroup: 25-34. Ini akan mengarah ke nilai-nilai sebagai Negara: 2 , Agegroup: 4 jika kita menggunakan satu penyandian panas . Sekarang saat membuat vektor fitur kita harus menormalkan ini. Jadi katakanlah mereka datang sebagai 0,4 dan 0,6, maka vektor fitur input kami untuk memodelkan pada dasarnya menjadi [0,4, 0,6], benar?
snow_leopard

hmm .. jika saya menggunakan pengkodean "satu panas" haruskah saya mengonversi nilai pengkodean ke representasi Integer sebagai fitur, misalnya 0010 menjadi 2. ATAU haruskah saya memperlakukan ini sebagai serangkaian 4 fitur yang hanya satu yang AKTIF? Dalam kasus sebelumnya, apakah itu tidak memperkenalkan gagasan bahwa 1000 lebih jauh ke 0001 kemudian 0100 yang mungkin bukan maksud karena kita tidak ingin nilai fitur AS lebih dekat dengan nilai fitur Inggris daripada nilai Asia atau yang lainnya?
snow_leopard

Saya mengedit jawaban saya untuk mengklarifikasi poin-poin ini. Anda tidak perlu menormalkan fitur-fitur biner, dan Anda harus memperlakukannya sebagai vektor, jangan mengubahnya menjadi bilangan bulat.
Emile

Penjelasan yang sangat membantu dan jernih. Terima kasih!
George Liu
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.