Введение в маркировку данных с помощью Pandas

Маркировка данных - это процесс присвоения информативных тегов подмножествам данных. Есть много примеров помеченных наборов данных. Данные, содержащие рентгеновские изображения злокачественных и здоровых легких вместе с соответствующими тегами, являются примером помеченных данных. Другой пример - данные о потребительском кредите, которые указывают, не выполнил ли потребитель ссуду или нет. После получения помеченного набора данных модели машинного обучения можно обучить на помеченных данных и использовать для прогнозирования на новых немаркированных примерах. Наличие хорошо размеченных данных важно для построения высокопроизводительных моделей машинного обучения. В этом посте мы обсудим процесс создания значимых меток с помощью библиотеки Python Pandas.

Давайте начнем!

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

Для начала давайте прочитаем данные во фрейм данных Pandas:

import pandas as pd
df_wine = pd.read_csv("winequality-red.csv")

Затем давайте прочитаем первые пять строк данных с помощью метода «.head ()».

print(df_wine.head())

Данные соответствуют винам с оценкой качества от 0 до 10. Давайте посмотрим на значения в данных:

print("Quality values: ", set(df_wine['quality']))

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

print("Max Alcohol %: ", df_wine['alcohol'].max())
print("Min Alcohol %: ", df_wine['alcohol'].min())

давайте также изобразим распределение:

import matplotlib.pyplot as plt
plt.title("Distribution in Alcohol %")
df_wine['alcohol'].hist()

Мы помечаем данные цифрой «1», если процент алкоголя выше или равен 10%, и «0» в противном случае:

import numpy as np
df_wine['alcohol_class'] = np.where(df_wine['alcohol']>=10.0, '1', '0')

Теперь мы можем визуализировать распределение в двоичных метках:

from collections import Counter
plt.title("Distribution in Alcohol Class Labels")
plt.bar(dict(Counter(df_wine['alcohol_class'])).keys(), dict(Counter(df_wine['alcohol_class'])).values())

Данные соответствующим образом помечены для обучения модели бинарной классификации. Теперь давайте рассмотрим проблемы, выходящие за рамки двоичной классификации. Если мы посмотрим на минимальные и максимальные значения «фиксированной кислотности», мы увидим, что диапазон значений шире, чем у% алкоголя:

print("Max fixed acidity %: ", df_wine['fixed acidity'].max())
print("Min fixed acidity %: ", df_wine['fixed acidity'].min())

Мы можем использовать метод Pandas ‘.loc []’ для присвоения троичных меток данным, которые будут сегментировать данные на три группы. Метка «0» будет присвоена значениям (4–7), «1» будет назначена значениям (7–9), а «2» будет назначена значениям (9–16):

df_wine.loc[(df_wine['fixed acidity']>4.0) & (df_wine['fixed acidity']<=7.0), 'acidity_class'] = 0
df_wine.loc[(df_wine['fixed acidity']>7.0) & (df_wine['fixed acidity']<=9.0), 'acidity_class'] = 1
df_wine.loc[(df_wine['fixed acidity']>9.0) & (df_wine['fixed acidity']<=16.0), 'acidity_class'] = 2

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

plt.title("Distribution in Alcohol Class Labels")
plt.bar(dict(Counter(df_wine['acidity_class'])).keys(), dict(Counter(df_wine['acidity_class'])).values())

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

ВЫВОДЫ

Подводя итог, в этом посте мы обсудили, как использовать Pandas для маркировки данных. Во-первых, мы рассмотрели задачу присвоения двоичных меток данным о вине, которые указывают, содержит ли вино более 10% алкоголя по объему. Затем мы рассмотрели возможность присвоения троичных меток, указывающих на уровень фиксированной кислотности в винах. Я надеюсь, вы нашли этот пост полезным / интересным. Код из этого поста доступен на GitHub. Спасибо за чтение!