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

Использование PointBiserialCorrSelector из библиотеки Kydavra.

Как всегда, для тех, кто в основном пытается решить свою проблему, есть команды и код:

Итак, чтобы установить kydavra, просто введите следующую строку в терминале или в командной строке.

pip install kydavra

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

from kydavra import PointBiserialCorrSelector
selector = PointBiserialCorrSelector()
new_columns = selector.select(df, ‘target’)

PointBiserialCorrSelector имеет следующие параметры:

  • min_corr - минимальная корреляция для важности признака (по умолчанию = 0,5)
  • max_corr - максимальная корреляция для важного признака (по умолчанию = 0,8)
  • last_level - количество уровней корреляции, которые будет учитывать селектор. Рекомендуется не изменять его (по умолчанию = 2).

Так что давайте не будем тестировать это на Наборе данных Heart Disease UCI. Обратите внимание, что он был очищен раньше.

from kydavra import PointBiserialCorrSelector
selector = PointBiserialCorrSelector()
df = pd.read_csv(‘cleaned.csv’)
new_columns = selector.select(df, ‘target’)
print(new_columns)

Результат:

['cp', 'thalach', 'exang', 'oldpeak', 'sex', 'slope', 'ca', 'thal']

Обратите внимание, что элементы упорядочены по убыванию в зависимости от значения точечной бисериальной корреляции.

Чтобы увидеть влияние выбора функций на разные типы моделей, я решил обучить 3 модели (LogisticRegression, линейная, TreeDecissionClassifier - нелинейная, и SVC с гауссовым ядром). Итак, перед выбором функции у нас было следующее cross_val_score:

LINEAR - 0.8346127946127947
TREE - 0.7681481481481482
SVC - 0.8345454545454546

После применения выбора функции оценки были:

LINEAR - 0.838047138047138
TREE - 0.7718518518518518
SVC - 0.8418181818181818

Таким образом, мы получили немного больше точности для Tree и SVC (почти 1%), но теперь мы используем только 8 функций вместо 13, и это прилично.

Создано с ❤ компанией Sigmoid.

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

Полезные ссылки: