Loại bỏ cột có ít quan sát
Sau khi thực hiện nhiều bước feature engineering, tốt nhất bạn nên dừng lại một chút để xem mình đã tạo ra những gì. Nếu bạn dùng các kỹ thuật tự động cho biến phân loại như exploding hoặc OneHot Encoding, có thể giờ đây bạn có hàng trăm biến nhị phân mới. Chủ đề chọn đặc trưng (feature selection) đủ để làm thành một khóa học khác, nhưng vẫn có vài bước nhanh giúp bạn giảm số chiều của bộ dữ liệu.
Trong bài tập này, chúng ta sẽ loại bỏ các cột có ít hơn 30 quan sát. Con số 30 thường được coi là mức tối thiểu để có ý nghĩa thống kê. Ít hơn mức đó, các mối quan hệ rất dễ dẫn đến overfitting chỉ vì sự trùng hợp!
LƯU Ý: Dữ liệu có sẵn trong dataframe df.
Bài tập này là một phần của khóa học
Feature Engineering với PySpark
Hướng dẫn bài tập
- Dùng vòng lặp
forđã cung cấp để duyệt qua danh sách các cột nhị phân, tínhsumcủa các giá trị trong cột bằng hàmagg. Dùngcollect()để thực thi tính toán ngay và lưu kết quả vàoobs_count. - So sánh
obs_countvớiobs_threshold, câu lệnhifsẽ đúng khiobs_countnhỏ hơn hoặc bằngobs_threshold. - Xóa các cột đã được thêm vào danh sách
cols_to_removebằng cách dùngdrop(). Nhớ rằng dấu*cho phép mở gói danh sách. - In kích thước ban đầu và cuối cùng của các dataframe PySpark bằng cách dùng
count()cho số bản ghi vàlen()trêndf.columnshoặcnew_df.columnsđể tìm số cột.
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
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.____)))