Машинное обучение претерпело множество недавних разработок и с каждым днем ​​становится все более популярным. Машинное обучение используется в различных проектах для поиска скрытой информации в данных людьми из всех областей, включая информатику, математику и менеджмент. То, что Apache Spark вступит в игру машинного обучения с Python, было просто вопросом времени, используя свою библиотеку MLlib. Итак, в этом руководстве по PySpark MLlib я буду обсуждать следующие темы:

  • Что такое машинное обучение?
  • Что такое PySpark MLlib?
  • Машинное обучение (Python) Промышленные варианты использования
  • Жизненный цикл машинного обучения
  • Функции и алгоритмы PySpark MLlib
  • Поиск хакеров с помощью PySpark MLlib
  • Прогнозирование оттока клиентов с помощью PySpark MLlib

Что такое машинное обучение?

Машинное обучение — это метод анализа данных, который автоматизирует построение аналитической модели. Используя алгоритмы, которые итеративно изучают данные, машинное обучение позволяет компьютерам находить скрытые идеи без явного программирования того, где искать. Основное внимание уделяется разработке компьютерных программ, которые могут обучаться расти и изменяться при воздействии новых данных. Машинное обучение использует данные для обнаружения шаблонов в наборе данных и соответствующей корректировки действий программы.

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

Теперь, когда у вас есть краткое представление о том, что такое машинное обучение, давайте перейдем к этой статье и разберемся, что такое MLlib и каковы ее функции?

Что такое PySpark MLlib?

PySpark MLlib — это библиотека машинного обучения. Это оболочка над PySpark Core для анализа данных с использованием алгоритмов машинного обучения. Он работает в распределенных системах и является масштабируемым. Мы можем найти реализации классификации, кластеризации, линейной регрессии и других алгоритмов машинного обучения в PySpark MLlib.

Машинное обучение (Python) Промышленные варианты использования

Алгоритмы машинного обучения, приложения и платформы помогают производителям находить новые бизнес-модели, улучшать качество продукции и оптимизировать производственные операции на уровне цеха. Итак, давайте продолжим нашу статью и разберемся, как различные отрасли используют машинное обучение.

Правительство:

Государственные учреждения, такие как общественная безопасность и коммунальные службы, особенно нуждаются в машинном обучении. Они используют его для распознавания лиц, безопасности и обнаружения мошенничества. Агентства государственного сектора используют машинное обучение для правительственных инициатив, чтобы получить жизненно важную информацию о политических данных.

Маркетинг и электронная коммерция:

Количество покупок в Интернете неуклонно растет, что позволяет компаниям собирать подробные данные о клиентском опыте в целом. Веб-сайты, рекомендующие товары, которые могут вам понравиться на основе предыдущих покупок, используют машинное обучение для анализа вашей истории покупок и продвижения других товаров, которые могут вас заинтересовать.

Транспорт:

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

Финансы:

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

Здравоохранение:

Машинное обучение — это быстрорастущая тенденция в сфере здравоохранения благодаря появлению носимых устройств и датчиков, которые могут использовать данные для оценки состояния здоровья пациента в режиме реального времени. Google разработал алгоритм машинного обучения, помогающий идентифицировать раковые опухоли на маммограммах. Стэнфорд использует алгоритм глубокого обучения для выявления рака кожи.

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

Жизненный цикл машинного обучения

Типичный цикл машинного обучения включает две фазы:

  • Обучение
  • Тестирование

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

  1. Тренировочный набор. Здесь у вас есть полный набор обучающих данных. Вы можете извлекать функции и обучать их подгонке под модель и так далее.
  2. Тестовый набор: здесь, после получения модели, вы можете делать прогнозы, используя модель, полученную на обучающем наборе.

Теперь, когда у вас есть представление о том, как работает типичный жизненный цикл машинного обучения, давайте перейдем к нашей статье с функциями MLlib и различными поддерживаемыми им языками.

Возможности и алгоритмы MLlib

Мы знаем, что PySpark хорош для итерационных алгоритмов. Используя итерационные алгоритмы, многие алгоритмы машинного обучения были реализованы в PySpark MLlib. Помимо эффективности и масштабируемости PySpark, API-интерфейсы PySpark MLlib очень удобны для пользователя.

Поиск хакеров с помощью MLlib

Система компании была взломана, и многие данные были украдены. К счастью, метаданные для каждого сеанса, использованного хакерами для подключения, были записаны и доступны нам. Есть 3 потенциальных хакера, а то и больше.

Распространенной практикой среди хакеров является обмен работой. Это означает, что хакеры совершают примерно одинаковое количество взломов. Итак, здесь мы собираемся использовать кластеризацию, чтобы узнать количество хакеров.

Инициализация сеанса Spark

