
Pengarang: Muttineni Sai Rohith
Awalnya diterbitkan di Towards AI the World’s Leading AI and Technology News and Media Company. Jika Anda sedang membangun produk atau layanan terkait AI, kami mengundang Anda untuk mempertimbangkan untuk menjadi sponsor AI. Di Towards AI, kami membantu menskalakan AI dan startup teknologi. Biarkan kami membantu Anda melepaskan teknologi Anda kepada massa.
Pada bagian sebelumnya, kita telah membahas tentang konsep RDD, Dataframe, dan Pyspark. Pada artikel ini, kita akan membahas tentang Pyspark MLlib dan Spark ML. Nantinya, kita akan melatih classifier untuk data Car Evaluation, dengan Encoding data, Ekstraksi fitur dan Mengembangkan model classifier menggunakan berbagai algoritma dan mengevaluasi hasilnya.
Untuk tutorial terperinci tentang konsep Pyspark, Pyspark RDD, dan DataFrame, Menangani nilai yang hilang, lihat tautan di bawah ini:
Pyspark Untuk Pemula
Spark MLlib adalah bentuk singkat dari perpustakaan pembelajaran mesin percikan. Pyspark MLlib adalah pembungkus PySpark Core untuk melakukan analisis data menggunakan algoritme pembelajaran mesin. Ia bekerja pada sistem terdistribusi dan dapat diskalakan. Kami dapat menemukan implementasi klasifikasi, pengelompokan, regresi linier, dan algoritme pembelajaran mesin lainnya di PySpark MLlib.
MLlib adalah perpustakaan pembelajaran mesin skalabel Spark yang terdiri dari algoritme dan utilitas pembelajaran mesin umum, termasuk klasifikasi, regresi, pengelompokan, pemfilteran kolaboratif, dan pengurangan dimensi, serta primitif pengoptimalan yang mendasarinya.
Sumber: Edureka
Klasifikasi menggunakan Pyspark MLlib
Sebagai bagian dari artikel ini, kami akan melakukan klasifikasi pada dataset evaluasi mobil. Dataset ini terdiri dari 6 atribut yang menjelaskan mobil dan satu variabel Target — tipe_mobil yang berisi beberapa Kategori. Dataset yang digunakan dapat dilihat disini.
Pertama, mari kita buat sparkSession —
dari pyspark.sql impor SparkSession spark = SparkSession.builder.appName(“Practice”).getOrCreate()
percikan
Mari kita memuat data dari file CSV —
df_pyspark = spark.read.csv(“car_data.csv”,inferSchema=Benar, header=Benar) df_pyspark.show(5)
Untuk sebagian besar algoritme pembelajaran mesin, data numerik adalah suatu keharusan — Jadi mari kita lihat skema DataFrame ini.
Seperti yang kita lihat, kita memiliki Kolom String. Mari menyandikannya menjadi Integer menggunakan Pyspark StringIndexer.
dari pyspark.ml.feature import StringIndexer categoricalColumns = [“buying”,”maintainence”,”doors”,”persons”,”lug_boot”,”safety”,”car_type”]
aku = []
untuk categoricalCol dalam categoricalColumns: stringIndexer = StringIndexer(inputCol = categoricalCol, outputCol = categoricalCol+”_encoded”).fit(df_pyspark) df_pyspark = stringIndexer.transform(df_pyspark) df_pyspark + categorical_pyspark = df_columpy[categoricalCol+”_encoded”].cast(‘int’)) encoded_df = df_pyspark.select(“buying_encoded”,”doors”,”maintainence_encoded”,”persons_encoded”,”lug_boot_encoded”,,”safety_encoded”,,”car_type_encoded”) encoded_df.show(5)
Dalam kode di atas, kita telah mengimpor StringIndexer dan mengubah setiap Kolom String menjadi kolom Numerik. Awalnya, StringIndexer mengembalikan data dalam format float, jadi pada langkah berikutnya, kami telah Melakukan casting dan mengubah nilai float menjadi Numerik. Setelah kami membuat DataFrame yang disandikan, kami hanya memilih nilai yang disandikan. Output dari Encoded Dataframe adalah sebagai berikut —
Saat data sudah siap, Mari lakukan ekstraksi fitur menggunakan VectorAssembler dari Pyspark
dari pyspark.ml.feature impor VectorAssembler featureAssembler = VectorAssembler(inputCols=[“buying_encoded”,”doors_encoded”,”maintainence_encoded”,”persons_encoded”,”lug_boot_encoded”,”safety_encoded”],outputCol=”features”) output = featureAssembler.transform(encoded_df) output.select(“features”,”car_type_encoded”).show(5)
Di Pyspark, tidak seperti metode yang digunakan dalam panda, kami mengonversi semua kolom independen menjadi satu fitur menggunakan VectorAssembler. Fitur yang dibuat digunakan untuk pelatihan. DataFrame terakhir kami yang berisi informasi yang diperlukan adalah sebagai berikut:
Mari kita pisahkan data untuk pelatihan dan pengujian.
melatih, tes = output.randomSplit([0.8, 0.2]benih=17)
tidak seperti train_test_split dari scikit-learn, kami melakukan pemisahan menggunakan pemisahan acak yang tersedia di Pyspark DataFrame
Data kita sudah siap, jadi mari kita siapkan modelnya.
Regresi logistik
dari pyspark.ml.classification import LogisticRegression lr = LogisticRegression(featuresCol = ‘features’, labelCol = ‘car_type_encoded’, maxIter=10) lrModel = lr.fit(train)
Kami telah membuat model regresi logistik dengan mengimpor Regresi Logistik dari Pyspark.ml, Kami memberikan “fitur” — featuresCol sebagai Variabel independen dan “car_type_encoded” — labelCol sebagai Variabel dependen.
Mari kita gunakan model kita untuk memprediksi data uji.
prediksi = lrModel.transform(test) prediksi.show(5)
Di sini, saya memangkas beberapa kolom untuk menampilkan kolom prioritas. Seperti yang bisa kita lihat, kita telah memprediksi car_type.
Mari kita evaluasi modelnya. Tidak seperti metrik yang digunakan secara tradisional, Pyspark menyediakan metrik berikut —
Karena kita memiliki MultiClass DataFrame, mari gunakan MulticlassificationEvaluator.
dari pyspark.ml.evaluation import MulticlassificationEvaluator evaluator = MulticlassClassificationEvaluator() evaluator.setLabelCol(“car_type_encoded”) evaluator.setPredictionCol(“prediction”) evaluator.evaluate(prediksi)
Seperti yang dapat kita lihat, model kami berkinerja buruk menggunakan Regresi Logistik karena berisi banyak kelas. Jadi Mari kita gunakan Pohon Keputusan untuk meningkatkan kinerja.
Pohon Keputusan
Pohon keputusan banyak digunakan karena mudah diinterpretasikan, menangani fitur kategoris, diperluas ke klasifikasi multi-kelas, tidak memerlukan penskalaan fitur, dan mampu menangkap non-linearitas dan interaksi fitur.
dari pyspark.ml.classification impor DecisionTreeClassifier
from pyspark.ml.evaluation import MulticlassClassificationEvaluator #Training Model dt = DecisionTreeClassifier(featuresCol = ‘features’, labelCol = ‘car_type_encoded’, maxDepth = 3)
dtModel = dt.fit(train) #Prediksi prediksi = dtModel.transform(test) #Mengevaluasi performance evaluator = MulticlassClassificationEvaluator()
evaluator.setLabelCol(“car_type_encoded”)
evaluator.setPredictionCol(“prediction”) print(“Test Area Under ROC: “,evaluator.evaluate(predictions))
Sejauh yang kami bisa, meskipun kinerjanya lebih baik dibandingkan dengan model Regresi Logistik, tetap saja kinerjanya tidak begitu memuaskan.
Jadi mari kita gunakan metode Ensemble seperti Random Forest untuk meningkatkan performa.
Hutan Acak
dari pyspark.ml.classification impor RandomForestClassifier
dari pyspark.ml.evaluation import MulticlassificationEvaluator #Training Model
rf = RandomForestClassifier(featuresCol = ‘features’, labelCol = ‘car_type_encoded’, numTrees = 500, maxDepth = 10)
rfModel = rf.fit(kereta) #Prediksi
prediksi = rfModel.transform(test) #Evaluating the performance
evaluator = MulticlassificationEvaluator()
evaluator.setLabelCol(“car_type_encoded”)
evaluator.setPredictionCol(“prediksi”)
print(“Area Uji Di Bawah ROC: “,evaluator.evaluate(prediksi))
Karena kami telah menggunakan hyperparameters numTrees dan maxDepth, kami dapat melihat bahwa kinerja model meningkat pesat, dan kami mendapatkan hasil yang baik.
Di sini, kami telah menggunakan metode minimal dan mencapai kinerja yang diinginkan. Atau, kita dapat menggunakan banyak algoritma dan teknik yang ada di pyspark Ml untuk membangun model.
Kami telah membahas semua konsep utama menggunakan Pyspark dalam rangkaian artikel ini.
Saya berharap untuk mendengar umpan balik atau pertanyaan Anda yang berharga. Senang membantu…
Selamat coding….
Pyspark MLlib | Klasifikasi menggunakan Pyspark ML awalnya diterbitkan di Towards AI on Medium, di mana orang-orang melanjutkan percakapan dengan menyoroti dan menanggapi cerita ini.
Diterbitkan melalui Menuju AI