Всего 10 минут: начните свой путь машинного обучения

машинное обучение


Хотя путь к машинному обучению бесконечен, многие студенты все еще инвестируют в поток машинного обучения. Как начать машинное обучение более эффективно? Так называемые «Восемь Бессмертных, пересекающих море, каждый из которых демонстрирует свою магическую силу», автор этой статьи использует язык Python в качестве инструмента для машинного обучения, а для подробной интерпретации использует проект Titanic в конкурсе Kaggle. Следуйте за мной, чтобы увидеть это!

Выбрано из freecodecamp, автор: Тирмидзи Файзал Афлахи, составлено Heart of the Machine, участие: Li Shimeng, Du Wei.

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

Введение в машинное обучение с помощью Python

Итак, почему Питон? По моему опыту, Python — один из самых простых языков программирования для изучения. Теперь весь процесс нужно повторять быстро, и в то же время специалистам по данным не нужно глубоко понимать язык, потому что они могут быстро его освоить.

Насколько это легко?

for anything in the_list:    print(anything)

Это так просто. Синтаксис Python тесно связан с синтаксисом английского языка (или человеческого языка, а не машинного языка). В синтаксисе Python нет глупых фигурных скобок. У меня есть коллега, которая работает в отделе контроля качества, хотя и не инженер-программист, но может написать код на Python для продакшена за день. (настоящий!)

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

NumPy

Это очень известная библиотека анализа данных. От вычисления медианы распределения данных до работы с многомерными массивами NumPy может сделать это за вас.

Pandas

Это для работы с файлами CSV. Конечно, вам также нужно работать с некоторыми таблицами, просматривать статистику и т. д., тогда Pandas — это инструмент, который может удовлетворить ваши потребности.

Matplotlib

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

Seaborn

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

Scikit-Learn

Это идеальный инструмент для реализации машинного обучения в Python. К этому относится так называемое машинное обучение с Python — Scikit-Learn. Все, что вам нужно, от алгоритмов до бустинга, можно найти здесь.

Тензорфлоу и Питорч

Я не буду много говорить об этих двух инструментах. Но если вы заинтересованы в глубоком обучении, вы можете узнать о них больше, они стоят потраченного на них времени. (В следующий раз я напишу еще один учебник по глубокому обучению, так что следите за обновлениями!)

Проект машинного обучения Python

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

адрес блога:thedatamage.com/

Kaggle — это платформа для прямого исследования данных. Вы можете решить некоторые проекты на этой платформе и дойти до того, что действительно хорошо разбираетесь в машинном обучении. Возможно, вас больше заинтересует что-то другое — соревнование Kaggle по машинному обучению с призами до 100 000 долларов. Возможно, вы думаете о том, чтобы попытать счастья, ха-ха.

Каггле:www.kaggle.com/

Но самое главное — это не деньги — здесь действительно можно найти проекты машинного обучения, реализованные на Python. Вы можете попробовать завершить множество проектов. Но если вы новичок, вы можете принять участие в этом конкурсе.

Мы будем использовать пример проекта в следующих руководствах:

Титаник: машинное обучение после катастрофы (www.kaggle.com/c/titanic)

Это известно как Титаник. Это была катастрофа 1912 года, в которой пострадали в общей сложности 2224 пассажира и экипаж, из которых 1502 человека погибли. Этот конкурс Kaggle (или учебник) предоставляет реальные данные о стихийных бедствиях. Ваша задача — интерпретировать эти данные и предсказать, кто выживет в катастрофе, а кто нет.

Учебник по внедрению машинного обучения с помощью Python

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

Первым, конечно, является Python. Чтобы установить Python в первый раз, вам необходимо установить его с официального сайта. Вам необходимо установить версию 3.6+, чтобы не отставать от последней версии библиотеки.

Официальный сайт Python:www.python.org/downloads/

Затем все библиотеки можно установить с помощью pip Python. Дистрибутив Python, который вы только что скачали, автоматически установит pip.

Все остальные необходимые инструменты можно установить с помощью pip. Откройте терминал, командную строку или PowerShell с помощью следующей команды:

pip install numpypip install pandaspip install matplotlibpip install seabornpip install scikit-learnpip install jupyter

Кажется, все работает нормально. Но подождите, что такое Юпитер? jupyter означает Julia, Python и R, так что на самом деле это Jupytr. Но слово казалось таким странным, поэтому они превратили его в Юпитер. Это известная записная книжка, в которой вы можете писать интерактивный код Python.

Просто введите Jupyter Notebook в терминал, вы можете открыть страницу браузера, как показано ниже:

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

