В этом руководстве мы сначала увидим подход, а затем предскажем ход каждого человека, шаг за шагом анализируя данные.
Логистическая регрессия
Логистическая регрессия, также называемая «логит-моделью», используется в прогнозной аналитике для задач классификации. Это модель машинного обучения, которая работает только с классификацией для классификации классов (категорий). Например, в нашем сценарии есть две категории (человек, перенесший инсульт, и человек, не перенесший инсульт). Лучшими приложениями модели являются прогнозирование сердечных заболеваний, прогнозирование пола, прогнозирование продолжительности жизни урожая и т. Д.
Шаги:
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. Удаление нулевых/отсутствующих значений важно, поскольку они снижают оценку и точность модели. Предварительная обработка является необходимым шагом перед подгонкой любой модели машинного обучения. Убедитесь, что вы делаете этот шаг правильно и точно.