Что такое машинное обучение в python
Перейти к содержимому

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

  • автор:

Знакомство с машинным обучением в Python

Esther Vaati

Esther Vaati Last updated May 16, 2018

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

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

Знакомство с машинным обучением

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

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

Существуют различные этапы в машинном обучении:

  1. сбор данных
  2. сортировка данных
  3. анализ данных
  4. вырабатывание алгоритма
  5. проверка выработанного алгоритма
  6. использование алгоритма для дальнейших выводов

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

  • управляемое обучение
  • самостоятельное обучение

Управляемое обучение

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

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

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

Управляемое обучение включает только два этапа:

  • обучение
  • проверка

Некоторые алгоритмы управляемого обучения включают:

  • схемы принятия решений
  • методы опорных векторов (схожие алгоритмы обучения)
  • вероятностный классификатор на основе теоремы Байеса
  • метод k-ближайших соседей
  • линейную регрессию
Пример

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

Кроме того Sklearn хорошо взаимодействует с библиотеками NumPy и SciPy.

Установка Sklearn

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

  • Python (>= 2.7 or >= 3.3),
  • NumPy (>= 1.82)
  • SciPy (>= 0.13.3)

Если эти зависимости уже установлены, то можно установить Sklearn, просто выполнив команду:

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

Чтобы проверить, что Sklearn работает корректно, просто импортируйте эту библиотеку в интерпретаторе языка Python:

Если это не вызвало ошибок, значит все готово к работе.

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

Сперва нам необходимо собрать исходные данные для каждого вида животного. Некоторые исходные данные представлены в таблице ниже.

Рост(см) Вес (кг) Температура (гр. Цельсия) Название
18 0.6 40 Курица (0)
18 0.6 41 Курица (0)
94 600 37 Лошадь (1)
94 600 38 Лошадь (1)

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

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

Сначала импортируем модуль tree из Sklearn.

Теперь определим набор характеристик, по которым будем классифицировать животных.

Определим результат, который будет давать каждый набор значений. Пусть курица будет представлена результатом 0, а лошадь — результатом 1.

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

Передаем наши данные классификатору.

Полный код этого алгоритма представлен ниже.

Теперь мы можем предполагать определенный набор данных. Мы пробуем определить животное ростом 18 сантиметров, весом 0.6 кг и температурой 41 градус следующим образом:

А вот так мы пробуем определить животное ростом 94 см, весом 600 кг и температурой 37.5 градусов:

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

Самостоятельное обучение

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

Самостоятельное обучение может далее подразделяться на:

  • кластеризацию
  • ассоциирование

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

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

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

  • кластеризацию k-средних
  • иерархическую кластеризацию

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

Заключение

Я надеюсь, что данный урок помог вам начать свое знакомство с машинным обучением. Это всего лишь введение, ведь эта тема очень обширна, и мы рассмотрели лишь малую часть того, на что способно машинное обучение.

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

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

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

Введение в машинное обучение с помощью scikit-learn (перевод документации)

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

Машинное обучение: постановка вопроса

В общем, задача машинного обучения сводится к получению набора выборок данных и, в последствии, к попыткам предсказать свойства неизвестных данных. Если каждый набор данных — это не одиночное число, а например, многомерная сущность (multi-dimensional entry или multivariate data), то он должен иметь несколько признаков или фич.

    (или управляемое обучение). Здесь данные представлены вместе с дополнительными признаками, которые мы хотим предсказать. (Нажмите сюда, чтобы перейти к странице Scikit-Learn обучение с учителем). Это может быть любая из следующих задач:
    : выборки данных принадлежат к двум или более классам и мы хотим научиться на уже размеченных данных предсказывать класс неразмеченной выборки. Примером задачи классификации может стать распознавание рукописных чисел, цель которого — присвоить каждому входному набору данных одну из конечного числа дискретных категорий. Другой способ понимания классификации — это понимание ее в качестве дискретной (как противоположность непрерывной) формы управляемого обучения, где у нас есть ограниченное количество категорий, предоставленных для N выборок; и мы пытаемся их пометить правильной категорией или классом. : если желаемый выходной результат состоит из одного или более непрерывных переменных, тогда мы сталкиваемся с регрессионным анализом. Примером решения такой задачи может служить предсказание длинны лосося как результата функции от его возраста и веса.
    (или самообучение). В данном случае обучающая выборка состоит из набора входных данных Х без каких-либо соответствующих им значений. Целью подобных задач может быть определение групп схожих элементов внутри данных. Это называется кластеризацией или кластерным анализом. Также задачей может быть установление распределения данных внутри пространства входов, называемое густотой ожидания (density estimation). Или это может быть выделение данных из высоко размерного пространства в двумерное или трехмерное с целью визуализации данных. (Нажмите сюда, чтобы перейти к странице Scikit-Learn обучение без учителя).
