Eksik ve Kategorik Değerleri Safça Ele Alma
Random Forest Regression, daha zaman alıcı ve sıkıcı birçok veri hazırlama adımını yok saymamıza yetecek kadar sağlamdır. Random Forest'ın bazı uygulamaları eksik ve kategorik değerleri otomatik olarak ele alırken, PySpark bunu yapmaz. Ancak matematik aynı kaldığından, bazı saf (naif) değer atamalarıyla idare edebiliriz.
Eksik değerler için, verilerimiz kesinlikle pozitif olduğundan -1 atayacağız. Random forest bu değerde dallanacak ve aynı özelliğin geri kalan değerlerinden farklı şekilde ele alacaktır.
Kategorik değerler için, metin değerleri sayılara eşleyebiliriz ve random forest yine bunları üzerinde dallanarak uygun şekilde ele alacaktır. Bu örnekte, kodumuzu daha derli toplu yazmak için PySpark'a Giriş bölümünden pipelines konusunu tekrar kullanacağız. Lütfen egzersizin, veri çerçevesindeki sütunların dtypes bilgisini göstererek başladığını ve bunları bu egzersizin sonunda elde edeceğin sonuçlarla karşılaştırmanı isteyeceğini unutma.
NOT: Pipeline ve StringIndexer senin için zaten içe aktarıldı. categorical_cols listesi de hazır.
Bu egzersiz, kursun bir parçasıdır
PySpark ile Özellik Mühendisliği
Egzersiz talimatları
WALKSCOREveBIKESCOREiçindeki değerlerifillna()vesubsetparametresini kullanarak -1 ile değiştir.- Liste üreteci kullanarak
categorical_colsiçindeki her sütun için birerStringIndexeroluştur. indexer_pipelinehattınafit()vetransform()uygula.- Artık gerekmediği için
drop()ilecategorical_colssütunlarını kaldır. Sonuç veri türlerinidtypesile incele.
Uygulamalı etkileşimli egzersiz
Bu egzersizi bu örnek kodu tamamlayarak deneyin.
# 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)