KMeans - это метод машинного обучения, который используется для кластеризации данных. Но в чем разница между другими алгоритмами машинного обучения и K-средами? Что ж, KMeans - это тип машинного обучения, известный как неконтролируемое машинное обучение. Это означает, что мы не помечаем какие-либо данные для обучения алгоритму. Сам алгоритм должен найти группировку данных при условии, что мы предоставим необходимое нам количество групп. Эти группы технически называются кластерами в машинном обучении.
Задача
Наша цель - классифицировать заметки как поддельные или подлинные в зависимости от указанных параметров. Эти параметры являются характеристиками банкнот, измеренными с помощью устройств. Например: толщина, непрозрачность, перекос и другие характеристики, связанные с денежной купюрой.
Набор данных
Здесь мы используем упрощенную версию набора данных банкнот, доступного на openml. Он содержит 2 функции - V1 и V2, которые содержат числовые значения, которые представляют особенности нот. Набор данных представляет собой сочетание значений как для поддельных, так и для подлинных банкнот. Следовательно, Kmeans придется отфильтровать обе категории.
Реализация
Начнем с нашей части кодирования. Первым шагом будет импорт необходимых библиотек. Здесь мы используем SKlearn для реализации алгоритма KMeans и других вспомогательных библиотек, таких как Numpy и Matplotlib, для представления и визуализации данных. Pandas используется для чтения набора данных и возврата данных.
import pandas as pd import numpy as np import matplotlib.pyplot as plt from sklearn.cluster import KMeans
Давайте теперь прочитаем наш набор данных и получим значения. Мы используем файл csv для хранения данных. Pandas имеет read_csv () для чтения файла и сохранения данных в виде массива numpy. После чтения данных мы выполним небольшую очистку набора данных, чтобы удалить NULL или пустые строки.
#reading database and removing NULL values if any data=pd.read_csv(“banknotes.csv”) data.dropna()
Теперь, когда наш набор данных готов к изучению, мы извлечем конкретные данные, которые нам нужны для этой задачи. V1 и V2 - это имена столбцов, которые будут возвращать значения в этом столбце.
#Extracting values x=data[‘V1’] y=data[‘V2’]
Давайте теперь взглянем на наш набор данных, чтобы увидеть, в каком диапазоне находятся наши значения. Приведение значений в наборе данных к одному диапазону окажется эффективным при построении точной модели.
print(“X_max : “,x.max()) print(“X_min : “,x.min()) print(“Y_max : “,y.max()) print(“Y_min : “,y.min())
X_max: 6,8248
X_min: -7,0421
Y_max: 12,9516
Y_min: -13,7731
Диапазон значений в обеих функциях V1 и V2 довольно велик. Следовательно, необходимо нормализовать значения в наборе данных и привести их к единому диапазону.
Nv = (V-mean (arr)) / (max (arr) -min (arr))
arr соответствует всем значениям в столбце конкретной функции. Nv - новое значение, полученное после нормализации.
#performing normaliztion for both features mean_x=x.mean() mean_y=y.mean() max_x=x.max() max_y=y.max() min_x=x.min() min_y=y.min() for i in range(0,x.size): x[i] = (x[i] — mean_x) / (max_x — min_x) for i in range(0,y.size): y[i] = (y[i] — mean_y) / (max_y — min_y)
Набор данных нормализован и готов к отправке в Kmeans для создания модели. Перед этим нам нужно решить, сколько групп мы собираемся классифицировать данные. Для этого приложения у нас может быть два возможных выхода:
Поддельный или Подлинный
Следовательно, у нас может быть 2 группы.
#Performing Clustering res=KMeans(n_clusters=2,max_iter=243).fit(np.column_stack((x,y)))
Kmeans принимает в качестве аргумента n_clusters, который соответствует количеству групп, в которые классифицируются элементы. np.column_stack () складывает два массива по столбцам и превращает каждую строку в отдельный образец. то есть каждая строка в массиве будет характеристиками V1 и V2 каждой выборки в наборе данных. Вызов fit () запустит создание модели.
Полученные результаты
KMeans выполняет кластеризацию с помощью функции fit () и назначает каждую точку данных соответствующей группе 1 или 2. Kmeans начинает нумерацию группы с 0, следовательно, с точки зрения алгоритма у нас есть две группы, то есть 0 или 1.
Каждая точка данных назначается либо группе 0, либо группе 1. Этот результат сохраняется в элементе данных labels_ файла res. Соответствующая группа каждой выборки сохраняется в соответствующем индексе массива labels_. Например: если первый образец принадлежит к группе 0, тогда labels_ [0] = 0 или если он принадлежит к группе 1 labels_ [0] = 1.
KMeans также вычисляет центры кластеров. Это значения, которые представляют центральную часть кластера. Затем эта точка используется для создания прогнозов для новой точки данных. Это обсуждается в следующем разделе.
Визуализация данных
Результаты можно визуализировать с помощью графика. Это помогает нам увидеть, как распределяются данные. Перед построением графика мы должны разделить данные, которые принадлежат к группе 1 и 2 (или группе 0 или 1). Это используется для построения групп с использованием разных цветов, чтобы легко визуализировать и получить распределение.
xval_0=[] yval_0=[] xval_1=[] yval_1=[] for i in range(0,x.size): if(res.labels_[i] == 0): xval_0.append(x[i]) yval_0.append(y[i]) else: xval_1.append(x[i]) yval_1.append(y[i])
xval_0 и yval_0 хранят точки данных, которые принадлежат группе 0, и xval_1, а yval_1 хранят точки данных, которые принадлежат в группу 1.
#Plotting the values and cluster centres plt.scatter(xval_0,yval_0,c=”red”) plt.scatter(xval_1,yval_1,c=”green”) plt.scatter(res.cluster_centers_[:,0],res.cluster_centers_[:,1],c=”black”) plt.xlabel(“V1”) plt.ylabel(“V2”) plt.show()
Matplotlib используется для визуализации. Группы отмечены двумя разными цветами - красным и зеленым для лучшего представления. Центры кластеров также нанесены на график. График выглядит так, как показано ниже:
Красный относится к фальшивым заметкам, а зеленый - к подлинным. Черные точки - центры кластеров.
Спасибо за прочтение!
Найдите этот проект на GitHub: https://www.github.com/vishnu-u/Fake-and-Genuine-Currency-Notes-Clustering-in-KMeans
Найдите меня в LinkedIn https://www.linkedin.com/in/vishnuu0399
Узнай обо мне больше: https://bit.ly/vishnu-u
Использованная литература :
Машинное обучение с Python www.cognitiveclass.ai
Основы науки о данных: Кластеризация средств KMeans www.coursera.org