Regresi Logistik PySpark

Regresi Logistik Pyspark



Dalam panduan PySpark ini, kita akan membahas bagaimana melakukan regresi logistik untuk memprediksi apakah seseorang terkena stroke atau tidak. Pada umumnya stroke terjadi ketika seseorang kecanduan rokok/minuman. Alasan lain seperti penyakit jantung dan kadar glukosa yang tinggi dalam darah (Diabetes) juga menyebabkan stroke. Dengan bantuan model Pembelajaran Mesin Regresi Logistik, kami akan memprediksi dan menunjukkan keakuratan model kami pada data sampel.

Dalam panduan ini, pertama-tama kita akan melihat pendekatannya dan kemudian memprediksi pukulan setiap orang dengan menganalisis data langkah demi langkah.

Regresi logistik

Regresi logistik, juga disebut 'Model Logit', digunakan dalam analitik prediktif untuk masalah klasifikasi. Ini adalah model Machine Learning yang bekerja hanya pada klasifikasi untuk mengklasifikasikan kelas (kategori). Misalnya, ada dua kategori dalam skenario kami (orang yang terkena stroke dan orang yang tidak terkena stroke). Aplikasi terbaik dari model ini adalah prediksi penyakit jantung, prediksi jenis kelamin, prediksi umur tanaman, dll.







Langkah:

1. Pengumpulan Data: Data diperlukan untuk melakukan prediksi/analisis. Itu bisa dalam bentuk CSV/XLSX, antara lain. Kita dapat memuat ini ke dalam lingkungan Spark (DataFrame) menggunakan metode spark.read.csv() .



2. Analisis Data : Menganalisis atribut/kolom dikenal sebagai “analisis data”. Kolom yang membantu memprediksi kelas dikenal sebagai 'atribut independen'. Kolom yang menghasilkan prediksi dikenal sebagai 'atribut dependen atau target'. Dalam skenario ini, kita dapat menggunakan properti kolom untuk menampilkan semua kolom. Metode yang berbeda () digunakan untuk melihat nilai unik.



3. Pemrosesan Awal Data: Memfilter nilai null/hilang dikenal sebagai 'preprocessing'. Kami menghapus semua nilai yang hilang pada tahap ini. Mesin hanya mengetahui bahasa biner. Jadi, semua kategori string harus dikonversi ke nilai kategori numerik. Di PySpark, kita bisa menggunakan “StringIndexer” yang merupakan kelas yang tersedia di modul pyspark.ml.feature untuk mengubah kategori string menjadi numerik. Ini secara otomatis mengubahnya secara internal. Kita tidak perlu memberikan nilai. Anda dapat menggunakan sintaks berikut:





indexer_data=StringIndexer(inputCol= 'String_Category_ColumnName' , keluaranKol= 'Nama_Kolom_Baru' )

4. Perakitan Vektor: Sekarang, Anda memiliki data yang dapat dipahami oleh mesin. Pada tahap ini, semua atribut independen harus divektorisasi menjadi satu kolom. Ini dapat dilakukan dengan menggunakan kelas VectorAssembler. Dibutuhkan dua parameter: Parameter pertama adalah inputCols yang mengambil daftar atribut independen. Parameter kedua adalah outputCol yang memvektor semua inputCol ke dalam variabel ini.

assembler=VectorAssembler(inputCols=[kolom…],outputCol=vectorized_data)

5. Transformasi: Sekarang, siapkan data Anda dengan mengubah kolom yang diperbarui (Langkah 3) menggunakan fungsi transform().



assembler.transform(inxed_data)

6. Mempersiapkan Data untuk Pelatihan & Pengujian: Pada tahap ini, kami membagi data menjadi 'pelatihan' dan 'pengujian'. Akan lebih baik jika kita membagi 70% data untuk melatih model dan 30% data untuk menguji model. Ini dapat dicapai dengan menggunakan metode randomSplit(). Dibutuhkan daftar yang menyimpan dua nilai float: satu untuk test split dan satu lagi untuk train split.

data_pelatihan,data_ujian=data_akhir.pilih([ 'fitur' ,target_column]).randomSplit([0.70.0.30])

7. Pemasangan & Evaluasi Model : Saatnya menyesuaikan model Regresi Logistik. Model Regresi Logistik tersedia di modul pyspark.ml.classification. Dibutuhkan kolom label/target kelas. Ini menghasilkan kolom rawPrediction, probabilitas, dan prediksi. Hasil kami disimpan di kolom prediksi.

# Model pas

logistic_regression_model=LogisticRegression(labelCol=target_column).fit(train_data)

# Evaluasi model

train_results=logistic_regression_model.evaluate(train_data).prediksi

