25 сСнтября 2021

πŸ“Š ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ ΠΈ ΠΎΡ‚Π±ΠΎΡ€ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠ². Π§Π°ΡΡ‚ΡŒ 2: feature selection

Kaggle expertβš›οΈ ΠŸΠΈΡˆΡƒ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°Ρ… ΠΈ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ°Ρ… Π² сфСрС Machine Learning.
ΠœΡ‹ ΡƒΠΆΠ΅ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΈ ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΎΠ½ΠΈ Π²Π°ΠΆΠ½Ρ‹ Π² модСлях машинного обучСния. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ послС построСния β€œΡ„ΠΈΡ‡β€ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΎΠΉ – ΠΈΡ… ΠΎΡ‚Π±ΠΎΡ€ΠΎΠΌ.
πŸ“Š ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ ΠΈ ΠΎΡ‚Π±ΠΎΡ€ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠ². Π§Π°ΡΡ‚ΡŒ 2: feature selection

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΡ‚Π±ΠΎΡ€ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠ²?

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π»ΠΈΡΡŒ с построСниСм ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠ². Π’ нашСй Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π΅ΡΡ‚ΡŒ свСТиС сгСнСрированныС β€œΡ„ΠΈΡ‡ΠΈβ€, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ исходныС Π΄Π°Π½Π½Ρ‹Π΅. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Π°ΠΆΠ½Ρ‹ΠΌ ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠΌ являСтся Ρ‚ΠΎ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠ· Π½ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ сущСствуСт бСсконСчноС число Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ.

Β«ΠŸΡ€ΠΎΠ³ΠΎΠ½ΠΊΠ°Β» всСх ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠ² Π² ΠΌΠΎΠ΄Π΅Π»ΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠ· Π½ΠΈΡ… Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ – плохая идСя. На самом Π΄Π΅Π»Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΏΠ»ΠΎΡ…ΠΎ, ΠΊΠΎΠ³Π΄Π° Π² Π½ΠΈΡ… ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ слишком ΠΌΠ½ΠΎΠ³ΠΎ β€œΡ„ΠΈΡ‡β€. Как Ρ€Π΅ΡˆΠΈΡ‚ΡŒ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ? ΠŸΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΎΡ‚Π±ΠΎΡ€Π° ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠ².

ΠžΡ‚Π±ΠΎΡ€ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠ² (feature selection) – это ΠΎΡ†Π΅Π½ΠΊΠ° ваТности Ρ‚ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠ° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² машинного обучСния ΠΈ отсСчСниС Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Ρ….

БущСствуСт масса Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ Π½Π°Π±ΠΎΡ€ со слишком большим количСством ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠ² Π² управляСмоС подмноТСство. Как ΠΈ Π² случаС с построСниСм ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠ², для Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ Ρ€Π°Π·Π½Ρ‹Π΅ способы. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, ΠΏΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ наши Ρ†Π΅Π»ΠΈ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ с ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΌ датасСтом.

Π’Ρ‹Π±ΠΎΡ€ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠ² ΠΈΠ· мноТСства ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… – нСпростая Π·Π°Π΄Π°Ρ‡Π°. Π‘ΠΎΠ»ΡŒΡˆΠΎΠ΅ ΠΈΡ… количСство Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ врСмя вычислСний, ΠΊ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅, появляСтся ΡƒΠ³Ρ€ΠΎΠ·Π° пСрСобучСния.

Для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ сущСствуСт нСсколько ΠΎΠ±Ρ‰ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ относятся ΠΊ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉ.

1. ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ (filter methods)

Π’Ρ‹Π±ΠΈΡ€Π°ΡŽΡ‚ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ свойства ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠ² – ΠΎΠ½ΠΈ быстрСС ΠΈ ΠΌΠ΅Π½Π΅Π΅ Π·Π°Ρ‚Ρ€Π°Ρ‚Π½Ρ‹ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния вычислСний, Ρ‡Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹-ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ. ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ большой размСрности Π² Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ дСшСвлС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ.

Π‘Π±ΠΎΡ€ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ (Information Gain, IG)

