الانحدار اللوجستي PySpark

Alanhdar Allwjsty Pyspark



في دليل PySpark هذا ، سنناقش كيفية إجراء الانحدار اللوجستي للتنبؤ بما إذا كان الشخص مصابًا بالسكتة الدماغية أم لا. بشكل عام ، تحدث السكتة الدماغية عندما يدمن الشخص على التدخين / الشراب. أسباب أخرى مثل أمراض القلب ومستويات الجلوكوز المرتفعة في الدم (مرض السكري) تسبب أيضًا السكتة الدماغية. بمساعدة نموذج تعلم آلة الانحدار اللوجستي ، سوف نتنبأ ونظهر دقة نموذجنا على بيانات العينة.

في هذا الدليل ، سنرى أولاً الطريقة ثم نتنبأ بضربة كل شخص من خلال تحليل البيانات خطوة بخطوة.

الانحدار اللوجستي

يُستخدم الانحدار اللوجستي ، الذي يُطلق عليه أيضًا 'نموذج اللوجيت' ، في التحليلات التنبؤية لمشاكل التصنيف. هذا نموذج التعلم الآلي الذي يعمل فقط على التصنيف لتصنيف الفئات (الفئات). على سبيل المثال ، هناك فئتان في السيناريو الخاص بنا (شخص مصاب بسكتة دماغية وشخص غير مصاب بسكتة دماغية). أفضل تطبيقات النموذج هي التنبؤ بأمراض القلب ، والتنبؤ بالجنس ، والتنبؤ بحياة المحاصيل ، وما إلى ذلك.







خطوات:

1. جمع البيانات: البيانات ضرورية لإجراء أي تنبؤات / تحليل. يمكن أن يكون في شكل CSV / XLSX ، من بين أمور أخرى. يمكننا تحميل هذا في بيئة Spark (DataFrame) باستخدام طريقة spark.read.csv ().



2. تحليل البيانات : يُعرف تحليل السمات / الأعمدة باسم 'تحليل البيانات'. تُعرف الأعمدة التي تساعد في التنبؤ بالفئة باسم 'السمات المستقلة'. يُعرف العمود الذي ينتج عنه التنبؤ باسم 'السمة التابعة أو الهدف'. في هذا السيناريو ، يمكننا استخدام خاصية الأعمدة لعرض جميع الأعمدة. يتم استخدام الطريقة المميزة () لمعرفة القيم الفريدة.



3. المعالجة المسبقة للبيانات: تُعرف تصفية القيم الخالية / المفقودة باسم 'المعالجة المسبقة'. نقوم بإزالة جميع القيم المفقودة في هذه المرحلة. الآلة تعرف فقط اللغة الثنائية. لذلك ، يجب تحويل جميع فئات السلسلة إلى قيم رقمية فئوية. في PySpark ، يمكننا استخدام 'StringIndexer' وهي الفئة المتاحة في الوحدة النمطية pyspark.ml.feature لتحويل فئات السلسلة إلى رقمية. يقوم تلقائيًا بتحويلها داخليًا. لا نحتاج إلى تقديم القيم. يمكنك استخدام الصيغة التالية:





indexer_data = StringIndexer (inputCol = 'String_Category_ColumnName' ، outputCol = 'New_Column_name' )

4. تجميع المتجهات: الآن ، لديك البيانات التي يمكن للآلة فهمها. في هذه المرحلة ، يجب تحويل جميع السمات المستقلة إلى عمود واحد. يمكن القيام بذلك باستخدام فئة VectorAssembler. يأخذ معلمتين: المعلمة الأولى هي inputCols التي تأخذ قائمة من السمات المستقلة. المعامل الثاني هو outputCol الذي يوجه كل المدخلات في هذا المتغير.

المجمع = VectorAssembler (inputCols = [أعمدة ...] ، outputCol = vectorized_data)

5. التحول: الآن ، قم بإعداد بياناتك عن طريق تحويل الأعمدة المحدثة (الخطوة 3) باستخدام وظيفة التحويل ().



المجمع. التحويل (inxed_data)

6. تجهيز البيانات للتدريب والاختبار: في هذه المرحلة ، نقوم بتقسيم البيانات إلى 'تدريب' و 'اختبار'. سيكون من الأفضل إذا قمنا بتقسيم بيانات 70٪ لتدريب النموذج و 30٪ بيانات لاختبار النموذج. يمكن تحقيق ذلك باستخدام طريقة randomSplit (). يأخذ قائمة تحتوي على قيمتين عائمتين: واحدة لتقسيم الاختبار والأخرى لتقسيم القطار.

train_data ، test_data = final_data.select ([ 'سمات' ، target_column]). randomSplit ([0.70.0.30])

7. تركيب النموذج والتقييم : حان الوقت لملاءمة نموذج الانحدار اللوجستي. نموذج الانحدار اللوجستي متاح في وحدة التصنيف pyspark.ml.classification. يأخذ تسمية الفئة / العمود الهدف. ينتج عن هذا أعمدة توقع واحتمال وتوقع. يتم تخزين نتائجنا في عمود التنبؤ.

# تركيب النموذج

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

# تقييم النموذج

train_results = logistic_regression_model.evaluate (train_data). التنبؤات

8. الدقة والنتائج: هذه هي المرحلة الأخيرة حيث نختبر دقة النموذج باستخدام أي تقنيات اختبار.

دعونا نلقي نظرة على المشروع التالي حيث نتوقع ما إذا كان الشخص قد تأثر بالسكتة الدماغية أم لا باستخدام نموذج الانحدار اللوجستي.

توقع السكتة الدماغية

9. قم بتثبيت وحدة PySpark في بيئتك. ما يلي هو أمر التثبيت:

نقطة تثبيت pyspark

10. لنقم بإنشاء PySpark DataFrame مع 10 سجلات مرتبطة بتفاصيل الضربات لـ 10 أشخاص. للتوضيح ، نقوم بإنشاء DataFrame بدون CSV. هناك 7 أعمدة في DataFrame هذا. 'النوع' و 'مستوى_الجلوكوز' و 'متزوج' و 'العمر' و 'مرض القلب' و 'فرط التوتر' هي سمات مستقلة و 'السكتة الدماغية' هي تسمية الفئة أو السمة التابعة. هذا يعني أن سكتة دماغية الشخص تعتمد على هذه السمات المستقلة.

استيراد pyspark

من pyspark.sql import SparkSession

linuxhint_spark_app = SparkSession.builder.appName ( 'تلميح Linux' ) .getOrCreate ()

stoke_data = [

{ 'جنس' : 'أنثى' و 'عمر' : خمسون و 'مرض قلبي' : 'نعم' و

'فرط التوتر' : 'نعم' و 'متزوج' : 'نعم' و 'مستوى الجلوكوز' : 130 و 'سكتة دماغية' : 1 } ،

{ 'جنس' : 'ذكر' و 'عمر' : عشرين و 'مرض قلبي' : 'لا' و

'فرط التوتر' : 'نعم' و 'متزوج' : 'لا' و 'مستوى الجلوكوز' : 97 و 'سكتة دماغية' : 0 } ،

{ 'جنس' : 'ذكر' و 'عمر' : 12 و 'مرض قلبي' : 'لا' و

'فرط التوتر' : 'لا' و 'متزوج' : 'لا' و 'مستوى الجلوكوز' : 98 و 'سكتة دماغية' : 0 } ،

{ 'جنس' : 'أنثى' و 'عمر' : 90 و 'مرض قلبي' : 'لا' و

'فرط التوتر' : 'لا' و 'متزوج' : 'نعم' و 'مستوى الجلوكوز' : 170 و 'سكتة دماغية' : 1 } ،

{ 'جنس' : 'ذكر' و 'عمر' : 43 و 'مرض قلبي' : 'نعم' و

'فرط التوتر' : 'نعم' و 'متزوج' : 'نعم' و 'مستوى الجلوكوز' : 150 و 'سكتة دماغية' : 1 } ،

{ 'جنس' : 'أنثى' و 'عمر' : واحد وعشرين و 'مرض قلبي' : 'لا' و

'فرط التوتر' : 'لا' و 'متزوج' : 'نعم' و 'مستوى الجلوكوز' : 110 و 'سكتة دماغية' : 0 } ،

{ 'جنس' : 'أنثى' و 'عمر' : خمسون و 'مرض قلبي' : 'نعم' و

'فرط التوتر' : 'لا' و 'متزوج' : 'نعم' و 'مستوى الجلوكوز' : 100 و 'سكتة دماغية' : 0 } ،

{ 'جنس' : 'ذكر' و 'عمر' : 3. 4 و 'مرض قلبي' : 'لا' و

'فرط التوتر' : 'نعم' و 'متزوج' : 'نعم' و 'مستوى الجلوكوز' : 190 و 'سكتة دماغية' : 1 } ،

{ 'جنس' : 'ذكر' و 'عمر' : 10 و 'مرض قلبي' : 'لا' و

'فرط التوتر' : 'لا' و 'متزوج' : 'لا' و 'مستوى الجلوكوز' : 90 و 'سكتة دماغية' : 0 } ،

{ 'جنس' : 'أنثى' و 'عمر' : 56 و 'مرض قلبي' : 'نعم' و

'فرط التوتر' : 'نعم' و 'متزوج' : 'نعم' و 'مستوى الجلوكوز' : 145 و 'سكتة دماغية' : 1 }

]

# إنشاء إطار البيانات من البيانات أعلاه

stroke_df = linuxhint_spark_app.createDataFrame (stoke_data)

# Stoke_df الفعلي

stroke_df.show ()

انتاج:

11. اعرض الأعمدة المستقلة باستخدام طريقة select ().

# عرض سمات مستقلة

