Узнайте, как визуально декодировать набор данных, прежде чем применять к нему алгоритм машинного обучения.

Данные - это числа. Люди не запрограммированы работать с большим количеством чисел одновременно. Люди - визуальные существа. Поэтому всегда имеет смысл получить визуальную интерпретацию ваших данных - задолго до того, как вы начнете применять к ним машинное обучение.

1. Первый шаг - подготовка данных

Каждый проект машинного обучения начинается с подготовки набора данных. Эта статья описывает весь жизненный цикл ML-проекта. Вместо этого мы выберем подготовленный набор данных.

Мы будем использовать набор данных о стекле из пакета r mlbench.

Он содержит 214 наблюдений, содержащих примеры химического анализа 7 различных типов стекла.

2. Установите и загрузите библиотеки

В этом руководстве мы будем использовать 2 библиотеки R.

  1. Скамья ML
  2. Corrplot
#clear all objects
rm(list = ls(all.names = TRUE))
#free up memrory and report the memory usage
gc()
#Load the libraries
library(mlbench)
library(corrplot)

3. Загрузите данные

Затем мы фактически загружаем набор данных и отображаем его первые несколько точек данных.

#Load the dataset
data("Glass")
# display first 10 rows of data
head(Glass, n=10)
# display the dimensions of the dataset
dim(Glass)

Мы быстро понимаем, какие столбцы есть и какие диапазоны их значений. Если ваш набор данных огромен, что часто бывает, вы можете взять небольшую выборку и просмотреть ее.

Беглым взглядом мы видим, что столбцы соответствуют химическим элементам (натрий: Na, магний: Mg,…).

Мы также видим, что каждая строка имеет 9 различных функций. Все они определяют тип стекла. В последней колонке рассказывается о фактическом типе стекла.

Такой набор данных можно использовать для построения модели логистической регрессии, которая прогнозирует тип стекла на основе 9 характеристик.

Также запись размеров данных дает нам представление о том, насколько велик набор данных.

4. Понимание каждой функции

Затем мы пытаемся разобраться в статистических и других свойствах данных.

# list types for each attribute
sapply(Glass, class)
# standard deviations and mean for each class
y<-sapply(Glass[,1:9], mean)
sapply(Glass[,1:9], sd)
xn<-colnames(Glass[,1:9])
x<-c(1:9)
y<-sapply(Glass[,1:9], mean)
barplot(y, main = "Average Value For Each Feature",
     xlab = "Feature Name",
     ylab = "Average Value")

Мы также можем посмотреть на типы данных, чтобы оценить совместимость данных.

Обратите внимание, что последний столбец представляет собой категориальный тип данных, называемый фактором, а остальные - числовые с плавающей точкой. Эта информация очень важна, потому что типы определяют дальнейший анализ, типы визуализаций и даже алгоритмы обучения, которые вы должны использовать.

Мы также можем нанести на график стандартное отклонение каждой функции, чтобы в дальнейшем направлять наш процесс нормализации.

Стандартное отклонение и среднее значение - полезные инструменты

Например, для гауссовского распределения он может действовать как инструмент быстрого удаления выбросов, где любые значения, превышающие стандартное отклонение более чем в три раза, считаются выбросом.

5. Понимание каждого класса

Помимо просмотра данных в соответствии с их характеристиками, мы также можем проанализировать каждый класс. Можно быстро проверить распределение классов

В любой задаче классификации вы должны знать количество экземпляров, принадлежащих каждому значению класса. Это действует как быстрая проверка дисбаланса в наборе данных. В случае проблемы с классификацией мультиклассов он может открывать классы с маленькими или нулевыми экземплярами, которые могут быть кандидатами на удаление из набора данных. Затем это можно дополнить методами восстановления баланса.

# distribution of class variable
y <- Glass$Type
cb <- cbind(freq=table(y), percentage=prop.table(table(y))*100)
barplot(table(y), main = "Frequency Distribution of All Classes",
        xlab = "Class Name",
        ylab = "Number of Data Points", legend = TRUE)

6. Связь между функциями

Одно из наиболее важных соотношений, на которое следует обратить внимание, - это корреляция между функциями. В ML нам никогда не нужны сильно коррелированные функции. В этой статье показан метод обнаружения таких особенностей при реализации алгоритма KNN (K-Nearest Neighbor) с использованием Python. В качестве быстрого теста в R мы можем сделать следующее

# calculate a correlation matrix for numeric variables
correlations <- cor(Glass[,1:9])
# display the correlation matrix
print(correlations)
corrplot(correlations, method = "circle")

Положительные корреляции отображаются синим цветом, а отрицательные - красным. Интенсивность цвета и размер круга пропорциональны коэффициентам корреляции.

Мы легко можем видеть, что Ca сильно коррелирует с RI, и можем удалить один из них из нашего анализа.

Визуальное декодирование вашего набора данных дает вам самый быстрый способ понять ваш набор данных. Это становится очень важным предвестником фактического применения алгоритма машинного обучения.