ВычисляСт ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠ΅ энтропии Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ прСобразования Π½Π°Π±ΠΎΡ€Π° Π΄Π°Π½Π½Ρ‹Ρ…. Π•Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΠΎΡ‚Π±ΠΎΡ€Π° ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠ² ΠΏΡƒΡ‚Π΅ΠΌ ΠΎΡ†Π΅Π½ΠΊΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ прироста ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² контСкстС Ρ†Π΅Π»Π΅Π²ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.

        import pandas as pd
import numpy as np
from sklearn.feature_selection import mutual_info_classif
import matplotlib.pyplot as plt

importances = mutual_info_classif(X, y)
# Π“Π΄Π΅ data - ваш датасСт; X, y – Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ соотвСтствСнно
feature_importances = pd.Series(importances, data.columns[0:len(data.columns)-1])
feature_importances.plot(kind='barh', color='teal')
plt.show()
    

ΠšΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΉ Ρ…ΠΈ-ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ (Chi-square Test)

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠ² Π² датасСтС. ΠœΡ‹ вычисляСм Ρ…ΠΈ-ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠΌ ΠΈ Ρ†Π΅Π»ΡŒΡŽ, послС Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠ΅ количСство β€œΡ„ΠΈΡ‡β€ с Π»ΡƒΡ‡ΡˆΠΈΠΌΠΈ показатСлями. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΉ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ связи ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ функциями Π² Π½Π°Π±ΠΎΡ€Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ условия: ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹Π±ΠΈΡ€Π°ΡŽΡ‚ΡΡ нСзависимо, ΠΈ частота Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ > 5.

        import pandas as pd
import numpy as np
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2

# ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π² ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΡƒΡ‚Π΅ΠΌ прСобразования Π² Ρ†Π΅Π»Ρ‹Π΅ числа.
# Π“Π΄Π΅ X, y - Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ соотвСтствСнно.
X_categorical = X.astype(int)

# Π’Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ 3 ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠ° с Π½Π°ΠΈΠ²Ρ‹ΡΡˆΠΈΠΌ "Ρ…ΠΈ-ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚".
chi2_features = SelectKBest(chi2, k = 3)
X_kbest_features = chi2_features.fit_transform(X_categorical, y)

# Π’Ρ‹Π²ΠΎΠ΄ "Π΄ΠΎ ΠΈ послС"
print("ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠ² Π΄ΠΎ прСобразования:", X_categorical.shape[1])
print("ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠ² послС прСобразования:", X_kbest_features.shape[1])
    

ΠšΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΉ Π€ΠΈΡˆΠ΅Ρ€Π° (F-тСст)

ΠšΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΉ Π€ΠΈΡˆΠ΅Ρ€Π° – ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Π²Ρ‹Π±ΠΎΡ€Π° ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠ². Алгоритм, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π°Π½Π³ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π½Π° основС ΠΎΡ†Π΅Π½ΠΊΠΈ критСрия Π² порядкС убывания, послС Ρ‡Π΅Π³ΠΎ ΡƒΠΆΠ΅ слСдуСт ΠΈΡ… ΠΎΡ‚Π±ΠΎΡ€.

        import pandas as pd
import numpy as np
from skfeature.function.similarity_based import fisher_score
import matplotlib.pyplot as plt

# ВычисляСм ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΉ
# Π“Π΄Π΅ X, y - Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ соотвСтствСнно.
ranks = fisher_score.fisher_score(X, y)

# Π”Π΅Π»Π°Π΅ΠΌ Π³Ρ€Π°Ρ„ΠΈΠΊ Π½Π°ΡˆΠΈΡ… "Ρ„ΠΈΡ‡"
# Π“Π΄Π΅ data - ваш датасСт
feature_importances = pd.Series(ranks, data.columns[0:len(data.columns)-1])
feature_importances.plot(kind='barh', color='teal')
plt.show()
    

ΠšΠΎΡΡ„Ρ„ΠΈΡ†ΠΈΠ΅Π½Ρ‚ коррСляции

