Bắt đầu ngayBắt đầu miễn phí

Xử lý ngây thơ giá trị thiếu và giá trị phân loại

Random Forest Regression đủ mạnh để cho phép bạn bỏ qua nhiều bước chuẩn bị dữ liệu tốn thời gian và nhàm chán. Mặc dù một số triển khai Random Forest xử lý tự động giá trị thiếu và giá trị phân loại, PySpark thì không. Tuy vậy phần toán học vẫn như nhau, nên chúng ta có thể thay thế giá trị theo cách đơn giản.

Với giá trị thiếu, vì dữ liệu của chúng ta hoàn toàn dương, ta sẽ gán -1. Random forest sẽ tách (split) trên giá trị này và xử lý nó khác với các giá trị còn lại trong cùng một đặc trưng.

Với giá trị phân loại, bạn có thể ánh xạ (map) các giá trị văn bản sang số và một lần nữa random forest sẽ xử lý phù hợp bằng cách tách theo các giá trị đó. Trong ví dụ này, chúng ta sẽ “phủi bụi” pipelines từ phần Introduction to PySpark để viết mã ngắn gọn hơn. Lưu ý: bài tập sẽ bắt đầu bằng cách hiển thị dtypes của các cột trong dataframe; hãy so sánh chúng với kết quả ở cuối bài tập này.

LƯU Ý: PipelineStringIndexer đã được nhập sẵn cho bạn. Danh sách categorical_cols cũng đã có sẵn.

Bài tập này là một phần của khóa học

Feature Engineering với PySpark

Xem khóa học

Hướng dẫn bài tập

  • Thay thế các giá trị trong WALKSCOREBIKESCORE bằng -1 bằng cách dùng fillna() với tham số subset.
  • Tạo danh sách các StringIndexer bằng list comprehension để lặp qua từng cột trong categorical_cols.
  • Áp dụng fit()transform() cho pipeline indexer_pipeline.
  • Xóa các categorical_cols bằng drop() vì chúng không còn cần thiết. Kiểm tra kiểu dữ liệu kết quả bằng dtypes.

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.

# Replace missing values
df = df.____(____, ____=[____, ____])

# Create list of StringIndexers using list comprehension
indexers = [____(inputCol=____, outputCol=____+"_IDX")\
            .setHandleInvalid("keep") for ____ in ____]
# Create pipeline of indexers
indexer_pipeline = Pipeline(stages=indexers)
# Fit and Transform the pipeline to the original data
df_indexed = ____.____(df).____(df)

# Clean up redundant columns
df_indexed = df_indexed.____(*____)
# Inspect data transformations
print(df_indexed.dtypes)
Chỉnh sửa và Chạy Mã