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