ΠšΠΎΡ€Ρ€Π΅Π»ΡΡ†ΠΈΡ – это ΠΌΠ΅Ρ€Π° Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ связи Π΄Π²ΡƒΡ… ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. ΠŸΡ€ΠΈ Π΅Ρ‘ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€Π΅Π΄ΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ‡Π΅Ρ€Π΅Π· Π΄Ρ€ΡƒΠ³ΡƒΡŽ. Π›ΠΎΠ³ΠΈΠΊΠ° использования этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° для Π²Ρ‹Π±ΠΎΡ€Π° характСристик Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ β€œΡ…ΠΎΡ€ΠΎΡˆΠΈΠ΅β€ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ сильно ΠΊΠΎΡ€Ρ€Π΅Π»ΠΈΡ€ΡƒΡŽΡ‚ с нашСй Ρ†Π΅Π»ΡŒΡŽ.

Π‘Ρ‚ΠΎΠΈΡ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΊΠΎΡ€Ρ€Π΅Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с Ρ†Π΅Π»Π΅Π²Ρ‹ΠΌ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ, Π½ΠΎ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ собой. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½ΠΈΠΆΠ΅ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΡ€Ρ€Π΅Π»ΡΡ†ΠΈΡŽ ΠŸΠΈΡ€ΡΠΎΠ½Π°.

        import seaborn as sns
import matplotlib.pyplot as plt

# ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° коррСляции
# Π“Π΄Π΅ data - ваш датасСт
correlation_matrix = data.corr()

# Π’Ρ‹Π²ΠΎΠ΄ΠΈΠΌ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΈ Π½Π° Ρ‚Π΅ΠΏΠ»ΠΎΠ²ΡƒΡŽ ΠΊΠ°Ρ€Ρ‚Ρƒ
plt.figure(figsize= (10, 6))
sns.heatmap(correlation_matrix, annot = True)
    

ΠΠ±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠ΅ ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅ (Mean Absolute Difference, MAD)

Π­Ρ‚Π° Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ° позволяСт Π½Π°ΠΌ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠ΅ ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅ ΠΎΡ‚ срСднСго.

        import pandas as pd
import numpy as np
import matplotlib as plt
# ВычисляСм MAD
# Π“Π΄Π΅ X - Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅
mean_absolute_difference = np.sum(np.abs(X - np.mean(X, axis = 0)), axis = 0) / X.shape[0]

# Наш Π³Ρ€Π°Ρ„ΠΈΠΊ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠ²
plt.bar(np.arange(X.shape[1]), mean_absolute_difference, color = 'teal')
    

2. ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠΈ (wrapper methods)

ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ этих ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² – поиск всСх Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… подмноТСств ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠ² ΠΈ ΠΎΡ†Π΅Π½ΠΊΠ° ΠΈΡ… качСства ΠΏΡƒΡ‚Π΅ΠΌ β€œΠΏΡ€ΠΎΠ³ΠΎΠ½ΠΊΠΈβ€ Ρ‡Π΅Ρ€Π΅Π· модСль.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ Π²Ρ‹Π±ΠΎΡ€Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ основан Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅ машинного обучСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ. Он слСдуСт ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρƒ ΠΆΠ°Π΄Π½ΠΎΠ³ΠΎ поиска, оцСнивая всС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΡŽ. ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ Π»ΡƒΡ‡ΡˆΡƒΡŽ Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ прогнозирования Ρ‡Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ.

ΠŸΡ€ΡΠΌΠΎΠΉ ΠΎΡ‚Π±ΠΎΡ€ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠ²

Π­Ρ‚ΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ прямолинСйный ΠΌΠ΅Ρ‚ΠΎΠ΄, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΡ‹ Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΠΌ с Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ эффСктивной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ Ρ†Π΅Π»ΠΈ. Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, которая Π΄Π°Π΅Ρ‚ Π»ΡƒΡ‡ΡˆΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π² сочСтании с ΠΏΠ΅Ρ€Π²ΠΎΠΉ. Π­Ρ‚ΠΎΡ‚ процСсс продолТаСтся Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ достигнут Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΉ.

        from sklearn.linear_model import LogisticRegression
from mlxtend.feature_selection import SequentialFeatureSelector
 
lr = LogisticRegression(class_weight = 'balanced', solver = 'lbfgs', random_state=42, n_jobs=-1, max_iter=50e)
ffs = SequentialFeatureSelector(lr, k_features='best', forward = True, n_jobs=-1)
 
ffs.fit(X, Y)
# X, y – Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ соотвСтствСнно.
# X_train – Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ с ΠΎΠ±ΡƒΡ‡Π°ΡŽΡ‰Π΅ΠΉΡΡ Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ,
# y_pred – Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΠΈΠΊΡ‚ΠΎΡ€Π°
features = list(ffs.k_feature_names_)
features = list(map(int, features))
y_pred = lr.predict(X_train[features])
    

ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΡ‚Π±ΠΎΡ€ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠ²

Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ прямо ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ прямого Π²Ρ‹Π±ΠΎΡ€Π° характСристик. Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΠΌ со всСх доступных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ строим модСль. Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΈΠ· ΠΌΠΎΠ΄Π΅Π»ΠΈ, которая Π΄Π°Π΅Ρ‚ Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠ΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ€Ρ‹ ΠΎΡ†Π΅Π½ΠΊΠΈ. Π­Ρ‚ΠΎΡ‚ процСсс продолТаСтся Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ достигнут Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΉ.

        from sklearn.linear_model import LogisticRegression
from mlxtend.feature_selection import SequentialFeatureSelector

lr = LogisticRegression(class_weight = 'balanced', solver = 'lbfgs', random_state=42, n_jobs=-1, max_iter=50e)
lr.fit(X, y)

bfs = SequentialFeatureSelector(lr, k_features='best', forward = False, n_jobs=-1)
bfs.fit(X, y)
features = list(bfs.k_feature_names_)
features = list(map(int, features))
lr.fit(X_train[features], y_train)
y_pred = lr.predict(x_train[features])
    

Π˜ΡΡ‡Π΅Ρ€ΠΏΡ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Π²Ρ‹Π±ΠΎΡ€ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠ²

Π­Ρ‚ΠΎ самый Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²Ρ‹Π±ΠΎΡ€Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΠ· всСх ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ…. Π•Π³ΠΎ ΡΡƒΡ‚ΡŒ – ΠΎΡ†Π΅Π½ΠΊΠ° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ подмноТСства Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π°. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ пропускаСт всС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ‡Π΅Ρ€Π΅Π· Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ эффСктивноС подмноТСство.

        from mlxtend.feature_selection import ExhaustiveFeatureSelector
from sklearn.ensemble import RandomForestClassifier

# создаСм ExhaustiveFeatureSeLlector ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.
efs = ExhaustiveFeatureSelector(RandomForestClassifier(),
        min_features=4,
        max_features=8,
        scoring='roc_auc',
        cv=2)

efs = efs.fit(X, Y)

# Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΈ
selected_features = X_train.columns[list(efs.best_idx_)]
print(selected_features)

# Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Ρ„ΠΈΠ½Π°Π»ΡŒΠ½ΡƒΡŽ ΠΎΡ†Π΅Π½ΠΊΡƒ прогнозирования.
print(efs.best_score_)
    

РСкурсивноС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠ²

Π‘Π½Π°Ρ‡Π°Π»Π° модСль обучаСтся Π½Π° Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ Π²Ρ‹Π±ΠΎΡ€ΠΊΠ΅ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠ², ΠΈ Π²Π°ΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ опрСдСляСтся Π»ΠΈΠ±ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° coef_ ΠΈΠ»ΠΈ feature_importances_. Π—Π°Ρ‚Π΅ΠΌ Π½Π°ΠΈΠΌΠ΅Π½Π΅Π΅ Π²Π°ΠΆΠ½Ρ‹Π΅ β€œΡ„ΠΈΡ‡ΠΈβ€ ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ ΠΈΠ· Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Π½Π°Π±ΠΎΡ€Π°. ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° рСкурсивно повторяСтся для сокращСнного Π½Π°Π±ΠΎΡ€Π° Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ достигнуто ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠ΅ количСство ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠ² для Π²Ρ‹Π±ΠΎΡ€Π°.

        from sklearn.linear_model import LogisticRegression