Теперь у вас установлены все инструменты. Давайте начнем!

исследование данных

Изучение данных — это первый шаг. Вам нужно загрузить данные со страницы Kaggle Titanic, а затем поместить загруженные данные в папку, в которой вы начали свой блокнот Jupyter.

Адрес загрузки данных:Woohoo.Карта Reformed.com/ из /Titanic/…

Затем импортируйте необходимые библиотеки:

import numpy as np import pandas as pdimport matplotlib.pyplot as pltimport seaborn as snsimport warningswarnings.filterwarnings('ignore')%matplotlib inline

Загрузить данные:

train_df=pd.read_csv("train.csv")train_df.head()

Результат выглядит следующим образом:

Это наши данные. Он имеет следующие столбцы:

  • PassengerId, идентификатор пассажира;

  • Выжил, выжил ли он (она);

  • Pclass, класс салона, может быть 1 для эконом-класса, 2 для бизнес-класса, 3 для первого класса;

  • Имя, имя пассажира;

  • Пол, пол;

  • Возраст, возраст;

  • SibSp, то есть братья, сестры или супруги, означает количество братьев, сестер и супругов на борту;

  • Парч, то есть Родители или Дети, означает количество родителей и детей на борту;

  • Билет, детали билета;

  • Кабина, номер кабины, NaN означает неизвестно;

  • Посадка, начальная точка для посадки, S - Саутгемптон, Q - Квинстаун, C - Шербур.

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

def missingdata(data):    total = data.isnull().sum().sort_values(ascending = False)    percent = (data.isnull().sum()/data.isnull().count()*100).sort_values(ascending = False)    ms=pd.concat([total, percent], axis=1, keys=['Total', 'Percent'])    ms= ms[ms["Percent"] > 0]    f,ax =plt.subplots(figsize=(8,6))    plt.xticks(rotation='90')    fig=sns.barplot(ms.index, ms["Percent"],color="green",alpha=0.8)    plt.xlabel('Features', fontsize=15)    plt.ylabel('Percent of missing values', fontsize=15)    plt.title('Percent missing data by feature', fontsize=15)    return msmissingdata(train_df)

Мы увидим что-то вроде этого:

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

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

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

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

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())

Идеально! Больше никаких недостающих данных! Это означает, что данные были очищены.

разработка функций

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

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

Возьмем в качестве примера данные о посадке — это данные, заполненные Q, S или C. Библиотека Python не может справиться с этим, потому что она может обрабатывать только числа. Так что вам нужно сделать это с помощью так называемой One Hot Vectorization, которая превращает один столбец в три. Заполните Embarked_Q, Embarked_S и Embarked_C значением 0 или 1, чтобы указать, покинул ли человек этот порт.

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

Так можно создать новую колонку, в этой колонке количество членов (размер семьи), размер семьи = СибСп+Парч+1 (сам пассажир).

В последнем примере в качестве примера используется столбец bin. Поскольку вы думаете, что трудно различать вещи с похожими значениями, эта операция создает диапазоны значений, а затем группирует несколько значений вместе. Например, есть ли существенная разница между 5- и 6-летними пассажирами? Или есть существенная разница между 45 и 46 летними?

Вот почему столбец bin был создан. Возможно, с точки зрения возраста мы могли бы создать 4 столбца: малыши (0–14 лет), подростки (14–20 лет), взрослые (20–40 лет) и пожилые люди (40+).

Кодировка следующая:

all_data = train_dffor dataset in all_data :    dataset['FamilySize'] = dataset['SibSp'] + dataset['Parch'] + 1import re# Define function to extract titles from passenger namesdef get_title(name):    title_search = re.search(' ([A-Za-z]+)\.', name)    # If the title exists, extract and return it.    if title_search:        return title_search.group(1)    return ""# Create a new feature Title, containing the titles of passenger namesfor dataset in all_data:    dataset['Title'] = dataset['Name'].apply(get_title)# Group all non-common titles into one single grouping "Rare"for dataset in all_data:    dataset['Title'] = dataset['Title'].replace(['Lady', 'Countess','Capt', 'Col','Don',                                                  'Dr', 'Major', 'Rev', 'Sir', 'Jonkheer', 'Dona'], 'Rare')dataset['Title'] = dataset['Title'].replace('Mlle', 'Miss')    dataset['Title'] = dataset['Title'].replace('Ms', 'Miss')    dataset['Title'] = dataset['Title'].replace('Mme', 'Mrs')for dataset in all_data:    dataset['Age_bin'] = pd.cut(dataset['Age'], bins=[0,14,20,40,120], labels=['Children','Teenage','Adult','Elder'])for dataset in all_data:    dataset['Fare_bin'] = pd.cut(dataset['Fare'], bins=[0,7.91,14.45,31,120], labels ['Low_fare','median_fare', 'Average_fare','high_fare'])traindf=train_dffor dataset in traindf:    drop_column = ['Age','Fare','Name','Ticket']    dataset.drop(drop_column, axis=1, inplace = True)drop_column = ['PassengerId']traindf.drop(drop_column, axis=1, inplace = True)traindf = pd.get_dummies(traindf, columns = ["Sex","Title","Age_bin","Embarked","Fare_bin"],                             prefix=["Sex","Title","Age_type","Em_type","Fare_type"])