Обучающая выборка и контрольная выборка

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

Загрузка типовой выборки

Scikit-learn устанавливается вместе с несколькими стандартными выборками данных, например, iris и digits для классификации, и boston house prices dataset для регрессионного анализа.

Далее мы запускам Python интерпретатор из командной строки и загружаем выборки iris и digits. Установим условные обозначения: $ означает запуск интерпретатора Python, а >>> обозначает запуск командной строки Python:

Набор данных — это объект типа «словарь», который содержит все данные и некоторые метаданных о них. Эти данные хранятся с расширением .data, например, массивы n_samples, n_features. При машинном обучении с учителем одна или более зависимых переменных хранятся с расширением .target. Для получения более полной информации о наборах данных перейдите в соответствующий раздел.

Например, набор данных digits.data дает доступ к фичам, которые можно использовать для классификации числовых выборок:

а digits.target дает возможность определить в числовой выборке, какой цифре соответствует каждое числовое представление, чему мы и будем обучаться:

Форма массива данных

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

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

Обучение и прогнозирование

В случае с числовым набором данных цель обучения — это предсказать, принимая во внимание представление данных, какая цифра изображена. У нас есть образцы каждого из десяти возможных классов (числа от 0 до 9), на которым мы обучаем алгоритм оценки (estimator), чтобы он мог предсказать класс, к которому принадлежит неразмеченный образец.

В scikit-learn алгоритм оценки для классификатора — это Python объект, который исполняет методы fit(X, y) и predict(T). Пример алгоритма оценки — это класс sklearn.svm.SVC выполняет классификацию методом опорных векторов. Конструктор алгоритма оценки принимает в качестве аргументов параметры модели, но для сокращения времени, мы будем рассматривать этот алгоритм как черный ящик:

Выбор параметров для модели

В этом примере мы установили значение gamma вручную. Также можно автоматически определить подходящие значения для параметров, используя такие инструменты как grid search и cross validation.

Мы назвали экземпляр нашего алгоритма оценки clf, так как он является классификатором. Теперь он должен быть применен к модели, т.е. он должен обучится на модели. Это осуществляется путем прогона нашей обучающей выборки через метод fit. В качестве обучающей выборки мы можем использовать все представления наших данных, кроме последнего. Мы сделали эту выборку с помощью синтаксиса Python [:-1], что создало новый массив, содержащий все, кроме последней, сущности из digits.data:

Теперь можно предсказать новые значения, в частности, мы можем спросить классификатор, какое число содержится в последнем представлении в наборе данных digits, которое мы не использовали в обучении классификатора:

Соответствующее изображение представлено ниже:

image

Как вы можете видеть, это сложная задача: представление в плохом разрешении. Вы согласны с классификатором?

Полное решение этой задачи классификации доступно в качестве примера, который вы можете запустить и изучить: Recognizing hand-written digits.

Сохранение модели

В scikit модель можно сохранить, используя встроенный модуль, названный pickle:

В частном случае применения scikit, может быть полезнее заметить pickle на библиотеку joblib (joblib.dump & joblib.load), которая более эффективна для работы с большим объемом данных, но она позволяет сохранять модель только на диске, а не в строке:

Потом можно загрузить сохраненную модель(возможно в другой Python процесс) с помощью:

Обратите внимание, что joblib.dump возвращает список имен файлов. Каждый отдельный массив numpy, содержащийся в clf объекте, сеарилизован как отдельный файл в файловой системе. Все файлы должны находиться в одной папке, когда вы снова загружаете модель с помощью joblib.load.

Обратите внимание, что у pickle есть некоторые проблемы с безопасностью и сопровождением. Для получения более детальной информации о хранении моделей в scikit-learn обратитесь к секции Model persistence.

Introduction to Machine Learning in Python

Introduction to Machine Learning in Python Cover Image

In this tutorial, you’ll gain an understanding of what machine learning is and how Python can help you take on machine learning projects. Understanding what machine learning is, allows you to understand and see its pervasiveness.

In many cases, people see machine learning as applications developed by Google, Facebook, or Twitter. Many of these applications are complex and are often made up of many smaller models. But don’t let that scare you! This article aims to convince you to see how easy it is to build your own machine learning models. Many applications of machine learning are approachable and can be readily applied to your everyday work.

By the end of this tutorial, you’ll have a strong understanding of:

  • What machine learning is (and what it isn’t)
  • How supervised and unsupervised machine learning algorithms work
  • What classification and regression machine learning models do
  • What clustering and dimension reduction machine learning models do
  • The general machine learning process for a small or large project

Table of Contents

What is Machine Learning?

Machine learning is the process of building mathematical models to help us better understand data. The term “learning” is used because machine learning models are given tunable parameters that allow them to adapt to data. Once the model has learned from previous data, it can be used to make predictions or to better understand new, unobserved data.

Before we dive further into this, let’s take a look at how “intelligent” applications were built in the past. Say you were building a computer program to detect spam messages in your email. You might notice that a lot of spam messages contained a certain word, such as “wire transfer”. You could build a rule using an if-else statement to classify these messages as spam.

There are a lot of problems with this approach: first and foremost, not every message with the words “wire transfer” will actually be spam! Secondly, there are a lot more other spam type keywords out there. As spammers learn what keywords to avoid, you’ll need to consistently add to these words.

Modern-day spam filters use statistical and algorithmic models to predict whether an email should be classified as spam or not. Email services often have labeling tools to classify an email as spam or not. This generates new data based on that email to allow the algorithms to learn without being explicitly programmed!

How machine learning models "learn"

For example, a modern-day spam filter will take into account how long an email is, the frequency with which certain words appear, how emails have been labelled in the past, etc. As you label an email as spam (or not spam), the algorithms can “learn” from this (or be trained) and be more accurate in the future!

How machine learning models make predictions

Machine learning models can take what they learned, turn them into vectors (a concept you’ll learn about later), pass these vectors into an algorithm and return a predicted label! For example, an email’s text can be turned into certain properties (like length, frequency of words, presence of words, etc.) and have this fed into the algorithm. The Algorithm can then return a predicted label, such as either spam or not spam!

Categories of Machine Learning

At its most basic level, you can break machine learning down into two primary types: supervised learning and unsupervised learning.

Supervised learning refers to the process of modelling data based on the relationship between features of the data and some “label” associated with that data point. Once this model has been created, the model can take new data to make predictions on what the new data represents.

Take the first image above as an example. There are two main inputs: training data and their associated labels. For example, a stack of emails and whether or not they are spam or not spam. These are turned into “vectors”, or mathematical representations of the data. This representation is then turned into an algorithmic model.

When new data is created, this data can then be represented in numerical ways. Since your model has been tuned to work with certain data, this data can be passed in to return a predicted label. Following the example of spam emails: you receive a new email and the model can determine whether or not it’s spam!

Supervised learning is often broken into two main domains:

  1. Classification where labels are returned into discete categories
  2. Regression where labels are continuous

Meanwhile, unsupervised leaning refers to the process of modelling features of a dataset without any provided labels. The reason this is “unsupervised” is that there is no determined output you’re providing the model. For example, you’re not hoping to label emails as spam or not spam, but rather letting the machine learning model determine the differences between data points.

Supervised Learning in Python

In this section, you’ll learn a bit more about the two primary domains of supervised machine learning: classification and regression. Classification generally refers to returning discrete categories of data, while regression refers to the process of returning some predicted continuous value.

Classification Machine Learning: Predicting Discrete Categories

In a classification machine learning problem, you are given a set of labelled points and use this data to classify a set of unlabelled points. Take a look at the sample data below. You’re given a set of two-dimensional data. The data are pre-labelled into two categories (in this case, represented by color).

A sample classification problem in Python for supervised machine learning

Given a new point of data, you can plot that point on that graph. Visually, you may be able to tell which group that point should belong to. But how can a computer solve that problem for you? This is a classification problem.

