Найти тему
Машинное обучение

Машинное обучение три способа работы с числовыми пизнаками.

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

Один из распространенных подходов кроме бинаризации числовых признаков основан на алгоритме k-средних. (Подход k-средних выходит за рамки этой статьи.) Другой вариант взять диапазон числовых переменных и разделить их на интервалы одинакового размера. Этот подход, позволяет сделать размер разбиений равным, но количество наблюдений в каждом кластере может сильно различаться. Примером этого является разделение возраста людей на пять или десять лет. В случае с возрастом, если большинству людей от двадцати до тридцати, объединение в кластеры по десять или даже по пять лет может создать кластеры, которые не будет информативны при работе с такими данные. Сгруппировав по частоте возрасты людей будут лучше разделены и более полезны для модели.

Бинаризации с Pandas

Используем данные о погоде, извлеченные из базы данных с помощью пакета с открытым исходным кодом RasgoQL:

dataset = rql.dataset('Table Name')
df = dataset.to_df()

Датасеты одинаковой ширины можно легко создать с помощью функции cut в pandas. В этом случае создаются 4 кластера (bin) одинакового размера.

df['HIGH_TEMP_EQ_BINS'] = pd.cut(df.DAILY_HIGH_TEMP, bins=4,
labels=False, include_lowest=True)

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

df['HIGH_TEMP_FQ_BINS'] = pd.qcut(df.DAILY_HIGH_TEMP, q=4,
precision=1, labels=False)

184 / 5 000

Используем scikit-learn

Разбивать датасет также можно с помощью функции предварительной обработки KBinsDiscretizer в scikit-learn . Чтобы создать равные клестеры (бины), мы параметр KBinsDiscretizer на «uniform».

est = KBinsDiscretizer(n_bins=4, encode='ordinal',
strategy='uniform')
df['HIGH_TEMP_SK_EQ_BINS'] = est.fit_transform(
df[['DAILY_HIGH_TEMP']])

Точно так же установка параметра strategy на «quantile» разобьет данные на приблизительно равные частотные интервалы.

est = KBinsDiscretizer(n_bins=4, encode='ordinal',
strategy='quantile')
df['HIGH_TEMP_SK_FQ_BINS'] = est.fit_transform(
df[['DAILY_HIGH_TEMP']])

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

Бинаризация в стеке данных

Используя пакет RasgoQL с открытым исходным кодом , можно избежать этих проблем. Во-первых, поскольку RasgoQL создает кластеры непосредственно в базе данных, он будет работать с данными любого размера. Во-вторых, по мере поступления новых данных в базу данных они будут автоматически доступны уже разбитые по кластерам и отсортированные.

Чтобы создать кластера одинаковой длины, функцию bin RasgoQL можно вызвать с типом ‘equalwidth’.

eq_bin = dataset.bin(type='equalwidth',
bin_count=4,
column='DAILY_HIGH_TEMP')
eq_bin.save(table_name="HIGH_TEMP_EWB")

В качестве альтернативы, можно утсановить тип «ntile» , что создаст ячейки с кластерами равных размеров.

fq_bin = dataset.bin(type='ntile',
bin_count=4,
column='DAILY_HIGH_TEMP')
fq_bin.save(table_name="HIGH_TEMP_NTB")

Работу с данными в pandas или использование функций scikit-learn легко использовать с небольшими наборами дынных , при работе с большими данными, хранящимися в базе данных, подход с применением RasgoQL с SQL синтаксиса имеет значительное преимущества в скорости. Разработка функций на основе SQL обеспечивает более быструю обработку, более простой путь к повторному использование функций (м запросов) в нескольких проектах. Однако большинству специалистов по данным удобнее работать с Python (или R), чем с SQL, и для многих синтаксис SQL сложен. Пакет с открытым исходным кодом RasgoQL позволяет специалистам по данным работать в Python, но выполнять вычисления в базе данных с минимальным знанием SQL .

Если вы хотите проверить RasgoQL, документацию можно найти здесь, а репозиторий — здесь.