Итак, вы создали все функции. Затем мы смотрим на корреляцию между этими функциями:

sns.heatmap(traindf.corr(),annot=True,cmap='RdYlGn',linewidths=0.2) #data.corr()-->correlation matrixfig=plt.gcf()fig.set_size_inches(20,12)plt.show()

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

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

Машинное обучение с Python

Теперь мы достигли кульминации этого урока — Моделирование машинного обучения.

from sklearn.model_selection import train_test_split #for split the datafrom sklearn.metrics import accuracy_score  #for accuracy_scorefrom sklearn.model_selection import KFold #for K-fold cross validationfrom sklearn.model_selection import cross_val_score #score evaluationfrom sklearn.model_selection import cross_val_predict #predictionfrom sklearn.metrics import confusion_matrix #for confusion matrixall_features = traindf.drop("Survived",axis=1)Targeted_feature = traindf["Survived"]X_train,X_test,y_train,y_test = train_test_split(all_features,Targeted_feature,test_size=0.3,random_state=42)X_train.shape,X_test.shape,y_train.shape,y_test.shape

В библиотеке Scikit-Learn есть несколько алгоритмов на ваш выбор:

  • логистическая регрессия

  • случайный лес

  • Опорные векторные машины

  • K ближайших соседей

  • Наивный Байес

  • Древо решений

  • AdaBoost

  • LDA

  • Повышение градиента

Вы можете чувствовать себя подавленным, пытаясь понять, что есть что. Не беспокойтесь, просто относитесь к нему как к «черному ящику» — выберите тот, который работает лучше всего. (Позже я напишу полную статью о том, как выбирать эти алгоритмы.)

Возьмем в качестве примера мой любимый алгоритм случайного леса:

from sklearn.ensemble import RandomForestClassifiermodel = 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)model.fit(X_train,y_train)prediction_rm=model.predict(X_test)print('--------------The Accuracy of the model----------------------------')print('The accuracy of the Random Forest Classifier is', round(accuracy_score(prediction_rm,y_test)*100,2))kfold = KFold(n_splits=10, random_state=22) # k=10, split the data into 10 equal partsresult_rm=cross_val_score(model,all_features,Targeted_feature,cv=10,scoring='accuracy')print('The cross validated score for Random Forest Classifier is:',round(result_rm.mean()*100,2))y_pred = cross_val_predict(model,all_features,Targeted_feature,cv=10)sns.heatmap(confusion_matrix(Targeted_feature,y_pred),annot=True,fmt='3.0f',cmap="summer")plt.title('Confusion_matrix', y=1.05, size=15)

Вау! Точность достигает 83%. Что касается первой попытки, то это уже хороший результат.

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

тонкая настройка

Вы выполнили шаги по внедрению машинного обучения в Python. Но еще один шаг может дать вам лучшие результаты — тонкая настройка. Тонкая настройка означает поиск лучших параметров для алгоритма машинного обучения. В качестве примера возьмем приведенный выше код случайного леса:

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, который автоматически находит лучшие параметры. Звучит неплохо, правда?

# Random Forest Classifier Parameters tunning model = RandomForestClassifier()n_estim=range(100,1000,100)## Search grid for optimal parametersparam_grid = {"n_estimators" :n_estim}model_rf = GridSearchCV(model,param_grid = param_grid, cv=5, scoring="accuracy", n_jobs= 4, verbose = 1)model_rf.fit(train_X,train_Y)# Best scoreprint(model_rf.best_score_)#best estimatormodel_rf.best_estimator_

Ну, вы можете попробовать сами и повеселиться с машинным обучением.

Суммировать

Как насчет этого? Машинное обучение не кажется таким сложным, не так ли? Реализовать машинное обучение в Python просто. Все готово для вас. Вы можете делать удивительные вещи и приносить радость людям.

Оригинальная ссылка:medium.free код camp.org/how-to-individual-…