A Quick Overview of Training and Testing Models

You use the training data (e.g., the set above) to train the machine learning model. How you train the data is both up to you and to the dataset! Finding the best model to use is part of the art of machine learning. For example, you could draw a line between the two categories of data. Anything below the line is assigned one color, while anything above the line is assigned the other color.

This process is referred to as “training” the model. You build a model against a sample of test data (the “training” data). For example, you take a sample of, say, 60% of the data to train the model. You can then use the remaining 40% of the data to “test” the model. Since your data is prelabelled, you can get a specific metric of the model’s accuracy. From there, you can attempt to build other models and see if others are more effective.

For example, visually you can see that there are certain clusters of data. This can mean that you can measure the distance from a number of pre-labelled points. If a point is closer to a number of points from one color (i.e., it has more neighbours of one color), then the data point can be labelled to be that color.

Regression Machine Learning: Predicting Continuous Data

In a regression problem, the labels of your data are continuous variables. These types of models are quite popular because they can be easily and quickly fit to your data, and they’re very easy to understand. In their simplest form, linear regression models that plotting a line of best to two variables: a dependent and an independent variable. However, these models can also be extended to much more complicated data behavior.

In those cases the independent variable can be used to predict the value of the dependent variable, using a simple equation.

A simple linear regression example in Python

In this case, you could likely find a straight line to model this relationship. The function of the line would take the form of:

In this case, m is referred to as the slope of the graph and b is referred to as the intercept of the function.

Similarly, these types of regression can take more than two dimensions. In the example below, there are three dimensions and the regressive model shows a plane of intercepts.

In this case, you develop a plane of information to estimate what value will be returned given some inputs. Of course, not all regression models can be accomplished using a linear model. This is where these models become more complex. Similarly, there are few times when two or three variables will be enough to predict the behavior of a phenomenon.

The important takeaway from this section is that regression is a form of supervised learning. You train a model using training data and you can evaluate its effectiveness using testing data. Once you are comfortable with the performance of your model, you can pass in some piece of information with an unknown label (such as the selling price of a house, the income a person has, someone’s weight, etc.) and be able to predict that label using the confluence of other variables.

Unsupervised Learning in Python

Supervised learning involved using a model of known labels to predict the label of new data. On the other hand, unsupervised learning involves building models that describe some data without any reference to known labels. In the example above, where you classified emails as spam or not spam, you fed a label into the model that told the algorithm: “this is spam” or “this isn’t spam”.

In unsupervised learning, these labels aren’t applied. Instead, the models you build identify patterns in the pattern on their own!

Clustering Machine Learning: Labelling Unlabeled Data

One of the most common use cases for unsupervised learning is the concept of “clustering”. In this type of machine learning, data are automatically assigned to different discrete groups. Take a look at the example below:

An example of clustering in unsupervised machine learning in Python

In the first image, it’s easy to see that there are three clusters of data. However, unsupervised learning can learn how to apply these labels through machine learning algorithms for you. In many cases, there’ll be more than two features that feed into a clustering analysis and the results may not be as easy to tell apart.

One of these unsupervised clustering methods is the k-nearest neighbor algorithm. The algorithm looks at each point and determines the distance to it for k other neighbors. By looking at proximity in space, i.e., looking at how closely related these data points are, the algorithm can attempt to cluster them.

Dimensionality Reduction: Finding the Best Features

Another common use case for unsupervised learning is the process of dimensionality reduction . In the examples you’ve looked at above, there have been a limited number of features. However, in practice, you’ll often encounter datasets with hundreds, if not thousands, of features.

Not only does more features mean longer runtimes, but it can also mean that your model gets “overfit” to the training data. What this means, is that the model performs incredibly well for the data that you have, but not as well for new data.

Dimensionality reduction takes a dataset with many features and aims to reduce the features (or the dimensions) of the data while retaining the integrity of the dataset and the model as much as possible.

One such machine learning process is known as principal component analysis . This type of algorithm is used to reduce redundancies in the data through feature extraction. What actually happens is that a large set of variables are transformed into a smaller set of variables that maintains most of the information from the larger dataset.

This, of course, comes at the expense of reducing accuracy. However, the beauty of principal component analysis is that it trades a little accuracy for significant simplicity. This allows machine learning models to learn much faster. Similarly, the models are able to perform much faster as well.

