ASISAKOV_CHANNEL Telegram 528
Отбор признаков с применением корреляции

Если вы помните, то в одном из постов я описывал проверки на корреляцию как один из способов отбора признаков. Также вспомним, что например коэффициент корреляции Пирсона принимает значения от -1 до 1:

🔵Значение, близкое к 1, означает сильную положительную корреляцию
🔵Значение, близкое к -1, означает сильную отрицательную корреляцию
🔵Значение, близкое к 0, означает отсутствие линейной корреляции.

import pandas as pd

df = pd.read_csv('data.csv')

corr_matrix = df.corr()
corr_with_target = corr_matrix['target'].drop('target')

print(corr_with_target.sort_values(ascending=False))


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

Допустим, мы тут сократили количество признаков с 300 до 40 (не забыв предварительно взять абсолюты!). Надо ли копнуть еще глубже?

Да, поэтому попробуем обнаружить взаимосвязь между каждой парой признаков - то есть они могут нести одну и ту же информацию и быть мультиколлинеарными. Сделаем это при помощи следующего кода:

import seaborn as sns
import matplotlib.pyplot as plt

corr_matrix = df.corr()

plt.figure(figsize=(10,8))
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm', linewidths=.5)
plt.title('Correlation Matrix Heatmap')
plt.show()


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

1️⃣Вычисляем корреляционную матрицу для всех признаков.
2️⃣Определяем пары признаков с высокой корреляцией (например, выше 0.8).
3️⃣Для каждой пары оставляем признак с большей корреляцией с таргетом.
4️⃣Удаляем из набора данных наименее значимые признаки.

import pandas as pd

df = pd.read_csv('data.csv')

threshold = 0.8

corr_matrix = df.corr().abs()

target = 'Target'
to_drop = set()

for i in range(len(corr_matrix.columns)):
for j in range(i):
if corr_matrix.iloc[i, j] > threshold:
col1 = corr_matrix.columns[i]
col2 = corr_matrix.columns[j]
if corr_matrix[col1][target] > corr_matrix[col2][target]:
to_drop.add(col2)
else:
to_drop.add(col1)

df_reduced = df.drop(columns=to_drop)


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

Подробнее: тут, тут, и тут

@asisakov_channel

#ml #code
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12👍65



tgoop.com/asisakov_channel/528
Create:
Last Update:

Отбор признаков с применением корреляции

Если вы помните, то в одном из постов я описывал проверки на корреляцию как один из способов отбора признаков. Также вспомним, что например коэффициент корреляции Пирсона принимает значения от -1 до 1:

🔵Значение, близкое к 1, означает сильную положительную корреляцию
🔵Значение, близкое к -1, означает сильную отрицательную корреляцию
🔵Значение, близкое к 0, означает отсутствие линейной корреляции.

import pandas as pd

df = pd.read_csv('data.csv')

corr_matrix = df.corr()
corr_with_target = corr_matrix['target'].drop('target')

print(corr_with_target.sort_values(ascending=False))


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

Допустим, мы тут сократили количество признаков с 300 до 40 (не забыв предварительно взять абсолюты!). Надо ли копнуть еще глубже?

Да, поэтому попробуем обнаружить взаимосвязь между каждой парой признаков - то есть они могут нести одну и ту же информацию и быть мультиколлинеарными. Сделаем это при помощи следующего кода:

import seaborn as sns
import matplotlib.pyplot as plt

corr_matrix = df.corr()

plt.figure(figsize=(10,8))
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm', linewidths=.5)
plt.title('Correlation Matrix Heatmap')
plt.show()


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

1️⃣Вычисляем корреляционную матрицу для всех признаков.
2️⃣Определяем пары признаков с высокой корреляцией (например, выше 0.8).
3️⃣Для каждой пары оставляем признак с большей корреляцией с таргетом.
4️⃣Удаляем из набора данных наименее значимые признаки.

import pandas as pd

df = pd.read_csv('data.csv')

threshold = 0.8

corr_matrix = df.corr().abs()

target = 'Target'
to_drop = set()

for i in range(len(corr_matrix.columns)):
for j in range(i):
if corr_matrix.iloc[i, j] > threshold:
col1 = corr_matrix.columns[i]
col2 = corr_matrix.columns[j]
if corr_matrix[col1][target] > corr_matrix[col2][target]:
to_drop.add(col2)
else:
to_drop.add(col1)

df_reduced = df.drop(columns=to_drop)


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

Подробнее: тут, тут, и тут

@asisakov_channel

#ml #code

BY asisakov


Share with your friend now:
tgoop.com/asisakov_channel/528

View MORE
Open in Telegram


Telegram News

Date: |

The channel also called on people to turn out for illegal assemblies and listed the things that participants should bring along with them, showing prior planning was in the works for riots. The messages also incited people to hurl toxic gas bombs at police and MTR stations, he added. During the meeting with TSE Minister Edson Fachin, Perekopsky also mentioned the TSE channel on the platform as one of the firm's key success stories. Launched as part of the company's commitments to tackle the spread of fake news in Brazil, the verified channel has attracted more than 184,000 members in less than a month. How to build a private or public channel on Telegram? Just at this time, Bitcoin and the broader crypto market have dropped to new 2022 lows. The Bitcoin price has tanked 10 percent dropping to $20,000. On the other hand, the altcoin space is witnessing even more brutal correction. Bitcoin has dropped nearly 60 percent year-to-date and more than 70 percent since its all-time high in November 2021. "Doxxing content is forbidden on Telegram and our moderators routinely remove such content from around the world," said a spokesman for the messaging app, Remi Vaughn.
from us


Telegram asisakov
FROM American