Логистическая регрессия PySpark

Logisticeskaa Regressia Pyspark



В этом руководстве PySpark мы обсудим, как выполнить логистическую регрессию, чтобы предсказать, затронут ли человек инсультом или нет. Как правило, инсульт возникает, когда человек пристрастился к курению/алкоголю. Другие причины, такие как болезни сердца и высокий уровень глюкозы в крови (диабет), также вызывают инсульт. С помощью модели машинного обучения логистической регрессии мы будем прогнозировать и показывать точность нашей модели на выборочных данных.

В этом руководстве мы сначала увидим подход, а затем предскажем ход каждого человека, шаг за шагом анализируя данные.

Логистическая регрессия

Логистическая регрессия, также называемая «логит-моделью», используется в прогнозной аналитике для задач классификации. Это модель машинного обучения, которая работает только с классификацией для классификации классов (категорий). Например, в нашем сценарии есть две категории (человек, перенесший инсульт, и человек, не перенесший инсульт). Лучшими приложениями модели являются прогнозирование сердечных заболеваний, прогнозирование пола, прогнозирование продолжительности жизни урожая и т. Д.







Шаги:

1. Сбор данных: Данные необходимы для выполнения любых прогнозов/анализа. Среди прочего, он может быть в формате CSV/XLSX. Мы можем загрузить это в среду Spark (DataFrame), используя метод spark.read.csv().



2. Анализ данных : Анализ атрибутов/столбцов известен как «анализ данных». Столбцы, которые помогают предсказать класс, известны как «независимые атрибуты». Столбец, который приводит к предсказанию, известен как «зависимый или целевой атрибут». В этом сценарии мы можем использовать свойство columns для отображения всех столбцов. Метод Different() используется для просмотра уникальных значений.



3. Предварительная обработка данных: Фильтрация нулевых/отсутствующих значений называется «предварительной обработкой». Мы удаляем все недостающие значения на этом этапе. Машина знает только бинарный язык. Таким образом, все строковые категории должны быть преобразованы в числовые категориальные значения. В PySpark мы можем использовать «StringIndexer», который является доступным классом в модуле pyspark.ml.feature для преобразования строковых категорий в числовые. Он автоматически конвертирует их внутри. Нам не нужно предоставлять значения. Вы можете использовать следующий синтаксис:





indexer_data = StringIndexer (inputCol = 'String_Category_ColumnName' , выходной столбец = 'Новое_имя_столбца' )

4. Сборка векторов: Теперь у вас есть данные, которые машина может понять. На этом этапе все независимые атрибуты должны быть векторизованы в один столбец. Это можно сделать с помощью класса VectorAssembler. Он принимает два параметра: первый параметр — это inputCols, который принимает список независимых атрибутов. Второй параметр — это outputCol, который векторизует все inputCol в эту переменную.

assembler=VectorAssembler(inputCols=[столбцы…],outputCol=vectorized_data)

5. Трансформация: Теперь подготовьте данные, преобразовав обновленные столбцы (шаг 3) с помощью функции transform().



assembler.transform (inxed_data)

6. Подготовка данных для обучения и тестирования: На этом этапе мы разделяем данные на «обучение» и «тестирование». Будет лучше, если мы разделим 70% данных для обучения модели и 30% данных для тестирования модели. Этого можно добиться с помощью метода randomSplit(). Он принимает список, который содержит два значения с плавающей запятой: одно для тестового разделения, а другое для разделения поезда.