The Machine Learning Process

In this section, you’ll gain an understanding of the machine learning process. The process is deliberately simplified and abstracts many of the complexities of the actual work. That being said, much of the process is true regardless of the machine learning project you take on, whether large or small!

  • Getting Data: The first step is to get data. This can take many different forms, such as getting historical data from open data sets, using your company’s data, or using real-time data from IoT systems
  • Cleaning and Preparing the Data: This can be a fairly involved step. Up to 80% of a data scientist’s time is often spent on the pre-processing of data. Finally, the data are split into training and test datasets.
  • Training Your Model: Finally, you get to build your model! This step involves picking the right type of machine learning model (such as classification or regression) and using the training data to develop a model.
  • Testing Your Model: In this step, you test your model’s effectiveness against data that it hasn’t yet seen. Using the testing data, you can calculate a score of the effectiveness of your model.
  • Improve Your Model: Now that you know how well your model performs, you can make adjustments. These adjustments can mean fine-tuning your parameters (such as through Principal Component Analysis) or choosing a different type of model altogether.
  • Using Your Model: If you’re satisfied with your model, it can be deployed to production! This means using the model in the real world. This is where the effectiveness of your model really comes to light. You may find that you need to tweak certain elements, improve its speed, or broaden its domains.

Conclusion and Recap

In this post, you learned the basic theory of machine learning and how it can be used in Python. The section below provides a quick recap of everything you learned:

Введение в машинное обучение в Python: Полное руководство с примерами

Введение в машинное обучение в Python: Полное руководство с примерами

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

  1. Скачать и установить Python SciPy и какие самые полезные пакеты для машинного обучения в Python.
  2. Загрузить датасет, поймем его структуру с помощью статистических методов и визуализируем данные
  3. Создадим 6 моделей машинного обучения, выберем лучшую и убедимся что точность модели является приемлемой

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

Как начать использовать машинное обучение в Python?

Лучший способ научиться машинному обучению — проектировать и завершать небольшие проекты.

Python может быть пугающим при начале работы

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

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

Лучший способ начать использовать Python для машинного обучения — это разобрать готовый проект по машинному обучению и затем его сделать самому с нуля:

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

Новичкам нужен небольшой сквозной проект

Книги и курсы порой часто расстраивают. Они дают вам много теоретических конструкций и фрагментов, но вы никогда не увидите, как все они сочетаются друг с другом.

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

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

Лучший способ по-настоящему примириться с новой платформой или инструментом – это работать над проектом машинного обучения и покрыть эти ключевые этапы.

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

«Hello World!» машинного обучения

Отличным примером небольшого проекта чтобы начать является задача классификация цветов (на примере цветов ириса).

Это хороший проект, потому что он легко интерпретируется.

  • Атрибуты данных являются числовыми, так что вы должны разобраться, как загрузить и обрабатывать данные
  • Это проблема классификации, позволяющая практиковаться с, возможно, более простым типом контролируемого алгоритма обучения
  • Задача является многоклассовой классификацией и может потребовать некоторой специализированной обработки
  • Выборка имеет только 4 атрибута и 150 строк, что означает, что она достаточно мала, легко будет обработана в операционном памяти локальном компьютера (и легко визуализировать на экране)
  • Все числовые атрибуты находятся в одном и том же масштабе и одинаковой шкале, не требуя специальной нормализации или масштабирования для начала работы

Давайте начнем проект «hello world» машинного обучения в Python.

Машинное обучение в Python (начало проекта)

Вот краткий обзор того, что мы собираемся охватить:

  • Установка платформы Python и SciPy
  • Загрузка датасета
  • Анализ датасета
  • Визуализация данных
  • Оценка алгоритмов машинного обучения
  • Прогнозирование данных

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

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

1. Загрузка, установка и запуск Python и SciPy

Раздел для тех, у кого ее не установлен Python и SciPy. Мы не будем подробно останавливаться на том как устанавливать Python, есть много пошаговых руководств в интернете как это сделать или рекомендуем посетить раздел «Введение в Python».

1.1 Установка библиотек SciPy

Есть 5 ключевых библиотек, которые необходимо установить. Ниже приведен список библиотек Python SciPy, необходимых для этого руководства:

  • scipy
  • numpy
  • matlibplot
  • pandas
  • sklearn