Во-первых, нам нужно инициализировать сеанс искры.

from pyspark.sql import SparkSession 
spark = SparkSession.builder.appName('find_hacker').getOrCreate()

Импорт библиотеки KMeans и загрузка набора данных

Мы будем использовать алгоритм Kmeans для анализа, и для этого нам нужно импортировать библиотеку Kmeans, а затем мы загрузим наш набор данных с помощью метода spark.read.

from pyspark.ml.clustering import KMeans 
dataset = spark.read.csv("file:///home/edureka/Downloads/hack_data.csv",header=True,inferSchema=True)

Схема полученных данных

Давайте посмотрим на схему данных, чтобы лучше понять, с чем мы имеем дело.

dataset.printSchema()

Импорт VectorAssembler и создание наших объектов

Мы должны преобразовать наши данные с помощью функции VectorAssembler в один столбец, где каждая строка DataFrame содержит вектор признаков. Чтобы создать наши кластеры, нам нужно выбрать столбцы, на основе которых мы затем создадим наш столбец функций. Здесь мы используем столбцы:

  • Session_Connection_Time
  • Байтов передано
  • Kali_Trace_Used
  • Серверы_повреждены
  • Страницы_повреждены
  • WPM_Typing_Speed: слов в минуту
from pyspark.ml.linalg import Vectors
from pyspark.ml.feature import VectorAssembler
 
feat_cols = ['Session_Connection_Time', 'Bytes Transferred', 'Kali_Trace_Used',
'Servers_Corrupted', 'Pages_Corrupted','WPM_Typing_Speed']
 
vec_assembler = VectorAssembler(inputCols = feat_cols, outputCol='features')
 
final_data = vec_assembler.transform(dataset)

Импорт библиотеки StandardScaler и создание масштабатора

Центрирование и масштабирование выполняются независимо для каждой функции путем вычисления соответствующей статистики по выборкам в обучающем наборе. Затем среднее значение и стандартное отклонение сохраняются для использования в более поздних данных с использованием метода преобразования.

Стандартизация набора данных является общим требованием для многих оценщиков машинного обучения: они могут плохо себя вести, если отдельный признак не более или менее похож на стандартные данные с нормальным распределением.

from pyspark.ml.feature import StandardScaler 
scaler = StandardScaler(inputCol="features", outputCol="scaledFeatures", withStd=True, withMean=False)

Вычисление сводной статистики

Давайте вычислим сводную статистику, подобрав StandardScaler. Затем нормализуйте каждую функцию, чтобы иметь единичное стандартное отклонение.

scalerModel = scaler.fit(final_data)
 
cluster_final_data = scalerModel.transform(final_data)
 
kmeans3 = KMeans(featuresCol='scaledFeatures',k=3)
kmeans2 = KMeans(featuresCol='scaledFeatures',k=2)

Построение модели KMeans и расчет WSSE (в рамках набора квадратичных ошибок)

Мы должны сначала построить нашу Модель. Затем алгоритму передается количество желаемых кластеров. Затем мы вычисляем внутреннюю сумму квадратов ошибок (WSSSE). Мы используем значения, полученные из них, чтобы выяснить, есть ли у нас 2 или 3 хакера.

model_k3 = kmeans3.fit(cluster_final_data)
model_k2 = kmeans2.fit(cluster_final_data)
 
wssse_k3 = model_k3.computeCost(cluster_final_data)
wssse_k2 = model_k2.computeCost(cluster_final_data)
 
print("With K=3")
print("Within Set Sum of Squared Errors = " + str(wssse_k3))
print('--'*30)
print("With K=2")
print("Within Set Sum of Squared Errors = " + str(wssse_k2))

Проверка точки локтя (WSSSE)

Мы проверим значения WSSSE от 2 до 8 и посмотрим, есть ли у нас колено в списке.

for k in range(2,9):
kmeans = KMeans(featuresCol='scaledFeatures',k=k)
model = kmeans.fit(cluster_final_data)
wssse = model.computeCost(cluster_final_data)
print("With K={}".format(k))
print("Within Set Sum of Squared Errors = " + str(wssse))
print('--'*30)

Здесь мы видим, что значение WSSSE постоянно снижается, и у нас нет локтя. Так что, скорее всего, значение K равно 2, а не 3. Давайте продолжим этот учебник PySpark MLlib и перейдем к вердикту.

Окончательная проверка номера хакера

Давайте узнаем, сколько хакеров было задействовано, исходя из количества совершенных взломов.

model_k3.transform(cluster_final_data).groupBy('prediction').count().show()

model_k2.transform(cluster_final_data).groupBy('prediction').count().show()