stroke_df.select (stroke_df [ 'جنس' ] ، stroke_df [ 'مستوى الجلوكوز' ] ، stroke_df [ 'متزوج' ] ، stroke_df [ 'عمر' ] ، stroke_df [ 'مرض قلبي' ] ، stroke_df [ 'hyper_tension' ]).يعرض()

انتاج:

12. اعرض القيم الفريدة الموجودة في السمة الهدف (Stroke).

# قيم فريدة للسمة المستهدفة

stroke_df.select (stroke_df [ 'سكتة دماغية' ]). مميزة (). show ()

انتاج:

13. أعد نوع البيانات لجميع الأعمدة باستخدام وظيفة printSchema ().

# إرجاع نوع البيانات لجميع الأعمدة.

stroke_df.printSchema ()

انتاج:

يمكننا أن نرى أن 4 أعمدة من نوع السلسلة. فلنحولها إلى قيم رقمية فئوية.

14. دعنا نحول القيم الفئوية للسلسلة إلى قيم فئوية رقمية باستخدام StringIndexer في أعمدة 'الجنس' و 'مرض القلب' و 'hyper_tension' و 'متزوج' ونكتبها في أعمدة Categotical_Gender و Categotical_heart_disease و Categotical_hyper_tension و Categotical_married. قم بتخزين الأعمدة في indexed_data DataFrame باستخدام طريقة fit ().

من pyspark.ml.feature استيراد StringIndexer

# تحويل القيم الفئوية للسلسلة إلى قيم فئوية رقمية في عمود 'الجنس'.

indexer_data = StringIndexer (inputCol = 'جنس' ، outputCol = 'Categotical_Gender' )

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

# تحويل القيم الفئوية للسلسلة إلى قيم فئوية رقمية في عمود 'heart_disease'.

indexer_data = StringIndexer (inputCol = 'مرض قلبي' ، outputCol = 'مرض_القلب_قطعي' )

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

# تحويل القيم الفئوية للسلسلة إلى قيم فئوية رقمية في عمود 'hyper_tension'.

indexer_data = StringIndexer (inputCol = 'hyper_tension' ، outputCol = 'Categotical_hyper_tension' )

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

# تحويل القيم الفئوية للسلسلة إلى قيم فئوية رقمية في العمود 'المتزوج'.

indexer_data = StringIndexer (inputCol = 'متزوج' ، outputCol = 'متزوج_قطعي' )

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

# عرض المحدثة

indexed_data.show ()

انتاج:

15. قم بتحويل الأعمدة المستقلة إلى متجه باستخدام مجمع المتجه. اسم المتجه هو 'ميزات'.

من pyspark.ml.feature استيراد VectorAssembler

المجمع = VectorAssembler (inputCols = [ 'Categotical_Gender' و 'مرض_القلب_قطعي' و 'Categotical_hyper_tension' و 'متزوج_قطعي' و 'عمر' و

'مستوى الجلوكوز' ] ، outputCol = 'سمات' )

16. قم بتحويل البيانات السابقة إلى إطار بيانات نهائي باستخدام وظيفة التحويل () وعرضها باستخدام وظيفة show ().

انتاج:

17. تحضير البيانات للتدريب والاختبار بتقسيمها إلى 70-30. يتم تخزين 'الميزات' في train_data ويتم تخزين 'Stroke' في test_data.

# إعداد البيانات للتدريب والاختبار

train_data ، test_data = final.select ([ 'سمات' و 'سكتة دماغية' ]). randomSplit ([ 0.70 و 0.30 ])

18. ملاءمة نموذج الانحدار اللوجستي وتقييمه.

من pyspark.ml.classification استيراد LogisticRegression

# تركيب النموذج

logistic_regression_model = LogisticRegression (LabelCol = 'سكتة دماغية' ) .fit (train_data)

# تقييم النموذج

train_results = logistic_regression_model.evaluate (train_data). التنبؤات

train_results.show ()

انتاج:

19. استخدم BinaryClassificationEvaluator للتحقق من دقة النموذج. يمكننا أن نرى أن نموذجنا دقيق بنسبة 100٪.

من pyspark.ml.evaluation استيراد BinaryClassificationEvaluator

# استدعاء BinaryClassificationEvaluator

النتائج = BinaryClassificationEvaluator (rawPredictionCol = 'تنبؤ' ، labelCol = 'سكتة دماغية' )

ROC_AUC = results.evaluate (train_results)

طباعة (ROC_AUC * 100 و '٪ دقة' )

خاتمة

يمكنك التنبؤ بمشكلة تصنيف البلاط الحقيقي باستخدام نموذج الانحدار اللوجستي في PySpark. تعد إزالة القيم الخالية / المفقودة مهمة لأنها تقلل من تقييم النموذج ودقته. تعتبر المعالجة المسبقة خطوة ضرورية قبل تركيب أي نموذج للتعلم الآلي. تأكد من قيامك بهذه الخطوة بشكل صحيح ودقيق.