- Оригинальный адрес:Unsupervised Learning with Python
- Оригинальный автор:Vihar Kurama
- Перевод с:Программа перевода самородков
- Постоянная ссылка на эту статью:GitHub.com/rare earth/gold-no…
- Переводчик:zhmhhu
- Корректор:jianboy,7Ethan
Неконтролируемое обучение — это метод машинного обучения, используемый для поиска закономерностей в данных. Данные, предоставляемые неконтролируемому алгоритму, не помечены, что означает, что задается только входная переменная (X) без соответствующей выходной переменной. При неконтролируемом обучении алгоритм сам обнаруживает интересные структуры в данных.
Ян Лекун, директор по исследованиям в области искусственного интеллекта, объяснил, что неконтролируемое обучение — обучение машин самостоятельному обучению без явного указания им, все ли они делают правильно или неправильно — является ключом к «настоящему» ИИ.
Контролируемое обучение против неконтролируемого обучения.
При обучении с учителем система пытается учиться на примерах, приведенных ранее. (С другой стороны, при обучении без учителя система пытается найти шаблоны непосредственно из данного примера.) Таким образом, это проблема с учителем, если набор данных помечен, и проблема без учителя, если набор данных не помечен.
Изображение выше является примером контролируемого обучения; мы используем алгоритм регрессии, чтобы найти линию наилучшего соответствия между функциями. При неконтролируемом обучении входные данные разделяются на разные кластеры на основе признаков, и прогнозируется кластер, к которому они принадлежат.
Важные термины
Feature: Входные переменные, используемые для прогнозирования.
Predictions:Вывод модели при вводе примера.
Example: Одна строка набора данных. Пример содержит одну или несколько функций и, возможно, метки.
Label:Результаты функции.
Подготовка данных обучения без учителя
В этой статье мы используем набор данных Iris для наших первых прогнозов. Набор данных содержит набор из 150 записей с 5 атрибутами: длина лепестка, ширина лепестка, длина чашелистика, ширина чашелистика и категория. Iris Setosa, Iris Virginica и Iris Versicolor — это три категории. В нашем неконтролируемом алгоритме нам даются эти четыре характеристики цветка ириса, и мы предсказываем, к какому классу он принадлежит.
Мы используем библиотеку sklearn в Python для загрузки набора данных iris и библиотеку matplotlib для визуализации данных. Ниже приведен фрагмент кода, используемый для изучения набора данных.
# 引入模块
from sklearn import datasets
import matplotlib.pyplot as plt
# 加载数据集
iris_df = datasets.load_iris()
# 数据集上的可用方法
print(dir(iris_df))
# 特征
print(iris_df.feature_names)
# 目标
print(iris_df.target)
# 目标名称
print(iris_df.target_names)
label = {0: 'red', 1: 'blue', 2: 'green'}
# 数据集切片
x_axis = iris_df.data[:, 0] # Sepal Length
y_axis = iris_df.data[:, 2] # Sepal Width
# 绘制
plt.scatter(x_axis, y_axis, c=iris_df.target)
plt.show()
['DESCR', 'data', 'feature_names', 'target', 'target_names']
['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2]
['setosa' 'versicolor' 'virginica']
Фиолетовый: Setosa, Зеленый: Versicolor, Желтый: Virginica
кластеризация
В кластере данные разбиты на группы. Короче говоря, цель состоит в том, чтобы разделить группы со схожими характеристиками и распределить их по соответствующим кластерам.
Наглядный пример,
На изображении выше изображение слева представляет собой необработанные неклассифицированные данные, а изображение справа — сгруппированные (данные классифицируются в соответствии с их признаками). Получив входные данные для прогнозирования, он проверяет кластер, к которому он принадлежит, на основе его характеристик и делает прогноз.
Алгоритм кластеризации K-средних в Python
K-means — это итеративный алгоритм кластеризации, целью которого является поиск локальных максимумов на каждой итерации. Изначально выберите нужное количество кластеров. Поскольку мы знаем, что задействованы 3 класса, мы программируем алгоритм для группировки данных в 3 класса, передавая параметр «n_clusters» в нашу модель K-средних. Теперь случайным образом назначьте три точки (входы) трем кластерам. На основе расстояния до центра тяжести между каждой точкой следующий заданный вход назначается соответствующему кластеру. Теперь пересчитайте центроиды всех кластеров.
Каждый центроид кластера представляет собой набор собственных значений, определяющих результирующую группу. Изучение весов центроидных признаков может быть использовано для качественного объяснения того, какой тип групп представляет каждый кластер.
Мы импортируем модель K-средних из библиотеки sklearn, подбираем функции и делаем прогнозы.
Реализация алгоритма K-средних в Python.
# 引入模块
from sklearn import datasets
from sklearn.cluster import KMeans
# 加载数据集
iris_df = datasets.load_iris()
# 声明模型
model = KMeans(n_clusters=3)
# 拟合模型
model.fit(iris_df.data)
# 预测单个输入
predicted_label = model.predict([[7.2, 3.5, 0.8, 1.6]])
# 预测整个数据
all_predictions = model.predict(iris_df.data)
# 打印预测结果
print(predicted_label)
print(all_predictions)
[0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 1 1 1 2 1 1 1 1 1 1 2 2 1 1 1 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2]
Иерархическая кластеризация
Иерархическая кластеризация, как следует из названия, представляет собой алгоритм, который строит иерархию кластеров. Алгоритм начинается со всех данных, отнесенных к его собственному кластеру. Затем объедините два ближайших кластера в один кластер. Наконец, когда остается только один кластер, алгоритм завершается.
Завершение иерархической кластеризации можно показать с помощью дендрограммы. Теперь давайте рассмотрим пример иерархической кластеризации зернистых данных. Набор данных можно найти вздесьоказаться.
Реализация алгоритма иерархической кластеризации в Python.
# 引入模块
from scipy.cluster.hierarchy import linkage, dendrogram
import matplotlib.pyplot as plt
import pandas as pd
# 读入 DataFrame
seeds_df = pd.read_csv(
"https://raw.githubusercontent.com/vihar/unsupervised-learning-with-python/master/seeds-less-rows.csv")
# 从 DataFrame 中删除谷物种类,稍后再保存
varieties = list(seeds_df.pop('grain_variety'))
# 将测量值提取为 NumPy 数组
samples = seeds_df.values
"""
使用带有 method ='complete' 关键字参数的
linkage()函数对样本执行分层聚类。
将结果合并。
"""
mergings = linkage(samples, method='complete')
"""
在合并时使用 dendrogram() 函数绘制树形图,
指定关键字参数 labels = varieties,leaf_rotation = 90
和 leaf_font_size = 6。
"""
dendrogram(mergings,
labels=varieties,
leaf_rotation=90,
leaf_font_size=6,
)
plt.show()
Разница между K-средними и иерархической кластеризацией Сравните разницу между похожими терминами
- Иерархическая кластеризация плохо работает с большими данными, но кластеризация K-средних работает. Это связано с тем, что временная сложность K-средних линейна, т. е. O(n), а временная сложность иерархической кластеризации квадратична, т. е. O(n2).
- В кластеризации K-средних, когда мы начинаем с произвольно выбранного кластера, результаты, полученные при многократном запуске алгоритма, могут различаться. Однако результаты воспроизводились при иерархической кластеризации.
- Мы обнаружили, что K-средние хорошо работают, когда форма кластеров гиперсферическая (например, круги в 2D, сферы в 3D).
- K-means не допускает зашумленных данных, тогда как в иерархической кластеризации мы можем напрямую использовать зашумленный набор данных для кластеризации.
кластеризация t-SNE
Это один из неконтролируемых методов обучения визуализации. t-SNE означаетt-распределенная случайная окрестность вложения. Он отображает многомерное пространство в 2- или 3-мерное пространство, которое можно визуализировать. В частности, он моделирует каждый многомерный объект двух- или трехмерной точкой, так что похожие объекты моделируются близлежащими точками, а неподобные объекты моделируются удаленными точками с высокой вероятностью.
Реализация кластеризации t-SNE в Python для набора данных радужной оболочки
# 引入模块
from sklearn import datasets
from sklearn.manifold import TSNE
import matplotlib.pyplot as plt
# 加载数据集
iris_df = datasets.load_iris()
# 定义模型
model = TSNE(learning_rate=100)
# 拟合模型
transformed = model.fit_transform(iris_df.data)
# 绘制二维的 t-Sne
x_axis = transformed[:, 0]
y_axis = transformed[:, 1]
plt.scatter(x_axis, y_axis, c=iris_df.target)
plt.show()
Фиолетовый: Setosa, Зеленый: Versicolor, Желтый: Virginica
Здесь, поскольку набор данных радужной оболочки имеет четыре функции (4d), он преобразуется и представляется в виде 2D-графика. Точно так же модель t-SNE можно применять к наборам данных с n функциями.
Кластеризация DBSCAN
DBSCAN (кластеризация на основе плотности с шумом) — это популярный алгоритм кластеризации, используемый в качестве альтернативы K-средним в прогнозной аналитике. Не нужно вводить количество кластеров для запуска. Однако вам необходимо настроить два других параметра.
Реализация scikit-learn предоставляет значения по умолчанию для параметров eps и min_samples, но обычно вам потребуется настроить эти параметры. Параметр eps — это максимальное расстояние между двумя точками данных, рассматриваемыми в одном районе. Параметр min_samples — это минимальное количество точек данных в окрестности, которые считаются кластерами.
Кластеризация DBSCAN в Python
# 引入模块
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
from sklearn.cluster import DBSCAN
from sklearn.decomposition import PCA
# 加载数据集
iris = load_iris()
# 声明模型
dbscan = DBSCAN()
# 拟合
dbscan.fit(iris.data)
# 使用PCA进行转换
pca = PCA(n_components=2).fit(iris.data)
pca_2d = pca.transform(iris.data)
# 基于类别进行绘制
for i in range(0, pca_2d.shape[0]):
if dbscan.labels_[i] == 0:
c1 = plt.scatter(pca_2d[i, 0], pca_2d[i, 1], c='r', marker='+')
elif dbscan.labels_[i] == 1:
c2 = plt.scatter(pca_2d[i, 0], pca_2d[i, 1], c='g', marker='o')
elif dbscan.labels_[i] == -1:
c3 = plt.scatter(pca_2d[i, 0], pca_2d[i, 1], c='b', marker='*')
plt.legend([c1, c2, c3], ['Cluster 1', 'Cluster 2', 'Noise'])
plt.title('DBSCAN finds 2 clusters and Noise')
plt.show()
Другие техники без присмотра:
- Анализ главных компонентов (PCA)
- аномальное обнаружение
- автоматическое кодирование
- Сети глубокого убеждения
- Хеббианское обучение
- Генеративно-состязательные сети (GAN)
- самоорганизующаяся карта
Важные ссылки:
Алгоритмы обучения с учителем в Python.
- Контролируемое обучение с Python: Почему искусственный интеллект и машинное обучение
- Введение в машинное обучение: Машинное обучение — это идея обучения на примерах и опыте, в нем нет явного метода программирования.
- Глубокое обучение с Python: имитирует человеческий мозг.
- Линейная алгебра для глубокого обучения: математика, стоящая за каждой программой глубокого обучения.
постскриптум
Спасибо за чтение. Если вы нашли эту статью полезной, пожалуйста, нажмите ❤️ ниже, чтобы поделиться любовью.
Если вы обнаружите ошибки в переводе или в других областях, требующих доработки, добро пожаловать наПрограмма перевода самородковВы также можете получить соответствующие бонусные баллы за доработку перевода и PR. начало статьиПостоянная ссылка на эту статьюЭто ссылка MarkDown этой статьи на GitHub.
Программа перевода самородковэто сообщество, которое переводит высококачественные технические статьи из ИнтернетаНаггетсДелитесь статьями на английском языке на . Охват контентаAndroid,iOS,внешний интерфейс,задняя часть,блокчейн,продукт,дизайн,искусственный интеллектЕсли вы хотите видеть более качественные переводы, пожалуйста, продолжайте обращать вниманиеПрограмма перевода самородков,официальный Вейбо,Знай колонку.