8. Akurasi & Hasil: Ini adalah tahap terakhir di mana kami menguji akurasi model menggunakan teknik pengujian apa pun.

Mari kita lihat proyek berikut di mana kami memprediksi apakah seseorang terkena stroke atau tidak menggunakan model Regresi Logistik.

Prediksi Pukulan

9. Instal modul PySpark di lingkungan Anda. Berikut ini adalah perintah untuk menginstal:

pip instal pyspark

10. Mari buat PySpark DataFrame dengan 10 catatan yang terkait dengan detail coretan 10 orang. Untuk demonstrasi, kami membuat DataFrame tanpa CSV. Ada 7 kolom dalam DataFrame ini. 'Jenis kelamin', 'Tingkat_Glukosa', 'menikah', 'usia', 'penyakit_jantung', 'hiper_tensi' adalah atribut independen dan 'Stroke' adalah label kelas atau atribut dependen. Itu berarti bahwa pukulan seseorang bergantung pada atribut independen ini.

impor pyspark

dari pyspark.sql impor SparkSession

linuxhint_spark_app = SparkSession.builder.appName( 'Petunjuk Linux' ).getOrCreate()

stoke_data =[

{ 'Jenis kelamin' : 'Perempuan' , 'usia' : lima puluh , 'penyakit jantung' : 'Ya' ,

'hipertensi' : 'Ya' , 'telah menikah' : 'Ya' , 'Tingkat_Glukosa' : 130 , 'Stroke' : 1 },

{ 'Jenis kelamin' : 'Pria' , 'usia' : dua puluh , 'penyakit jantung' : 'TIDAK' ,

'hipertensi' : 'Ya' , 'telah menikah' : 'TIDAK' , 'Tingkat_Glukosa' : 97 , 'Stroke' : 0 },

{ 'Jenis kelamin' : 'Pria' , 'usia' : 12 , 'penyakit jantung' : 'TIDAK' ,

'hipertensi' : 'TIDAK' , 'telah menikah' : 'TIDAK' , 'Tingkat_Glukosa' : 98 , 'Stroke' : 0 },

{ 'Jenis kelamin' : 'Perempuan' , 'usia' : 90 , 'penyakit jantung' : 'TIDAK' ,

'hipertensi' : 'TIDAK' , 'telah menikah' : 'Ya' , 'Tingkat_Glukosa' : 170 , 'Stroke' : 1 },

{ 'Jenis kelamin' : 'Pria' , 'usia' : 43 , 'penyakit jantung' : 'Ya' ,

'hipertensi' : 'Ya' , 'telah menikah' : 'Ya' , 'Tingkat_Glukosa' : 150 , 'Stroke' : 1 },

{ 'Jenis kelamin' : 'Perempuan' , 'usia' : dua puluh satu , 'penyakit jantung' : 'TIDAK' ,

'hipertensi' : 'TIDAK' , 'telah menikah' : 'Ya' , 'Tingkat_Glukosa' : 110 , 'Stroke' : 0 },

{ 'Jenis kelamin' : 'Perempuan' , 'usia' : lima puluh , 'penyakit jantung' : 'Ya' ,

'hipertensi' : 'TIDAK' , 'telah menikah' : 'Ya' , 'Tingkat_Glukosa' : 100 , 'Stroke' : 0 },

{ 'Jenis kelamin' : 'Pria' , 'usia' : 3. 4 , 'penyakit jantung' : 'TIDAK' ,

'hipertensi' : 'Ya' , 'telah menikah' : 'Ya' , 'Tingkat_Glukosa' : 190 , 'Stroke' : 1 },

{ 'Jenis kelamin' : 'Pria' , 'usia' : 10 , 'penyakit jantung' : 'TIDAK' ,

'hipertensi' : 'TIDAK' , 'telah menikah' : 'TIDAK' , 'Tingkat_Glukosa' : 90 , 'Stroke' : 0 },

{ 'Jenis kelamin' : 'Perempuan' , 'usia' : 56 , 'penyakit jantung' : 'Ya' ,

'hipertensi' : 'Ya' , 'telah menikah' : 'Ya' , 'Tingkat_Glukosa' : 145 , 'Stroke' : 1 }

]

# buat kerangka data dari data di atas

stroke_df = linuxhint_spark_app.createDataFrame(stoke_data)

# stoke_df aktual

stroke_df.show()

Keluaran:

11. Tampilkan kolom independen menggunakan metode select().

# Tampilkan atribut independen

stroke_df.pilih(stroke_df[ 'Jenis kelamin' ],goresan_df[ 'Glukosa_tingkat' ],goresan_df[ 'telah menikah' ],goresan_df[ 'usia' ],goresan_df[ 'penyakit jantung' ],goresan_df[ 'hipertensi' ]).menunjukkan()