from sklearn.feature_selection import RFE

lr = LogisticRegression(class_weight = 'balanced', solver = 'lbfgs', random_state=42, n_jobs=-1, max_iter=50e)

rfe = RFE(lr, n_features_to_select=7)
rfe.fit(X_train, y_train)
# X_train, y_train - Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ с ΠΎΠ±ΡƒΡ‡Π°ΡŽΡ‰Π΅ΠΉ Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ соотвСтствСнно.
y_pred = rfe.predict(X_train)
    

3. ВстроСнныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ (embedded methods)

Π­Ρ‚ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π² сСбя прСимущСства ΠΏΠ΅Ρ€Π²Ρ‹Ρ… Π΄Π²ΡƒΡ…, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°ΡŽΡ‚ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹. ΠžΡ‚Π»ΠΈΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ встроСнных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² являСтся ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ β€œΡ„ΠΈΡ‡β€ Π½Π° этапС ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ.

РСгуляризация LASSO (L1)

РСгуляризация состоит Π² Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ ΡˆΡ‚Ρ€Π°Ρ„Π° (penalty) ΠΊ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π²ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΠ΅ Ρ‡Ρ€Π΅Π·ΠΌΠ΅Ρ€Π½ΠΎΠΉ ΠΏΠΎΠ΄Π³ΠΎΠ½ΠΊΠΈ. ΠŸΡ€ΠΈ рСгуляризации Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΡˆΡ‚Ρ€Π°Ρ„ примСняСтся ΠΊ коэффициСнтам, ΡƒΠΌΠ½ΠΎΠΆΠ°ΡŽΡ‰ΠΈΠΌ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΏΡ€Π΅Π΄ΠΈΠΊΡ‚ΠΎΡ€ΠΎΠ². Lasso-рСгуляризация ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ свойством, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΌ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ коэффициСнты Π΄ΠΎ нуля. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‚Π°ΠΊΠΈΠ΅ β€œΡ„ΠΈΡ‡ΠΈβ€ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ просто ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΈΠ· ΠΌΠΎΠ΄Π΅Π»ΠΈ.

        from sklearn.linear_model import LogisticRegression
from sklearn.feature_selection import SelectFromModel

# УстанавливаСм наш ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ рСгуляризации C=1
logistic = LogisticRegression(C=1, penalty="l1", solver='liblinear', random_state=7).fit(X, y)
# Π“Π΄Π΅ X, y - Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ соотвСтствСнно.
model = SelectFromModel(logistic, prefit=True)

X_new = model.transform(X)

# Π’Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ Π½ΡƒΠΆΠ½Ρ‹Π΅ Π½Π°ΠΌ столбцы ΠΈΠ· датасСта Π±Π΅Π· Π½ΡƒΠ»Π΅Π²Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…
# Π“Π΄Π΅ β€œselected_features” - ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Π΅ Π½Π°ΠΌΠΈ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΈ (см. ΠΏΠΎ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ)
selected_columns = selected_features.columns[selected_features.var() != 0]
print(selected_columns)

    

ΠœΠ΅Ρ‚ΠΎΠ΄ с использованиСм Π‘Π»ΡƒΡ‡Π°ΠΉΠ½ΠΎΠ³ΠΎ ЛСса (Random Forest Importance)

