Найти тему
Nuances of programming

Машинное обучение. С чего начать? Часть 2

Источник: Nuances of Programming

Часть 1, Часть 2.

Очистка данных

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

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

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

train_df['Embarked'].fillna(train_df['Embarked'].mode()[0], inplace = True)
train_df['Age'].fillna(train_df['Age'].median(), inplace = True)

Другой подход чистки — это удаление данных, особенно если пробелов слишком много. Давайте удалим все данные о каютах.

drop_column = ['Cabin']
train_df.drop(drop_column, axis=1, inplace = True)

Проверяем данные после чистки.

print('check the nan value in train data')
print(train_df.isnull().sum())

-2

Отлично. Всё на месте. Чистка прошла успешно.

-3

Конструирование признаков

После очистки данных мы приступаем к конструированию признаков.

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

Например, возьмём пункт отправления: эта колонка заполнена значениями Q, S, и C. Но так как библиотека Python не обрабатывает буквы, нам нужно заменить их на числа. Мы можем прибегнуть к технике One Hot Vectorization, преобразовав одну колонку в три. Назовём их Embarked_Q, Embarked_S и Embarked_C. Каждую из них заполним 0 или 1 в зависимости от того, сел ли пассажир в этом порту или нет.

Другой пример с колонками SibSp и Parch. Возможно, в обеих этих колонках нет ничего интересного, но наверное, вы захотите узнать, насколько велика была семья пассажира, который поднялся на борт корабля. Можно предположить, что чем больше семья, тем больше шансы на выживание, так как они могли помогать друг другу.

Поэтому мы создадим ещё одну колонку «family size», которая будет содержать значения из колонок sibsp и parch + 1 (сам пассажир).

Последней рассмотрим создание колонок интервалов. Здесь мы создаём диапазоны значений, чтобы сгруппировать несколько показателей вместе, так как бывает трудно сравнивать разные значения в одной категории. Например, имеет ли большое значение разница в возрасте 5 и 6 лет, или 45 и 46 лет?

Поэтому мы создадим колонки интервалов. Например, сделаем 4 колонки для разных возрастов. Children (0–14 лет), Teenager (14–20 лет), Adult (20–40 лет), и Elders (40+).

Запишем это в коде:

-4

Теперь мы начинаем искать корреляцию для каждого признака:

-5

-6

Значение 1 говорит о высокой степени положительной корреляции, -1 — о высокой степени отрицательной корреляции. Например, мы видим отрицательную корреляцию между полами, потому что пол может быть либо женский, либо мужской. Кроме этой связи, мы не видим такой высокой корреляции. Значит мы готовы двигаться дальше.

Высокая степень корреляции между двумя признаками значит, что мы можем исключить один из них, так как они содержат одну и ту же информацию.

Построение модели машинного обучения

-7

Вы можете выбрать любой алгоритм, включённый в библиотеку scikit-learn:

  • Logistic Regression
  • Random Forest
  • SVM
  • K Nearest Neighbor
  • Naive Bayes
  • Decision Trees
  • AdaBoost
  • LDA
  • Gradient Boosting

Выберите тот, который покажет лучшую производительность.

Давайте попробуем мой любимы алгоритм Random Forest.

-8

-9

Он показал точность в 83%. Хороший результат для первого раза.

Здесь мы видим кросс-валидацию по K блокам. Если, например, K = 10, значит вы разбиваете данные на 10 блоков и вычисляете среднее значение всех результатов и получаете конечную оценку.

Детали

В целом мы закончили. Но есть ещё один шаг. Чтобы получить лучший результат нужна «тонкая настройка». Я имею в виду поиск наилучшего параметра для алгоритмов машинного обучения. Посмотрите на код random forest:

model = RandomForestClassifier(criterion='gini', n_estimators=700,
min_samples_split=10,min_samples_leaf=1,
max_features='auto',oob_score=True,
random_state=1,n_jobs=-1)

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

Кстати, есть один инструмент, который называется Grid Search. Он найдёт для вас оптимальные параметры автоматически. 

-10

Теперь можете попробовать все сами. Удачи!

Заключение

Было ведь не трудно, да? Машинное обучение с помощью Python — это просто. Всё необходимое уже создано, просто берите и используйте в своих целях.

Читайте нас в телеграмме и vk

Tirmidzi Faizal Aflahi: How to get started with Machine Learning in about 10 minutes