Keluaran:

12. Menampilkan nilai unik yang ada di atribut target (Stroke).

# nilai unik atribut target

stroke_df.pilih(stroke_df[ 'Stroke' ]).distinct().tampilkan()

Keluaran:

13. Kembalikan tipe data semua kolom menggunakan fungsi printSchema().

# Kembalikan tipe data dari semua kolom.

stroke_df.printSchema()

Keluaran:

Kita dapat melihat bahwa 4 kolom bertipe string. Mari kita ubah menjadi nilai numerik kategorikal.

14. Mari kita ubah nilai kategorikal string menjadi nilai kategorikal numerik menggunakan StringIndexer di kolom “Gender”, “heart_disease”, “hyper_tension”, dan “married” dan tulis ini ke dalam kolom Categotical_Gender, Categotical_heart_disease, Categotical_hyper_tension, dan Categotical_married. Simpan kolom ke dalam Indexed_data DataFrame menggunakan metode fit().

dari pyspark.ml.feature import StringIndexer

# Ubah nilai kategorikal string menjadi nilai kategorikal numerik di kolom 'Jenis Kelamin'.

indexer_data=StringIndexer(inputCol= 'Jenis kelamin' , keluaranKol= 'Categotical_Gender' )

indexed_data=indexer_data.fit(stroke_df).transform(stroke_df)

# Ubah nilai kategorikal string menjadi nilai kategorikal numerik di kolom 'heart_disease'.

indexer_data=StringIndexer(inputCol= 'penyakit jantung' , keluaranKol= 'Categotical_heart_disease' )

indexed_data=indexer_data.fit(indexed_data).transform(indexed_data)

# Ubah nilai kategorikal string menjadi nilai kategorikal numerik di kolom 'hiper_ketegangan'.

indexer_data=StringIndexer(inputCol= 'hipertensi' , keluaranKol= 'Categotical_hyper_tension' )

indexed_data=indexer_data.fit(indexed_data).transform(indexed_data)

# Ubah nilai kategorikal string menjadi nilai kategorikal numerik di kolom 'menikah'.

indexer_data=StringIndexer(inputCol= 'telah menikah' , keluaranKol= 'Categotical_married' )

indexed_data=indexer_data.fit(indexed_data).transform(indexed_data)

# Tampilkan yang diperbarui

indexed_data.show()

Keluaran:

15. Ubah kolom independen menjadi vektor menggunakan assembler vektor. Nama vektornya adalah 'fitur'.

dari pyspark.ml.feature impor VectorAssembler

assembler=VectorAssembler(inputCols=[ 'Categotical_Gender' , 'Categotical_heart_disease' , 'Categotical_hyper_tension' , 'Categotical_married' , 'usia' ,

'Tingkat_Glukosa' ], keluaranKol= 'fitur' )

16. Ubah data sebelumnya menjadi DataFrame final menggunakan fungsi transform() dan tampilkan menggunakan fungsi show().

Keluaran:

17. Persiapkan data untuk pelatihan dan pengujian dengan membaginya menjadi 70-30. 'Fitur' disimpan di train_data dan 'Stroke' disimpan di test_data.

# Siapkan data untuk pelatihan dan pengujian

train_data,test_data=final.select([ 'fitur' , 'Stroke' ]).randomSplit([ 0,70 , 0,30 ])

18. Sesuaikan model Regresi Logistik dan evaluasilah.

dari pyspark.ml.classification import LogisticRegression

# Model pas

logistic_regression_model=LogisticRegression(labelCol= 'Stroke' .fit(data_kereta)

# Evaluasi model

train_results=logistic_regression_model.evaluate(train_data).prediksi

train_results.show()

Keluaran:

19. Gunakan BinaryClassificationEvaluator untuk memeriksa akurasi model. Kita dapat melihat bahwa model kita 100% akurat.

dari pyspark.ml.evaluation impor BinaryClassificationEvaluator

# panggil Penilai Klasifikasi Biner

hasil = BinaryClassificationEvaluator(rawPredictionCol= 'ramalan' ,labelKol= 'Stroke' )

ROC_AUC = hasil.evaluasi(hasil_pelatihan)

cetak(ROC_AUC * 100 , '% Akurasi' )

Kesimpulan

Anda dapat memprediksi masalah klasifikasi petak nyata menggunakan model Regresi Logistik di PySpark. Menghapus nilai null/hilang penting karena mengurangi evaluasi dan akurasi model. Preprocessing adalah langkah penting sebelum menyesuaikan model pembelajaran mesin apa pun. Pastikan Anda melakukan langkah ini dengan benar dan akurat.