Итак, здесь мы видим, что для 3 хакеров наша модель произвела 167,79 и 88 взломов. Это невозможно, так как хакеры обычно делят задачи между собой. В нашей модели, где K = 2, мы получаем 167 взломов для обоих хакеров. Таким образом, было задействовано только 2 хакера.

Продолжим нашу статью и решим еще одну проблему, с которой сталкиваются многие компании, т.е. Отток клиентов.

Прогнозирование оттока клиентов с помощью MLlib

Прогнозирование оттока — это большой бизнес. Он сводит к минимуму отток клиентов, предсказывая, какие клиенты, скорее всего, отменят подписку на услугу. Хотя изначально он использовался в телекоммуникационной отрасли, он стал обычной практикой для банков, интернет-провайдеров, страховых компаний и других вертикалей.

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

У маркетингового агентства есть много клиентов, которые используют их услуги для создания рекламы для веб-сайтов клиента / клиента. Они заметили, что у них довольно много клиентов. Они в основном случайным образом назначают менеджеров по работе с клиентами прямо сейчас, но хотят, чтобы вы создали модель машинного обучения, которая поможет предсказать, какие клиенты уйдут (прекратят покупать их услуги), чтобы они могли правильно назначить клиентов, подвергающихся наибольшему риску, для оттока менеджера по работе с клиентами. К счастью, у них есть исторические данные.

Итак, вы можете помочь им?

Загрузка библиотек

Загрузим необходимые библиотеки. Здесь мы собираемся использовать логистическую регрессию.

from pyspark.ml.classification import LogisticRegression

Чтение данных обучения и тестирования

Давайте загрузим данные обучения и данные тестирования (входящие данные для целей тестирования).

input_data=spark.read.csv('file:///home/edureka/Downloads/customer_churn.csv',header=True,inferSchema=True)
 
test_data=spark.read.csv('file:///home/edureka/Downloads/new_customers.csv',header=True,inferSchema=True)

Схема данных

Мы собираемся взглянуть на схему данных, чтобы лучше понять, с чем мы имеем дело.

input_data.printSchema() //training data

Здесь у нас есть столбец Churn. Давайте также посмотрим на схему данных тестирования.

test_data.printSchema() //testing data

Использование векторассемблера

from pyspark.ml.linalg import Vectors
from pyspark.ml.feature import VectorAssembler
 
assembler=VectorAssembler(inputCols=['Age','Total_Purchase','Account_Manager','Years','Num_Sites'],outputCol='features')
 
output_data=assembler.transform(input_data)

Схема выходных данных

Давайте посмотрим на схему выходных данных.

output_data.printSchema()

Как видите, здесь у нас есть столбец функций, на основе которого будет происходить классификация.

Использование логистической регрессии для данных

final_data=output_data.select('features','churn')         //creating final data with only 2 columns
 
train,test=final_data.randomSplit([0.7,0.3])          //splitting data
 
model=LogisticRegression(labelCol='churn')           //creating model
 
model=model.fit(train)        //fitting model on training dataset
 
summary=model.summary
 
summary.predictions.describe().show()         //summary of the predictions on training data

Импорт библиотеки BinaryClassificationEvaluator и тестирование

Оценка бинарных классификаторов сравнивает два метода присвоения бинарного атрибута, один из которых обычно является стандартным методом, а другой исследуется. Существует множество показателей, которые можно использовать для измерения производительности классификатора или предиктора; разные поля имеют разные предпочтения для конкретных показателей из-за разных целей.

from pyspark.ml.evaluation import BinaryClassificationEvaluator predictions=model.evaluate(test)

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

evaluator=BinaryClassificationEvaluator(rawPredictionCol='prediction',labelCol='churn')
 
evaluator.evaluate(predictions.predictions)
 
model1=LogisticRegression(labelCol='churn')
model1=model1.fit(final_data)
 
test_data=assembler.transform(test_data)

Поиск результатов

Теперь мы собираемся использовать модель для оценки новых данных.

results=model1.transform(test_data) results.select('Company','prediction').show()

Итак, здесь мы видим потенциального клиента, который может покинуть организацию, и на этом анализе мы подошли к концу этой статьи.

Надеюсь, вам понравилась эта статья. Если вы читаете это, поздравляю! Вы больше не новичок в PySpark MLlib. Попробуйте этот простой пример на своих системах прямо сейчас.

Если вы хотите прочитать больше статей о самых популярных на рынке технологиях, таких как искусственный интеллект, DevOps, этический взлом, вы можете обратиться к официальному сайту Edureka.

Обратите внимание на другие статьи из этой серии, в которых объясняются различные другие аспекты PySpark.

1. Учебник по PySpark

2. Учебное пособие по кадрам данных PySpark

3. RDD в PySpark

4. Программирование PySpark

Первоначально опубликовано на www.edureka.co 24 июля 2018 г.