Часть 2 | Отправка вашей модели на поиски разгадки тайны ваших данных
В моей последней статье (которую вы можете найти здесь) мы обсуждали обучение с учителем и то, как оно тренируется на связанных входных и выходных значениях. Он узнает, какой тип входных значений соответствует какому типу выходных значений, чтобы, получив значение X в качестве входных данных, он мог предсказать, что будет на выходе. Мы также коснулись того, как обучение с учителем лучше всего использовать для классификации изображений, распознавания речи и обработки естественного языка. Хорошо, когда есть четкая взаимосвязь между входами и выходами, но так бывает не всегда. Иногда у вас нет размеченных данных или четких взаимосвязей ввода/вывода, но вам все равно нужна модель ИИ для прогнозирования или принятия решения на основе новых входных данных. В этом случае вы можете использовать следующую технику обучения ИИ, которую мы собираемся рассмотреть, неконтролируемое обучение.
Неконтролируемое обучение похоже на поиск сокровищ для вашего ИИ. Вместо того, чтобы давать ему карту с помеченными данными, мы даем ему набор данных и позволяем ему находить свои собственные шаблоны и структуры. Это все равно, что дать ИИ головоломку и позволить ему понять, как все части сочетаются друг с другом. Этот тип обучения отлично подходит для таких задач, как поиск странных или необычных точек данных при обнаружении аномалий, сокращение объема данных при сжатии данных и группировка схожих элементов при кластеризации.
Пример кода:
# Importing required libraries from sklearn.datasets import load_iris from sklearn.cluster import KMeans # Loading the Iris dataset iris = load_iris() X = iris.data # Creating a K-Means model kmeans = KMeans(n_clusters=3) # Fitting the model to the data kmeans.fit(X) # Getting the cluster labels labels = kmeans.labels_ print("Cluster labels:", labels)
Разбивка кода:
# Importing required libraries from sklearn.datasets import load_iris from sklearn.cluster import KMeans
Так же, как и раньше, мы импортируем необходимые библиотеки для примера. Библиотеки sklearn.datasets
и sklearn.cluster
взяты из библиотеки scikit-learn, популярной библиотеки машинного обучения для Python. Функция load_iris
используется для загрузки набора данных Iris, который является классическим набором данных, используемым для задач классификации. Класс KMeans — это алгоритм кластеризации, который объединяет схожие точки данных.
# Loading the Iris dataset iris = load_iris() X = iris.data
Этот код загружает набор данных Iris с помощью функции load_iris
и присваивает данные объекта переменной X.
Набор данных Iris содержит информацию о различных видах цветов Iris, включая длину чашелистиков, ширину чашелистиков, длину и ширину лепестков. В отличие от примера обучения с учителем, где мы присвоили целевые метки переменной y
, в этом случае у нас есть только данные объекта для использования.
# Creating a K-Means model kmeans = KMeans(n_clusters=3)
Затем мы создаем экземпляр алгоритма K-средних, который является типом алгоритма обучения без учителя. K в K-Means относится к количеству кластеров, которое указывается параметром «n_clusters=3».
K-Means — это алгоритм кластеризации, который объединяет похожие точки данных. Алгоритм начинается со случайного выбора «k» числа центроидов, которые действуют как центр каждого кластера. Затем точки данных назначаются ближайшему центроиду, образуя начальные кластеры. Затем алгоритм повторно присваивает точки данных ближайшему центроиду и повторно вычисляет положения центроида, пока кластеры не перестанут изменяться. Окончательные кластеры будут иметь количество кластеров «k», и каждый кластер будет содержать аналогичные точки данных.
Количество кластеров «k» должно быть указано заранее, и разные значения k могут привести к разным результатам. Выбор k может основываться на знании предметной области или может быть определен с использованием таких методов, как метод локтя или метод силуэта.
В этом случае код создает модель K-средних с 3 кластерами. После обучения модели ее можно использовать для прогнозирования кластерных назначений для новых точек данных.
# Fitting the model to the data kmeans.fit(X)
Теперь мы используем метод fit
класса KMeans
для обучения модели набору данных, хранящемуся в переменной X
.
Метод fit
отвечает за поиск центроидов кластера и назначение каждой точки данных одному из кластеров. Количество кластеров определяется параметром n_clusters
, переданным конструктору KMeans
, как показано ранее.
Алгоритм сначала случайным образом инициализирует центроиды кластера, затем итеративно назначает каждую точку данных ближайшему центроиду (на основе евклидова расстояния) и обновляет положения центроида, чтобы они были средним значением всех точек данных, назначенных этому центроиду. Этот процесс продолжается до тех пор, пока назначения кластеров не перестанут изменяться или пока не будет достигнуто максимальное количество итераций. Окончательные назначения кластеров и позиции центроидов хранятся в объекте KMeans и могут использоваться для прогнозирования новых данных с помощью метода predict
или для преобразования данных в пространство кластерных расстояний с помощью метода transform
.
Стоит отметить, что это очень простая реализация алгоритма KMeans, а фактическая реализация в sklearn намного надежнее и эффективнее.
# Getting the cluster labels labels = kmeans.labels_ print("Cluster labels:", labels)
Теперь мы собираемся получить метки кластера для каждой точки данных во входном наборе данных X, который ранее был передан методу fit
. Эти метки указывают назначение кластера для каждой точки данных со значениями в диапазоне от 0 до (n_clusters-1), где n_clusters — это количество кластеров, заданное в конструкторе KMeans.
Атрибут labels_
— это свойство объекта KMeans
, которое устанавливается во время вызова метода fit
. Он содержит массив целых чисел, где каждое целое число соответствует назначению кластера для соответствующей точки данных во входном наборе данных.
Вторая строка кода print("Cluster labels:", labels)
просто распечатывает метки кластеров, чтобы вы могли видеть назначения кластеров для каждой точки данных.
Получив метки кластеров, вы можете использовать их для дальнейшего анализа, например, для сравнения кластеров с какой-либо другой переменной или для анализа характеристик каждого кластера.
Напомним, что мы продемонстрировали базовый пример обучения без учителя с использованием алгоритма K-Means и набора данных Iris. Модель обучается на данных признаков, которые являются входным набором данных X. В процессе обучения алгоритм K-средних будет итеративно обновлять центроиды каждого кластера, пока не достигнет сходимости, этот процесс также называется подгонкой модели.
После обучения модели метки кластеров получаются с помощью kmeans.labels_
. Затем эти метки можно использовать для анализа структуры данных и выявления закономерностей или групп внутри нее. Например, используя полученные метки кластеров, вы можете создать точечную диаграмму данных объектов, где каждая точка окрашена в соответствии с назначением кластера. Это позволит вам визуально проверять кластеры и видеть, как сгруппированы данные. Кроме того, вы можете использовать метки кластеров для сравнения кластеров с другими переменными или для анализа характеристик каждого кластера.
В заключение, этот код представляет собой простой пример того, как алгоритм K-средних можно использовать для выполнения неконтролируемого обучения на наборе данных. Это может быть мощным инструментом для понимания базовой структуры набора данных, а также для выявления шаблонов или групп в нем.
Основные выводы:
Неконтролируемое обучение лучше всего подходит для…
- Данные занимают меньше места при сжатии данных
- Группировка похожих вещей в кластеры.
- Поиск необычных точек данных при обнаружении аномалий
Неконтролируемое обучение отличается от обучения с учителем тем, что оно не предоставляет помеченных данных, поэтому оно не может обучать данные, для которых уже есть решения или выходные данные. Вместо этого ему дается набор данных, и он должен самостоятельно находить в нем закономерности или структуру.
Дополнительные материалы на PlainEnglish.io.
Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord.
Повысьте узнаваемость и признание вашего технического стартапа с помощью Circuit.