Menghapus Kolom dengan Jumlah Observasi Rendah
Setelah banyak melakukan feature engineering, sebaiknya Anda meninjau kembali apa yang telah dibuat. Jika Anda menggunakan teknik otomatisasi pada fitur kategorikal seperti exploding atau OneHot Encoding, Anda mungkin mendapati sekarang ada ratusan fitur biner baru. Topik feature selection sendiri layak menjadi materi satu kursus tersendiri, namun ada beberapa langkah cepat yang dapat Anda lakukan untuk mengurangi dimensi himpunan data Anda.
Pada latihan ini, kita akan menghapus kolom yang memiliki kurang dari 30 observasi. Angka 30 sering digunakan sebagai jumlah minimum observasi untuk signifikansi statistik. Kurang dari itu, hubungan yang terbentuk cenderung menyebabkan overfitting karena kebetulan semata!
CATATAN: Data tersedia dalam dataframe, df.
Latihan ini adalah bagian dari kursus
Rekayasa Fitur dengan PySpark
Petunjuk latihan
- Dengan menggunakan
forloop yang disediakan yang melakukan iterasi melalui daftar kolom biner, hitungsumdari nilai pada kolom menggunakan fungsiagg. Gunakancollect()untuk menjalankan perhitungan segera dan simpan hasilnya keobs_count. - Bandingkan
obs_countdenganobs_threshold; pernyataanifharus bernilai benar jikaobs_countkurang dari atau sama denganobs_threshold. - Hapus kolom yang telah ditambahkan ke daftar
cols_to_removedengan menggunakandrop(). Ingat bahwa tanda*memungkinkan daftar dibongkar (unpack). - Cetak bentuk awal dan akhir dari dataframe PySpark dengan menggunakan
count()untuk jumlah rekaman danlen()padadf.columnsataunew_df.columnsuntuk mengetahui jumlah kolom.
Latihan interaktif praktis
Cobalah latihan ini dengan menyelesaikan kode contoh berikut.
obs_threshold = 30
cols_to_remove = list()
# Inspect first 10 binary columns in list
for col in binary_cols[0:10]:
# Count the number of 1 values in the binary column
obs_count = df.____({col: ____}).____()[0][0]
# If less than our observation threshold, remove
if ____ ____ ____:
cols_to_remove.append(col)
# Drop columns and print starting and ending dataframe shapes
new_df = df.____(*____)
print('Rows: ' + str(df.____()) + ' Columns: ' + str(____(df.____)))
print('Rows: ' + str(new_df.____()) + ' Columns: ' + str(____(new_df.____)))