Π‘Ρ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΠΈ Π½Π° основС Π΄Π΅Ρ€Π΅Π²Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ случайными лСсами, СстСствСнным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Ρ€Π°Π½ΠΆΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΏΠΎ Ρ‚ΠΎΠΌΡƒ, насколько Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΎΠ½ΠΈ ΡƒΠ»ΡƒΡ‡ΡˆΠ°ΡŽΡ‚ чистоту ΠΌΠΎΠ΄Π΅Π»ΠΈ Π² ΠΏΠ»Π°Π½Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, β€œΠΎΠ±Ρ€Π΅Π·Π°Ρβ€ Π΄Π΅Ρ€Π΅Π²ΡŒΡ Π½ΠΈΠΆΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ коэффициСнта, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½Ρ‹Π΅ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΈ.

        import numpy as np
import pandas as pd
from sklearn.ensemble import RandomForestClassifier

# создаСм случайноС Π΄Π΅Ρ€Π΅Π²ΠΎ с вашими Π³ΠΈΠΏΠ΅Ρ€ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ
model = RandomForestClassifier(n_estimators=340)

# ΠžΠ±ΡƒΡ‡Π°Π΅ΠΌ модСль Π½Π° вашСй Π²Ρ‹Π±ΠΎΡ€ΠΊΠ΅; Π“Π΄Π΅ X, y - Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ соотвСтствСнно.
model.fit(X, y)

# ΠŸΠΎΠ΄Π±ΠΈΡ€Π°Π΅ΠΌ самыС Π²Π°ΠΆΠ½Ρ‹Π΅ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΈ
importances = model.feature_importances_

# Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ датасСт для Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ
final_df = pd.DataFrame({"Features" : pd.DataFrame(X).columns, "Importances" : importances})
final_df.set_index('Importances')

# Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ ΠΈΡ… ΠΏΠΎ Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°Π½ΠΈΡŽ для Π»ΡƒΡ‡ΡˆΠ΅ΠΉ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ
final_df = final_df.sort_values('Importances')

# Π’Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π½Π° Π³Ρ€Π°Ρ„ΠΈΠΊ
final_df.plot.bar(color = 'teal')
    

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π­Ρ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΎΡ‚Π±ΠΎΡ€ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… β€œΡ„ΠΈΡ‡β€ для ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π½Π°ΠΈΠ±ΠΎΠ»ΡŒΡˆΠ΅ΠΌΡƒ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Π­Ρ‚ΠΎ Ρ‚Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, Π·Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π΄Π°Ρ‚Π°-сайСнтисты проводят Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. РазумССтся, Π±Π΅Π· построСния ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠ² (feature engineering) Ρƒ нас Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° для дальнСйшСго ΠΎΡ‚Π±ΠΎΡ€Π°.

ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Π΅ прСобразования зависят ΠΎΡ‚ ΠΌΠ½ΠΎΠ³ΠΈΡ… Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ²: Ρ‚ΠΈΠΏΠ° ΠΈ структуры Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΡ… объСма. НС стоит Ρ‚Π°ΠΊΠΆΠ΅ Π·Π°Π±Ρ‹Π²Π°Ρ‚ΡŒ ΠΎ доступных рСсурсах нашСго ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° ΠΈΠ»ΠΈ ΠΎΠ±Π»Π°ΠΊΠ°. Взяв Π½Π° Π²ΠΎΠΎΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠ±Π΅ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ ΠΈΠ· этого Ρ†ΠΈΠΊΠ»Π° статСй, Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ сСбя Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΡƒΠ²Π΅Ρ€Π΅Π½Π½Π΅Π΅ Π² ΠΌΠΈΡ€Π΅ Π½Π°ΡƒΠΊΠΈ ΠΎ Π΄Π°Π½Π½Ρ‹Ρ….


ΠœΠ•Π ΠžΠŸΠ Π˜Π―Π’Π˜Π―

ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ

Π’ΠΠšΠΠΠ‘Π˜Π˜

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ вакансию
Java Team Lead
Москва, ΠΏΠΎ ΠΈΡ‚ΠΎΠ³Π°ΠΌ собСсСдования
Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π‘#
ΠΎΡ‚ 200000 RUB Π΄ΠΎ 400000 RUB

Π›Π£Π§Π¨Π˜Π• БВАВЬИ ПО Π’Π•ΠœΠ•