train_data,test_data=final_data.select([ 'функции' , target_column].randomSplit([0.70.0.30])

7. Подбор и оценка модели : пришло время подогнать модель логистической регрессии. Модель логистической регрессии доступна в модуле pyspark.ml.classification. Он принимает столбец метки/цели класса. Это приводит к столбцам rawPrediction, вероятности и предсказания. Наши результаты хранятся в столбце прогнозов.

# Примерка модели

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

# Оценка модели

train_results=logistic_regression_model.evaluate(train_data).predictions

8. Точность и результаты: Это заключительный этап, на котором мы проверяем точность модели, используя любые методы тестирования.

Давайте посмотрим на следующий проект, в котором мы предсказываем, затронут ли человек инсультом или нет, используя модель логистической регрессии.

Прогноз инсульта

9. Установите модуль PySpark в вашей среде. Ниже приведена команда для установки:

pip установить pyspark

10. Давайте создадим PySpark DataFrame с 10 записями, которые связаны с деталями инсульта 10 человек. Для демонстрации создадим DataFrame без CSV. В этом DataFrame 7 столбцов. «Пол», «Уровень_глюкозы», «женат», «возраст», «болезнь_сердца», «гипертензия» — это независимые атрибуты, а «Инсульт» — это метка класса или зависимый атрибут. Это означает, что инсульт человека зависит от этих независимых атрибутов.

импортировать pyspark

из pyspark.sql импортировать SparkSession

linuxhint_spark_app = SparkSession.builder.appName( «Подсказка по Линукс» ).getOrCreate()

сток_данные =[

{ 'Пол' : 'Женский' , 'возраст' : пятьдесят , 'сердечное заболевание' : 'Да' ,

'гипер_напряжение' : 'Да' , 'женатый' : 'Да' , 'Уровень_глюкозы' : 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[ 'гипер_напряжение' ]).показывать()

Выход:

12. Отобразите уникальные значения, присутствующие в целевом атрибуте (Stroke).

# уникальные значения целевого атрибута

stroke_df.select(stroke_df[ 'Гладить' ]).отличный().показать()

Выход:

13. Верните тип данных всех столбцов с помощью функции printSchema().

# Возвращаем тип данных всех столбцов.

stroke_df.printSchema()

Выход:

Мы видим, что 4 столбца имеют строковый тип. Преобразуем их в категориальные числовые значения.

14. Давайте преобразуем строковые категориальные значения в числовые категориальные значения, используя StringIndexer в столбцах «Пол», «сердечная_болезнь», «гипер_напряжение» и «замужем», и запишем их в столбцы «Категорический_пол», «Категорическая_сердечная_болезнь», «Категорическая_гипер_тензия» и «Категорическая_замужем». Сохраните столбцы в фрейме данных indexed_data с помощью метода fit().

из pyspark.ml.feature импортировать StringIndexer

# Преобразование строковых категориальных значений в числовые категориальные значения в столбце «Пол».

indexer_data = StringIndexer (inputCol = 'Пол' , выходной столбец = 'Categotical_Gender' )

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

# Преобразование строковых категориальных значений в числовые категориальные значения в столбце «heart_disease».

indexer_data = StringIndexer (inputCol = 'сердечное заболевание' , выходной столбец = 'Categotical_heart_disease' )

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

# Преобразование строковых категориальных значений в числовые категориальные значения в столбце «hyper_tension».

indexer_data = StringIndexer (inputCol = 'гипер_напряжение' , выходной столбец = 'Categotical_hyper_tension' )

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

# Преобразование строковых категориальных значений в числовые категориальные значения в столбце «замужем».

indexer_data = StringIndexer (inputCol = 'женатый' , выходной столбец = 'Категорический_женат' )

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

# Показать обновленный

indexed_data.show()

Выход:

15. Преобразуйте независимые столбцы в вектор с помощью векторного ассемблера. Имя вектора — «features».

из pyspark.ml.feature импортировать VectorAssembler

ассемблер = VectorAssembler (inputCols = [ 'Categotical_Gender' , 'Categotical_heart_disease' , 'Categotical_hyper_tension' , 'Категорический_женат' , 'возраст' ,

'Уровень_глюкозы' ],outputCol= 'функции' )

16. Преобразуйте предыдущие данные в окончательный DataFrame с помощью функции transform() и отобразите их с помощью функции 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_results=logistic_regression_model.evaluate(train_data).predictions

train_results.show()

Выход:

19. Используйте BinaryClassificationEvaluator для проверки точности модели. Мы видим, что наша модель верна на 100%.

из импорта pyspark.ml.evaluation BinaryClassificationEvaluator

# вызвать BinaryClassificationEvaluator

результаты = BinaryClassificationEvaluator (rawPredictionCol = 'прогноз' ,labelCol= 'Гладить' )

ROC_AUC = results.evaluate(train_results)

печать (ROC_AUC * 100 , '% Точность' )

Заключение

Вы можете предсказать проблему классификации реальных плиток, используя модель логистической регрессии в PySpark. Удаление нулевых/отсутствующих значений важно, поскольку они снижают оценку и точность модели. Предварительная обработка является необходимым шагом перед подгонкой любой модели машинного обучения. Убедитесь, что вы делаете этот шаг правильно и точно.