Missing और Categorical Values को साधारण तरीके से संभालना
Random Forest Regression इतनी मजबूत होती है कि हम कई समय लेने वाले और उबाऊ डेटा तैयारी के चरणों को नज़रअंदाज़ कर सकते हैं। कुछ Random Forest इम्प्लीमेंटेशंस missing और categorical values को अपने-आप संभाल लेते हैं, लेकिन PySpark का ऐसा नहीं है। फिर भी गणित वही रहता है, इसलिए हम कुछ सरल रिप्लेसमेंट्स से काम चला सकते हैं.
Missing values के लिए, चूँकि हमारा डेटा strictly positive है, हम -1 असाइन करेंगे। Random forest इस वैल्यू पर split करेगी और उसी फीचर के बाकी मानों से अलग तरीके से उसे ट्रीट करेगी.
Categorical values के लिए, हम टेक्स्ट वैल्यूज़ को नंबरों पर मैप कर सकते हैं, और random forest उन पर भी सही तरह से split करके हैंडल कर लेगी। इस उदाहरण में, हम Introduction to PySpark से लिए गए pipelines को फिर से इस्तेमाल करेंगे ताकि कोड अधिक संक्षेप में लिखा जा सके। कृपया ध्यान दें कि यह अभ्यास dataframe के कॉलम्स के dtypes दिखाने से शुरू होगा; इस अभ्यास के अंत में मिलने वाले परिणामों से उनकी तुलना कीजिए.
NOTE: Pipeline और StringIndexer आपके लिए पहले से इम्पोर्ट किए गए हैं। लिस्ट categorical_cols भी उपलब्ध है.
यह अभ्यास पाठ्यक्रम का हिस्सा है
PySpark के साथ Feature Engineering
अभ्यास निर्देश
WALKSCOREऔरBIKESCOREमें मौजूद मानों कोfillna()औरsubsetपैरामीटर का उपयोग करके -1 से बदलें.categorical_colsकी हर कॉलम पर इटरेट करने के लिए list comprehension का उपयोग करकेStringIndexers की एक लिस्ट बनाएँ.- पाइपलाइन
indexer_pipelineपरfit()औरtransform()लागू करें. - अब उनकी ज़रूरत नहीं है, इसलिए
drop()का उपयोग करकेcategorical_colsको हटा दें। परिणाम के data types देखने के लिएdtypesजाँचें.
इंटरैक्टिव व्यावहारिक अभ्यास
इस अभ्यास को इस नमूना कोड को पूरा करके आज़माएँ।
# 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)