На сайте SciPy есть отличная инструкция по установке вышеуказанных библиотек на ключевых платформах: Windows, Linux, OS X mac. Если у вас есть какие-либо сомнения или вопросы, обратитесь к этому руководству, через него прошли миллионы людей.

Существует множество способов установить библиотеки. В качестве совета мы рекомендуем выбрать один метод и быть последовательным в установке каждой библиотеки. Если вы пользуетесь Windows или вы не уверены как это сделать, мы рекомендую установить бесплатную версию Anaconda, которая включает в себя все, что вам нужно (windows, macOS, Linux).

1.2 Запуск Python и проверка версий

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

Откройте командную строку и запустите Python:

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

Введите или скопируйте и вставьте следующий скрипт в интерпретатор:

Вот пример вывода:

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

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

2. Загрузите данные

Мы будем использовать датасет цветов ирисов Фишера. Этот датасет известен тем, что он используется практически всеми в качестве «hello world» примера в машинном обучении и статистике.

Набор данных содержит 150 наблюдений за цветами ириса. В датасете есть четыре колонки измерений цветов в сантиметрах. Пятая колонна является видом наблюдаемого цветка.

Все наблюдаемые цветы принадлежат к одному из трех видов. Узнать больше об этом датасете можно в Википедия.

На этом этапе мы загрузим данные из URL-адреса в CSV файл.

2.1 Импорт библиотек

Во-первых, давайте импортировать все модули, функции и объекты, которые мы планируем использовать в этом уроке.

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

2.2 Загрузка датасета

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

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

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

Датасет должен загрузиться без происшествий.

Если у вас есть проблемы с сетью, вы можете скачать файл iris.csv в рабочую директорию и загрузить его с помощью того же метода, изменив URL на локальное имя файла.

3. Анализ датасета

Теперь пришло время взглянуть на данные более детально. На этом этапе мы погрузимся в анализ данные несколькими способами:

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

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

3.1 Размерность датасета

Мы можем получить быстрое представление о том, сколько экземпляров (строк) и сколько атрибутов (столбцов) содержится в датасете с помощью метода shape.

Вы должны увидеть 150 экземпляров и 5 атрибутов:

3.2 Просмотр среза данных

Исследовании данных, стоит сразу в них заглянуть, для этого есть метод head()

Это должно вывести первые 20 строк датасета.

3.3 Статистическая сводка

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

Мы видим, что все численные значения имеют одинаковую шкалу (сантиметры) и аналогичные диапазоны от 0 до 8 сантиметров.

3.4 Распределение классов

Давайте теперь рассмотрим количество экземпляров (строк), которые принадлежат к каждому классу. Мы можем рассматривать это как абсолютный счет.

Мы видим, что каждый класс имеет одинаковое количество экземпляров (50 или 33% от датасета).

3.5 Резюме загрузки датасета

На будущее мы можем объединить все предыдущие элементы вместе в один скрипт..

4. Визуализация данных

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

Мы рассмотрим два типа графиков:

  • Одномерные (Univariate) графики, чтобы лучше понять каждый атрибут.
  • Многомерные (Multivariate) графики, чтобы лучше понять взаимосвязь между атрибутами.

4.1 Одномерные графики

Начнем с некоторых одномерных графиков, то есть графики каждой отдельной переменной. Учитывая, что входные переменные являются числовыми, мы можем создавать диаграмма размаха (или «ящик с усами», по-английски «box and whiskers diagram») каждого из них.

Это дает нам более четкое представление о распределении атрибутов на входе.

Диаграмма размаха атрибутов входных данных

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

Из графиков видно, что две из входных переменных имеют около гауссово (нормальное) распределение. Это полезно отметить, поскольку мы можем использовать алгоритмы, которые могут использовать это предположение.

Гистограммы входных данных атрибутов датасета

4.2 Многомерные графики

Теперь мы можем посмотреть на взаимодействия между переменными.

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

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

4.3 Резюме визуализации данных

Для справки мы можем связать все предыдущие элементы вместе в один скрипт. Полный пример приведен ниже.

5. Оценка алгоритмов

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

Вот что мы собираемся охватить в этом шаге:

  • Отделим обучающая выборка от контрольной (тестовой) выборке.
  • Настройка 10-кратной кросс-валидации
  • Построим несколько различных моделей для прогнозирования класса цветка из измерений цветов
  • Выберем лучшую модель.

5.1 Создание контрольной выборки

Мы должны знать, что модель, которую мы создали, хороша.

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

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

Разделим загруженный датасет на два:

  • 80% данных мы будем использовать для обучения, оценки и выбора лучшей среди наших моделей
  • 20% данных, что мы будем использовать в качестве контрольного теста качества полученных моделей

Теперь у вас есть обучающиеся данные в X_train и Y_train для подготовки моделей и контрольная выборка X_validation и Y_validation, которые мы можем использовать позже.

Обратите внимание, что мы использовали срез в Python для выбора столбцов в массиве NumPy.

5.2 Тестирование проверки

Для оценки точности модели мы будем использовать стратифицированную 10-кратную кросс-валидацию.

Это разделит наш датасет на 10 частей, обучающийся на 9 частях и 1 тестовой проверке и будет повторять обучение на всех комбинаций из выборок train-test.

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

Для получения дополнительной информации о том как работает метод k-fold кросс-валидации можно посмотреть по ссылке.

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

Мы используем метрику «acccuracy» для оценки моделей.

Это соотношение числа правильно предсказанных экземпляров, разделенных на общее количество экземпляров в наборе данных, умноженном на 100, чтобы дать процент (например, точность 95%). Мы будем использовать оценочную переменную, когда мы будем запускать сборку и оценивать каждую модель.

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

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

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

Давайте протестируем 6 различных алгоритмов:

  • Логистическая регрессия или логит-модель (LR)
  • Линейный дискриминантный анализ (LDA)
  • Метод k-ближайших соседей (KNN)
  • Классификация и регрессия с помощью деревьев (CART)
  • Наивный байесовский классификатор (NB)
  • Метод опорных векторов (SVM)

Здесь приведена смесь простых линейных (LR и LDA), нелинейных (KNN, CART, NB и SVM) алгоритмов.

Давайте построим и оценим наши модели:

5.4 Выбираем модель

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

Запустив приведенный выше пример, мы получим следующие необработанные результаты:

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

Как интерпретировать полученные значения качества моделей?

В этом случае, мы видим, что это выглядит как метод опорных векторов (SVM) имеет самый большой расчет точности около 0,98 или 98%.

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

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

Мы видим, что ящики и усы участков в верхней части диапазона достигают 100% точности, а некоторые находятся в районе 85% точности.

5.5 Резюме оценки алгоритмов

Для справки мы можем связать все предыдущие элементы вместе в один скрипт. Полный пример приведен ниже.

6. Прогнозирование данных

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

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

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

6.1 Создаем прогноз

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

6.2 Оцениваем прогноз

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

Мы видим, что точность 0,966 или около 96% на контрольной выборке.

Матрица ошибок дает представление об одной допущенной ошибке (сумма недиагональных значений).

Наконец, отчет о классификации предусматривает разбивку каждого класса по точности (precision), полнота (recall), f1-оценка, показывающим отличные результаты (при этом контрольная выборка была небольшая, всего 30 значений).

6.3 Резюме прогнозирование данных

Для справки мы можем связать все предыдущие элементы вместе в один скрипт. Полный пример приведен ниже.

Машинное обучение в Python это не сложно

Проработайте примеры из урока, это не займет дольше 10-15 минут.

Вам не обязательно сразу все понимать. Ваша цель состоит в том, чтобы запустить ряд скриптов описанных в уроке и получить конечный результат. Вам не нужно понимать все при первом проходе. Записывайте свои вопросы параллельно с тем как пишите код. Рекомендуем использовать справку («FunctionName») в Python чтобы разобраться глубже во всех функциях, которые вы используете.

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

Вам не нужно быть программистом Python. Синтаксис языка Python может быть интуитивно понятным, даже если вы новичок в нем. Как и на других языках, сосредоточьтесь на вызовах функций (например,function()) и назначениях (например, a = «b»). Если вы являетесь разработчиком, вы итак уже знаете, как подобрать основы языка очень быстро.

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

Итого

Вы сделали свой первый мини-проект по машинному обучению в Python.

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

Какие могут быть следующие шаги по изучению машинного обучения?

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *