0 added
0 removed
Original
2026-01-01
Modified
2026-02-21
1
<p><a>#статьи</a></p>
1
<p><a>#статьи</a></p>
2
<ul><li>15 фев 2023</li>
2
<ul><li>15 фев 2023</li>
3
<li>0</li>
3
<li>0</li>
4
</ul><p>Изучаем возможности Python-библиотеки для machine learning и пишем модель классификации цветов с помощью Scikit-learn.</p>
4
</ul><p>Изучаем возможности Python-библиотеки для machine learning и пишем модель классификации цветов с помощью Scikit-learn.</p>
5
<p>Изображение: промоматериалы к фильму "Робот по имени Чаппи" / Columbia Pictures</p>
5
<p>Изображение: промоматериалы к фильму "Робот по имени Чаппи" / Columbia Pictures</p>
6
<p>Изучает Python, его библиотеки и занимается анализом данных. Любит путешествовать в горах.</p>
6
<p>Изучает Python, его библиотеки и занимается анализом данных. Любит путешествовать в горах.</p>
7
<p>Python-библиотеку Scikit-learn используют в data science для создания моделей машинного обучения. С помощью "Сайкит-лёрн" (именно так произносится название этой либы) автомобили ездят по городу на автопилоте, а ваш почтовый ящик фильтрует спам.</p>
7
<p>Python-библиотеку Scikit-learn используют в data science для создания моделей машинного обучения. С помощью "Сайкит-лёрн" (именно так произносится название этой либы) автомобили ездят по городу на автопилоте, а ваш почтовый ящик фильтрует спам.</p>
8
<p>В этой статье мы собрали всё необходимое для старта работы с этой библиотекой: базовые теоретические понятия, примеры кода для основных алгоритмов и теоретические основы. Так что запускайте Google Colab или другую IDE и присоединяйтесь к нам.</p>
8
<p>В этой статье мы собрали всё необходимое для старта работы с этой библиотекой: базовые теоретические понятия, примеры кода для основных алгоритмов и теоретические основы. Так что запускайте Google Colab или другую IDE и присоединяйтесь к нам.</p>
9
<p>Scikit-learn - популярная Python-библиотека для машинного обучения, которая была разработана в рамках проекта Google Summer of Code в 2007 году. Её цель - взаимодействие с числовыми и научными библиотеками Python: NumPy и SciPy. В библиотеке представлены различные алгоритмы классификации, регрессии и кластеризации, включая support vector machines, random forests, gradient boosting, k-means и DBSCAN.</p>
9
<p>Scikit-learn - популярная Python-библиотека для машинного обучения, которая была разработана в рамках проекта Google Summer of Code в 2007 году. Её цель - взаимодействие с числовыми и научными библиотеками Python: NumPy и SciPy. В библиотеке представлены различные алгоритмы классификации, регрессии и кластеризации, включая support vector machines, random forests, gradient boosting, k-means и DBSCAN.</p>
10
<p>Scikit-learn быстро набрала популярность и сегодня является одним из лучших вариантов для ML-разработки, что подтверждает статистика её использования<a>в Kaggle-соревнованиях</a>:</p>
10
<p>Scikit-learn быстро набрала популярность и сегодня является одним из лучших вариантов для ML-разработки, что подтверждает статистика её использования<a>в Kaggle-соревнованиях</a>:</p>
11
Scikit-learn - самая популярная библиотека в классическом машинном обучении в топ-5 соревнованиях на Kaggle<em>Скриншот: Kaggle / Skillbox Media</em><p>Почему она так популярна:</p>
11
Scikit-learn - самая популярная библиотека в классическом машинном обучении в топ-5 соревнованиях на Kaggle<em>Скриншот: Kaggle / Skillbox Media</em><p>Почему она так популярна:</p>
12
<ul><li>большое комьюнити и подробная документация, облегчающая обучение и использование библиотеки на практике;</li>
12
<ul><li>большое комьюнити и подробная документация, облегчающая обучение и использование библиотеки на практике;</li>
13
<li>самостоятельность для машинного обучения за счёт возможности работать с основными алгоритмами ML: регрессия, кластеризация, random forest и другими;</li>
13
<li>самостоятельность для машинного обучения за счёт возможности работать с основными алгоритмами ML: регрессия, кластеризация, random forest и другими;</li>
14
<li>лёгкая интеграция с другими библиотеками, используемыми в машинном обучении и data science в целом: Matplotlib и Plotly для построения графиков, NumPy для векторизации массивов, Pandas DataFrame, SciPy и другими;</li>
14
<li>лёгкая интеграция с другими библиотеками, используемыми в машинном обучении и data science в целом: Matplotlib и Plotly для построения графиков, NumPy для векторизации массивов, Pandas DataFrame, SciPy и другими;</li>
15
<li>open-source-код и возможность использования в коммерческих проектах.</li>
15
<li>open-source-код и возможность использования в коммерческих проектах.</li>
16
</ul><p>В машинном обучении для работы с кодом обычно используются специальные инструменты:<a>Google Colab</a>или<a>Jupyter Notebook</a>. Это IDE, специально созданные для работы с данными, позволяющие не писать отдельные приложения, а обрабатывать информацию пошагово.</p>
16
</ul><p>В машинном обучении для работы с кодом обычно используются специальные инструменты:<a>Google Colab</a>или<a>Jupyter Notebook</a>. Это IDE, специально созданные для работы с данными, позволяющие не писать отдельные приложения, а обрабатывать информацию пошагово.</p>
17
<p>В этой статье мы будем использовать Google Colab - облачное решение для работы с данными. Оно работает в браузере и доступно хоть на ноутбуке, хоть на планшете и даже на смартфоне.</p>
17
<p>В этой статье мы будем использовать Google Colab - облачное решение для работы с данными. Оно работает в браузере и доступно хоть на ноутбуке, хоть на планшете и даже на смартфоне.</p>
18
<p>При работе с Google Colab или Jupyter Notebook устанавливать Python и Scikit-learn не понадобится - язык программирования и библиотека уже доступны "из коробки". Но если вы решили писать код в другой IDE, например в Visual Studio Code, то сначала<a>установите Python</a>, а затем Scikit-learn через терминал:</p>
18
<p>При работе с Google Colab или Jupyter Notebook устанавливать Python и Scikit-learn не понадобится - язык программирования и библиотека уже доступны "из коробки". Но если вы решили писать код в другой IDE, например в Visual Studio Code, то сначала<a>установите Python</a>, а затем Scikit-learn через терминал:</p>
19
pip install -U scikit-learn<p>Установка на Windows, macOS и Linux происходит одинаково. Если вы столкнулись с ошибками в процессе установки, то почитайте<a>документацию к библиотеке</a>.</p>
19
pip install -U scikit-learn<p>Установка на Windows, macOS и Linux происходит одинаково. Если вы столкнулись с ошибками в процессе установки, то почитайте<a>документацию к библиотеке</a>.</p>
20
<p>Библиотека Scikit-learn умеет работать с самыми разными данными: массивы numpy.array (формат библиотеки NymPy), матрицы SciPy Sparse (из библиотеки SciPy) и классические DataFrame из библиотеки Pandas. Можно создавать наборы данных с нуля или импортировать уже готовые в CSV, JSON и других стандартных форматах.</p>
20
<p>Библиотека Scikit-learn умеет работать с самыми разными данными: массивы numpy.array (формат библиотеки NymPy), матрицы SciPy Sparse (из библиотеки SciPy) и классические DataFrame из библиотеки Pandas. Можно создавать наборы данных с нуля или импортировать уже готовые в CSV, JSON и других стандартных форматах.</p>
21
<p>Но, прежде чем начать работать с данными, нам нужно их откуда-то получить: воспользоваться готовым набором данных, скачать их из открытых репозиториев, взять данные из систем аналитики вашей компании и так далее. В этой статье мы воспользуемся датасетом, который уже установлен в библиотеку Scikit-learn.</p>
21
<p>Но, прежде чем начать работать с данными, нам нужно их откуда-то получить: воспользоваться готовым набором данных, скачать их из открытых репозиториев, взять данные из систем аналитики вашей компании и так далее. В этой статье мы воспользуемся датасетом, который уже установлен в библиотеку Scikit-learn.</p>
22
<p>Библиотека Scikit-learn предлагает несколько готовых датасетов, которые можно использовать в процессе обучения. Всего их шесть:</p>
22
<p>Библиотека Scikit-learn предлагает несколько готовых датасетов, которые можно использовать в процессе обучения. Всего их шесть:</p>
23
<a><strong>load_iris</strong></a>Содержит информацию о 150 образцах ирисов с несколькими признакамиПодходит для задач классификации<a><strong>load_diabetes</strong></a>Данные 442 пациентов с сахарным диабетом и 10 признаками, связанными со здоровьемПодходит для задач регрессии<a><strong>load_digits</strong></a>Набор из 1800 изображений рукописных буквПодходит для задач классификации<a><strong>load_linnerud</strong></a>Набор данных о результатах выполнения 3 физических упражнений 20 людьми в динамикеПодходит для задач регрессии<a><strong>load_wine</strong></a>Набор данных о результатах химического анализа разных видов винаПодходит для задач классификации<a><strong>load_breast_cancer</strong></a>Набор данных о гистологических параметрах опухолей молочной железыПодходит для задач классификации<p>Для загрузки стандартных датасетов существует модуль<strong>sklearn.datasets</strong>. Давайте импортируем его и загрузим данные из набора данных<strong>load_iris</strong>:</p>
23
<a><strong>load_iris</strong></a>Содержит информацию о 150 образцах ирисов с несколькими признакамиПодходит для задач классификации<a><strong>load_diabetes</strong></a>Данные 442 пациентов с сахарным диабетом и 10 признаками, связанными со здоровьемПодходит для задач регрессии<a><strong>load_digits</strong></a>Набор из 1800 изображений рукописных буквПодходит для задач классификации<a><strong>load_linnerud</strong></a>Набор данных о результатах выполнения 3 физических упражнений 20 людьми в динамикеПодходит для задач регрессии<a><strong>load_wine</strong></a>Набор данных о результатах химического анализа разных видов винаПодходит для задач классификации<a><strong>load_breast_cancer</strong></a>Набор данных о гистологических параметрах опухолей молочной железыПодходит для задач классификации<p>Для загрузки стандартных датасетов существует модуль<strong>sklearn.datasets</strong>. Давайте импортируем его и загрузим данные из набора данных<strong>load_iris</strong>:</p>
24
from sklearn import datasets data = datasets.load_iris()<p>Если сейчас вывести содержимое объекта data на экран, то мы увидим что-то непонятное:</p>
24
from sklearn import datasets data = datasets.load_iris()<p>Если сейчас вывести содержимое объекта data на экран, то мы увидим что-то непонятное:</p>
25
<em>Скриншот: Scikit-learn / Skillbox Media</em><p>Датасеты хранятся в Scikit-learn не в привычных для аналитиков данных DataFrame, а в Bunch - специальном словаре с расширением .data. В нашем случае это массивы setosa, versicolor, virginica и другие.</p>
25
<em>Скриншот: Scikit-learn / Skillbox Media</em><p>Датасеты хранятся в Scikit-learn не в привычных для аналитиков данных DataFrame, а в Bunch - специальном словаре с расширением .data. В нашем случае это массивы setosa, versicolor, virginica и другие.</p>
26
<p>Для удобства работы можно импортировать Pandas и сохранить информацию в табличном виде:</p>
26
<p>Для удобства работы можно импортировать Pandas и сохранить информацию в табличном виде:</p>
27
import pandas as pd # Создадим DataFrame. df = pd.DataFrame(data.data, columns=data.feature_names) # Добавим столбец "target" и заполним его данными. df['target'] = data.target # Выведем на экран первые пять строк. df.head()<p>Теперь данные отображаются в удобном виде и с ними можно работать:</p>
27
import pandas as pd # Создадим DataFrame. df = pd.DataFrame(data.data, columns=data.feature_names) # Добавим столбец "target" и заполним его данными. df['target'] = data.target # Выведем на экран первые пять строк. df.head()<p>Теперь данные отображаются в удобном виде и с ними можно работать:</p>
28
<em>Скриншот: Scikit-learn / Skillbox Media</em><p>Используем этот датасет для классической задачи машинного обучения - классификации. Для начала разберёмся в самих данных и поймём, что содержится в этом наборе данных.</p>
28
<em>Скриншот: Scikit-learn / Skillbox Media</em><p>Используем этот датасет для классической задачи машинного обучения - классификации. Для начала разберёмся в самих данных и поймём, что содержится в этом наборе данных.</p>
29
<p>Данные включают в себя информацию о 150 образцах трёх видов ирисов. В первом столбце представлена длина чашелистика, во втором - ширина чашелистика, в третьем - длина лепестка, в четвёртом - ширина лепестка. В зависимости от этих значений мы можем разделить цветки на три разных вида: setosa, versicolor, virginica, различающиеся шириной и высотой лепестков и чашелистиков.</p>
29
<p>Данные включают в себя информацию о 150 образцах трёх видов ирисов. В первом столбце представлена длина чашелистика, во втором - ширина чашелистика, в третьем - длина лепестка, в четвёртом - ширина лепестка. В зависимости от этих значений мы можем разделить цветки на три разных вида: setosa, versicolor, virginica, различающиеся шириной и высотой лепестков и чашелистиков.</p>
30
<p>Этот набор данных отлично подходит для классических задач контролируемого обучения, то есть обучения на размеченных данных. Входными переменными являются длина и ширина чашелистика и длина и ширина лепестка; каждая строка представляет собой один экземпляр или наблюдение. Выходной переменной является Iris setosa, Iris versicolor или Iris virginica, то есть название вида.</p>
30
<p>Этот набор данных отлично подходит для классических задач контролируемого обучения, то есть обучения на размеченных данных. Входными переменными являются длина и ширина чашелистика и длина и ширина лепестка; каждая строка представляет собой один экземпляр или наблюдение. Выходной переменной является Iris setosa, Iris versicolor или Iris virginica, то есть название вида.</p>
31
<p>Посмотрим ещё раз на наш датасет:</p>
31
<p>Посмотрим ещё раз на наш датасет:</p>
32
<em>Скриншот: Scikit-learn / Skillbox Media</em><p>В столбце target указан вид, к которому относится цветок: setosa (0), versicolor (1), virginica (2). Но работать с ним неудобно, так как нам проще работать с названиями видов. Поэтому добавим столбец с указанием вида растения:</p>
32
<em>Скриншот: Scikit-learn / Skillbox Media</em><p>В столбце target указан вид, к которому относится цветок: setosa (0), versicolor (1), virginica (2). Но работать с ним неудобно, так как нам проще работать с названиями видов. Поэтому добавим столбец с указанием вида растения:</p>
33
import pandas as pd species = [] for i in range(len(df['target'])): if df['target'][i] == 0: species.append("setosa") elif df['target'][i] == 1: species.append('versicolor') else: species.append('virginica') df['species'] = species<p>Теперь выведем датафрейм и посмотрим, всё ли получилось:</p>
33
import pandas as pd species = [] for i in range(len(df['target'])): if df['target'][i] == 0: species.append("setosa") elif df['target'][i] == 1: species.append('versicolor') else: species.append('virginica') df['species'] = species<p>Теперь выведем датафрейм и посмотрим, всё ли получилось:</p>
34
df.head()<em>Скриншот: Scikit-learn / Skillbox Media</em><p>Отлично. Всё получилось.</p>
34
df.head()<em>Скриншот: Scikit-learn / Skillbox Media</em><p>Отлично. Всё получилось.</p>
35
<p>Классификация используется для разделения переменных или каких-то объектов по категориям. Как правило, это всегда обучение с учителем, то есть на выходе должны быть размеченные данные с признаками и сами категории, которые будут использоваться для разделения. Один из примеров работы классификации - спам-фильтры в почтовом ящике.</p>
35
<p>Классификация используется для разделения переменных или каких-то объектов по категориям. Как правило, это всегда обучение с учителем, то есть на выходе должны быть размеченные данные с признаками и сами категории, которые будут использоваться для разделения. Один из примеров работы классификации - спам-фильтры в почтовом ящике.</p>
36
<p>Посмотрим, как классификация работает на практике, - приготовьтесь, часть терминологии из сферы работы с данными довольно сложна для понимания, и мы предполагаем, что с ней вы уже немного знакомы.</p>
36
<p>Посмотрим, как классификация работает на практике, - приготовьтесь, часть терминологии из сферы работы с данными довольно сложна для понимания, и мы предполагаем, что с ней вы уже немного знакомы.</p>
37
<p>Прежде чем приступать к написанию алгоритма классификации, посмотрим на то, как сейчас распределены образцы по своим параметрам - воспользуемся библиотекой Matplotlib и построим график распределения образцов по размерам чашелистика:</p>
37
<p>Прежде чем приступать к написанию алгоритма классификации, посмотрим на то, как сейчас распределены образцы по своим параметрам - воспользуемся библиотекой Matplotlib и построим график распределения образцов по размерам чашелистика:</p>
38
import matplotlib.pyplot as plt setosa = df[df.species == 'setosa'] versicolor = df[df.species == 'versicolor'] virginica = df[df.species == 'virginica'] fig, ax = plt.subplots() fig.set_size_inches(13, 7) # Задаём размеры графика. # Подписываем и отрисовываем точки. ax.scatter(setosa['petal length (cm)'], setosa['petal width (cm)'], label="Setosa", facecolor="blue") ax.scatter(versicolor['petal length (cm)'], versicolor['petal width (cm)'], label="Versicolor", facecolor="green") ax.scatter(virginica['petal length (cm)'], virginica['petal width (cm)'], label="Virginica", facecolor="red") ax.set_xlabel("длина чашелистика (см)") ax.set_ylabel("ширина чашелистика (см)") ax.grid() ax.set_title("Чашелистики у ирисов") ax.legend()<p>Смотрим на результат:</p>
38
import matplotlib.pyplot as plt setosa = df[df.species == 'setosa'] versicolor = df[df.species == 'versicolor'] virginica = df[df.species == 'virginica'] fig, ax = plt.subplots() fig.set_size_inches(13, 7) # Задаём размеры графика. # Подписываем и отрисовываем точки. ax.scatter(setosa['petal length (cm)'], setosa['petal width (cm)'], label="Setosa", facecolor="blue") ax.scatter(versicolor['petal length (cm)'], versicolor['petal width (cm)'], label="Versicolor", facecolor="green") ax.scatter(virginica['petal length (cm)'], virginica['petal width (cm)'], label="Virginica", facecolor="red") ax.set_xlabel("длина чашелистика (см)") ax.set_ylabel("ширина чашелистика (см)") ax.grid() ax.set_title("Чашелистики у ирисов") ax.legend()<p>Смотрим на результат:</p>
39
<em>Скриншот: Scikit-learn / Skillbox Media</em><p>Хорошо заметно, что виды отличаются друг от друга размером чашелистиков. Например, у ирисов virginica они крупнее, чем у ирисов versicolor и setosa. То есть эти характеристики можно использовать для различения видов между собой. Попробуем научить этому компьютер.</p>
39
<em>Скриншот: Scikit-learn / Skillbox Media</em><p>Хорошо заметно, что виды отличаются друг от друга размером чашелистиков. Например, у ирисов virginica они крупнее, чем у ирисов versicolor и setosa. То есть эти характеристики можно использовать для различения видов между собой. Попробуем научить этому компьютер.</p>
40
<p>Нам не придётся писать алгоритм классификации с нуля. В библиотеке Scikit-learn есть множество готовых алгоритмов - надо только выбрать правильный.</p>
40
<p>Нам не придётся писать алгоритм классификации с нуля. В библиотеке Scikit-learn есть множество готовых алгоритмов - надо только выбрать правильный.</p>
41
<p>В случае с ирисами воспользуемся логистической регрессией. Прежде чем приступить к этому, разделим датасет на два набора данных: тренировочный, который будем использовать для обучения алгоритма, и тестовый - для проверки точности его работы. Для этого воспользуемся стандартным методом train_test_split.</p>
41
<p>В случае с ирисами воспользуемся логистической регрессией. Прежде чем приступить к этому, разделим датасет на два набора данных: тренировочный, который будем использовать для обучения алгоритма, и тестовый - для проверки точности его работы. Для этого воспользуемся стандартным методом train_test_split.</p>
42
<p>Важно, что логистическая регрессия не работает с датафреймами Pandas. Поэтому дополнительно импортируем NumPy и преобразуем датафрейм в NumPy-массивы.</p>
42
<p>Важно, что логистическая регрессия не работает с датафреймами Pandas. Поэтому дополнительно импортируем NumPy и преобразуем датафрейм в NumPy-массивы.</p>
43
from sklearn.model_selection import train_test_split # Удалим из датасета два столбца, которые не нужны нам для обучения. X = df.drop(['target','species'], axis=1) # Переведём значения длины и ширины чашелистика в массив NumPy. X = X.to_numpy()[:, (2,3)] y = df['target'] # Разделим данные на тестовую и тренировочную выборку. X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.5, random_state=42)<p>Отлично - теперь у нас есть два отдельных набора данных для обучения и тренировки. Параметр test_size задаёт размер тестовой выборки в процентах, а random_state делает разбивку не случайной. Если его не указать, то при каждом перезапуске кода мы будем получать различные значения в тренировочной и тестовой выборке.</p>
43
from sklearn.model_selection import train_test_split # Удалим из датасета два столбца, которые не нужны нам для обучения. X = df.drop(['target','species'], axis=1) # Переведём значения длины и ширины чашелистика в массив NumPy. X = X.to_numpy()[:, (2,3)] y = df['target'] # Разделим данные на тестовую и тренировочную выборку. X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.5, random_state=42)<p>Отлично - теперь у нас есть два отдельных набора данных для обучения и тренировки. Параметр test_size задаёт размер тестовой выборки в процентах, а random_state делает разбивку не случайной. Если его не указать, то при каждом перезапуске кода мы будем получать различные значения в тренировочной и тестовой выборке.</p>
44
<p>Остаётся импортировать алгоритм логистической регрессии и обучить его. Сделать это можно с помощью трёх строк:</p>
44
<p>Остаётся импортировать алгоритм логистической регрессии и обучить его. Сделать это можно с помощью трёх строк:</p>
45
from sklearn.linear_model import LogisticRegression log_reg = LogisticRegression() log_reg.fit(X_train,y_train) # Обучаем наш алгоритм на тренировочной выборке.<p>Запускаем! Отлично, теперь можно прогнать через наш алгоритм обе выборки - тестовую и тренировочную. В зависимости от значений переменных логистическая регрессия присвоит образцу значение 0, 1 или 2, то есть конкретный вид ириса.</p>
45
from sklearn.linear_model import LogisticRegression log_reg = LogisticRegression() log_reg.fit(X_train,y_train) # Обучаем наш алгоритм на тренировочной выборке.<p>Запускаем! Отлично, теперь можно прогнать через наш алгоритм обе выборки - тестовую и тренировочную. В зависимости от значений переменных логистическая регрессия присвоит образцу значение 0, 1 или 2, то есть конкретный вид ириса.</p>
46
training_prediction = log_reg.predict(X_train) training_prediction<p>Результат:</p>
46
training_prediction = log_reg.predict(X_train) training_prediction<p>Результат:</p>
47
<em>Скриншот: Scikit-learn / Skillbox Media</em><p>Мы видим, что на выходе получили массив, содержащий значения от 0 до 2, которые соответствуют видам ирисов. Повторим для тестовой выборки:</p>
47
<em>Скриншот: Scikit-learn / Skillbox Media</em><p>Мы видим, что на выходе получили массив, содержащий значения от 0 до 2, которые соответствуют видам ирисов. Повторим для тестовой выборки:</p>
48
test_prediction = log_reg.predict(X_test) test_prediction<p>Показатели производительности используются для оценки эффективности классификаторов. Для задач классификации существуют три основные метрики оценки модели: точность, полнота и матрица ошибок.</p>
48
test_prediction = log_reg.predict(X_test) test_prediction<p>Показатели производительности используются для оценки эффективности классификаторов. Для задач классификации существуют три основные метрики оценки модели: точность, полнота и матрица ошибок.</p>
49
<p><strong>Точность (precision)</strong> - это соотношение объектов, названных классификатором положительными и при этом действительно являющихся положительными, а <strong>полнота (recall)</strong>отвечает на вопрос, какую долю положительных объектов действительно нашёл алгоритм. Именно две эти метрики используем для оценки нашей модели.</p>
49
<p><strong>Точность (precision)</strong> - это соотношение объектов, названных классификатором положительными и при этом действительно являющихся положительными, а <strong>полнота (recall)</strong>отвечает на вопрос, какую долю положительных объектов действительно нашёл алгоритм. Именно две эти метрики используем для оценки нашей модели.</p>
50
<p>Для проверки производительности алгоритма в Scikit-learn существует специальный метод metrics, рассчитывающий основные метрики:</p>
50
<p>Для проверки производительности алгоритма в Scikit-learn существует специальный метод metrics, рассчитывающий основные метрики:</p>
51
from sklearn import metrics print("Precision, Recall в тренировочной выборке\n") # Считаем Recall. print(metrics.classification_report(y_train, training_prediction, digits=3))<p>Результат:</p>
51
from sklearn import metrics print("Precision, Recall в тренировочной выборке\n") # Считаем Recall. print(metrics.classification_report(y_train, training_prediction, digits=3))<p>Результат:</p>
52
<em>Скриншот: Scikit-learn / Skillbox Media</em><p>Что мы видим?</p>
52
<em>Скриншот: Scikit-learn / Skillbox Media</em><p>Что мы видим?</p>
53
<p>Точность (precision) в среднем равна 0,939, то есть 93,9%, что довольно хорошо для небольшого количества образцов. Полнота (recall) также равна 0,938, то есть алгоритм в 93,8% случаев правильно понимает принадлежность конкретного образца, пропуская их в оставшихся 6,2% случаев.</p>
53
<p>Точность (precision) в среднем равна 0,939, то есть 93,9%, что довольно хорошо для небольшого количества образцов. Полнота (recall) также равна 0,938, то есть алгоритм в 93,8% случаев правильно понимает принадлежность конкретного образца, пропуская их в оставшихся 6,2% случаев.</p>
54
<p>Проверим теперь алгоритм на тестовой выборке:</p>
54
<p>Проверим теперь алгоритм на тестовой выборке:</p>
55
print("Precision, Recall в тестовой выборке") # Считаем Recall. print(metrics.classification_report(y_test, test_prediction, digits=3))<p>Результат:</p>
55
print("Precision, Recall в тестовой выборке") # Считаем Recall. print(metrics.classification_report(y_test, test_prediction, digits=3))<p>Результат:</p>
56
<em>Скриншот: Scikit-learn / Skillbox Media</em><p>100% точность определения. Наша модель классификации правильно определяет все подвиды ирисов на основе длины и ширины чашелистиков, не допуская ложноположительных и ложноотрицательных результатов.</p>
56
<em>Скриншот: Scikit-learn / Skillbox Media</em><p>100% точность определения. Наша модель классификации правильно определяет все подвиды ирисов на основе длины и ширины чашелистиков, не допуская ложноположительных и ложноотрицательных результатов.</p>
57
<p>Библиотека Scikit-learn имеет<a>подробную официальную документацию</a>, которая содержит подробную информацию об особенностях работы с ней и примеры кода для различных вариантов алгоритмов машинного обучения. Для глубокого погружения в работу с библиотекой лучше подойдут специализированные книги:</p>
57
<p>Библиотека Scikit-learn имеет<a>подробную официальную документацию</a>, которая содержит подробную информацию об особенностях работы с ней и примеры кода для различных вариантов алгоритмов машинного обучения. Для глубокого погружения в работу с библиотекой лучше подойдут специализированные книги:</p>
58
<ul><li>"Прикладное машинное обучение с помощью Scikit-Learn, Keras и TensorFlow. Концепции, инструменты и техники для создания интеллектуальных систем" Жерона Орельена;</li>
58
<ul><li>"Прикладное машинное обучение с помощью Scikit-Learn, Keras и TensorFlow. Концепции, инструменты и техники для создания интеллектуальных систем" Жерона Орельена;</li>
59
<li>Learning scikit-learn. Machine Learning in Python Рауля Гарреты;</li>
59
<li>Learning scikit-learn. Machine Learning in Python Рауля Гарреты;</li>
60
<li>Scikit-learn Cookbook Трента Хаука.</li>
60
<li>Scikit-learn Cookbook Трента Хаука.</li>
61
</ul><a>Курс с трудоустройством: "Профессия Data scientist + ИИ" Узнать о курсе</a>
61
</ul><a>Курс с трудоустройством: "Профессия Data scientist + ИИ" Узнать о курсе</a>