Введение в маркировку данных с помощью 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. Спасибо за чтение!