TransWikia.com

Как отсортировать колонки от больше всего коррелирующих с первой колонкой до менее всего корреллирующих?

Stack Overflow на русском Asked by Viktor Andriichuk on December 2, 2021

Как в DataFrame с колонками A, B, C, D (например) отсортировать колонки B, C, D от больше всего коррелирующих с A до менее всего корреллирующих?

Спрашиваю затем, чтобы научиться автоматизировать поиск самых подходящих для машинного обучения признаков X для поиска y. Следовательно, если, допустим, есть 100 признаков для X, а мне нужно взять 5-ть, которые более всего коррелируют с y, то не охота это делать руками (глазами), так как можно ошибиться. Проще же переложить это на программу.

3 Answers

Судя по вопросу, вы хотите выбрать наиболее важные/сильные признаки из набора X, которые позволят предсказать значения в столбце y. Корреляцию обычно расчитывают для противоположных целей - сильно коррелирующие признаки чаще всего ухудшают качество модели, поэтому от них стараются избавиться. В вашем случае вам надо выбрать наиболее важные признаки, т.е. те котороые максимально влияют на качество работы модели. Для этого существует несколько подходов:

  1. Feature Importance - ранжирование признаков по степени влияния на качество работы модели. Чаще всего для этого используют алгоритмы "решающих деревьев" или их ансамбли.
  2. Feature Selection - выбор наиболее важных признаков.
  3. Dimensionality Reduction - уменьшения размерности пространства признаков. Грубо говоря, мы проецируем вектора признаков в пространство с меньшей размерностью так, чтобы потерять минимум полезной информации. Это как создавать порошковый сок из фруктов - мы пытаемся оставить все самое ценное (экстракт) и избавиться от лишнего.

PS корреляция не всегда способна уловить сложные зависимости и шаблоны. Например один из самых популярных алгоритмов расчёта коэффициента корреляции по Пирсону - способен найти только линейные зависимости между парой столбцов / признаков.

Answered by MaxU on December 2, 2021

Полностью если, то как-то так:

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.rand(1000,100))
df_corr = df.loc[:,df.columns[np.argsort(abs(df.corr()[0]))][-6:]]

Это если оставить и колонку 0, с которой смотрится корреляция. Могу и в 'ABCD...' колонки переписать, но думаю принцип понятен.

Answered by CrazyElf on December 2, 2021

Pandas, метод df.corr()

Результат - матрица попарной корреляции между всеми столбцами DataFrame.

Необязательный параметр method позволяет выбрать алгоритм корреляции (Присона, Спирмана, Кендалла).

Вопрос - всегда-ли самые коррелированные столбцы есть "лучшими" при машинном обучении - здесь оставим за скобками (по правилам данного формуа это другой вопрос).

Answered by passant on December 2, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP