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

  1. Самоуправляемые/автономные автомобили, над которыми работают все, от Google до Uber. Полностью построен на основе машинного обучения.
  2. Мы получаем все эти рекомендации на Amazon или Netflix или на любом другом веб-сайте, если на то пошло. Применение машинного обучения в веб-разработке.
  3. Все эти тренды хэштегов на платформах социальных сетей. Машинное обучение вместе с лингвистическими правилами.
  4. Обнаружение мошенничества. Важный пример использования машинного обучения сегодня.

Две модели машинного обучения — набор данных Iris Flower и набор данных Abalone

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

Набор данных цветков ириса. Это базовая задача классификации, в которой мы предсказываем виды цветов на основе

  • измерения длины и ширины чашелистиков
  • Измерения длины и ширины лепестков.

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

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

Примечание. Набор данных об морских ушках обычно решается как задача классификации, при этом количество колец (1,2,3…n) является классом, но для понимания будет считать это оценкой. проблема.

Библиотеки, необходимые для построения моделей машинного обучения:

Sklearn или Scikit-learn

Sklearn — одна из основных библиотек, используемых для машинного обучения в веб-разработке. Вы можете найти его официальную документацию. Самое замечательное в sklearn, помимо документации (которая сама по себе заслуживает похвалы), — это поддержка сообщества. Sklearn существует уже более десяти лет, и за это время его сообщество выросло во много раз. Sklearn поставляется с предварительно загруженными наборами данных, над которыми мы будем работать, поэтому для начала вам, вероятно, не потребуется CSV.

Помимо sklearn, мы также будем использовать NumPy и pandas для некоторой обработки данных.

Алгоритмы, которые мы будем использовать:

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

Это самый простой алгоритм, используемый для задач классификации.

Рассмотрим проблему:

Компания проходит тест на прием на работу; он выдает одинаковый набор вопросов как для новичков, так и для опытных кандидатов.

  • Ось X — опыт кандидата
  • Ось Y — количество вопросов, которые они решили правильно

На следующем графике показано, были ли выбраны кандидаты или нет.

Теперь предположим, что вы находитесь в точке X, чтобы предсказать, будете ли вы выбраны или нет, KNN говорит, что ваш класс будет классом вашего K ближайшего соседа. Таким образом, для K = 1 мы рассмотрим точку, ближайшую к кресту, и предположим, что класс этой точки — это класс X.

Точно так же для k = 2 мы будем рассматривать две ближайшие точки данных и так далее. Обратите внимание, что значение K не имеет ничего общего с набором данных и является свойством алгоритма. Такие параметры известны как гиперпараметры.

Линейная регрессия в машинном обучении

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

  • Ось X — возраст детей
  • Ось Y — их высота (обозначена синими точками).

Цикл машинного обучения

Выбор функций. Первый шаг — выбрать, какие «атрибуты» или столбцы таблицы действительно полезны для прогнозирования. Существует множество способов выбора функций, таких как выбор вариантов, выбор рекурсивных функций, и все они поддерживаются sklearn.

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

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

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

Реализация этих моделей машинного обучения

Классификация данных по радужной оболочке:

импортировать панд как pd

предварительная обработка импорта из sklearn

импортировать numpy как np

импортировать numpy.random как номер

из sklearn.preprocessing импортировать LabelEncoder

из sklearn.model_selection импорта train_test_split

из sklearn.neighbors импортировать KNeighborsClassifier

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

iris_data[‘flower_type’] = iris_data[‘flower_type’].fillna(“)

кодировщик меток = кодировщик меток ()

iris_data[‘flower_type_encoded’] = labelencoder.fit_transform(iris_data[“flower_type”])

num_cols = ['sepal_length', 'sepal_width', 'petal_length','petal_width']

iris_data_scaled = масштаб (iris_data.drop (['flower_type','flower_type_encoded'], ось = 1))

iris_data_scaled = pd.DataFrame(iris_data_scaled, columns = num_cols)

np.random.seed(3456)

iris_split = train_test_split (np.asmatrix (iris_data_scaled), test_size = 75)

iris_train_features = iris_split[0][:, :4]

iris_train_labels = np.ravel(iris_split[0][:, 4])

iris_test_features = iris_split[1][:, :4]

iris_test_labels = np.ravel(iris_split[1][:, 4])

KNN_mod = KNeighborsClassifier (n_neighbors = 3)

KNN_mod.fit(iris_train_features, iris_train_labels)

ПОЧЕМУ СИСТАНГО?

iris_test[‘предсказанный’] = KNN_mod.predict(iris_test_features)

iris_test[‘правильно’] = [1, если x == z, иначе 0 для x, z в zip(iris_test[‘прогнозировано’], iris_test_labels)]

точность = 100,0 * число с плавающей запятой (сумма (тест_радужной оболочки [‘правильно’])) / число с плавающей точкой (тест_радужной оболочки.форма [0])

печать (точность)

С помощью этого метода я смог получить точность 96%.

Оценка данных морского ушка

импортировать панд как pd

из sklearn импортировать linear_model

импортировать sklearn.metrics как sklm

импортировать numpy как np

импортировать numpy.random как номер

импортировать математику

из sklearn.preprocessing импортировать LabelEncoder

из масштаба импорта sklearn.preprocessing

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

abalone_data['пол'] = abalone_data['пол'].fillna(“)

кодировщик меток = кодировщик меток ()

abalone_data['sex_encoded'] = labelencoder.fit_transform(abalone_data["пол"])

num_cols = ['sex_encoded', 'длина', 'диаметр', 'высота', 'полный_вес', 'очищенный_вес', 'внутренний_вес', 'раковина_вес']

alabone_data_scaled = масштаб (abalone_data.drop (['пол','sex_encoded'], ось = 1))

alabone_data_scaled = pd.DataFrame (alabone_data_scaled, columns = num_cols)

метки = np.array (abalone_data ['кольца'])

индекс = диапазон (Features.shape [0])

индекс = ms.train_test_split (индекс, test_size = 1100)

x_train = Особенности[indx[0][:]]

y_train = np.ravel (метки [indx [0]])

x_test = Характеристики[indx[1][:]]

y_test = np.ravel (метки [indx [1]])

lin_mod = linear_model.LinearRegression (fit_intercept = True)

lin_mod.fit(x_train, y_train)

Почему Систанго?

def print_metrics (y_true, y_predicted):

print('Среднеквадратическая ошибка =' + str(sklm.mean_squared_error(y_true, y_predicted)))

print('Среднеквадратическая ошибка =' + str(math.sqrt(sklm.mean_squared_error(y_true, y_predicted))))

print('Средняя абсолютная ошибка =' + str(sklm.mean_absolute_error(y_true, y_predicted)))

print(‘Средняя абсолютная ошибка = ‘ + str(sklm.median_absolute_error(y_true, y_predicted)))

y_score = lin_mod.predict(x_test)

print_metrics(y_test, y_score)

Итак, моя RMSE (среднеквадратичная ошибка) была около 2.

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

Первоначально опубликовано на https://www.systango.com 9 апреля 2020 г.