[Bioinformatique] Sélection de fonctionnalités à l'aide de la méthode HSIC LASSO

Table des matières

1. Introduction à l'expérience

2. Environnement expérimental

1. Configurez l'environnement virtuel

2. Présentation de la version de la bibliothèque

3. EDI

3. Contenu expérimental

0. Importer les outils nécessaires

1. Lire les données

2. Divisez l'ensemble de formation et l'ensemble de test

3. Effectuer la sélection des fonctionnalités HSIC LASSO

4. Extraction de fonctionnalités

5. Classification à l'aide de Random Forest (en utilisant toutes les fonctionnalités)

6. Classification à l'aide de Random Forest (caractéristiques sélectionnées à l'aide de HSIC) :

7. Intégration du code


1. Introduction à l'expérience

        Cette expérience implémente la méthode HSIC LASSO (critère d'indépendance Hilbert-Schmidt LASSO) pour la sélection des fonctionnalités et utilise un classificateur de forêt aléatoire pour classer le sous-ensemble de fonctionnalités sélectionné.

        La sélection des fonctionnalités est l'une des tâches importantes de l'apprentissage automatique, qui peut améliorer l'efficacité du modèle, réduire la charge de calcul et nous aider à comprendre les caractéristiques clés des données.

        HSIC LASSO est une méthode de mesure d'indépendance basée sur le noyau pour trouver des fonctionnalités non redondantes avec une forte dépendance statistique sur la valeur de sortie.

2. Environnement expérimental

    Cette série d'expériences utilise le framework d'apprentissage profond PyTorch, et les opérations pertinentes sont les suivantes (basées sur l'environnement de la série d'articles sur l'apprentissage profond) :

1. Configurez l'environnement virtuel

L'environnement de la série d'articles sur l'apprentissage profond

conda create -n DL python=3.7 
conda activate DL
pip install torch==1.8.1+cu102 torchvision==0.9.1+cu102 torchaudio==0.8.1 -f https://download.pytorch.org/whl/torch_stable.html
conda install matplotlib
conda install scikit-learn

Nouvel ajout

conda install pandas
conda install seaborn
conda install networkx
conda install statsmodels
pip install pyHSICLasso

Remarque : Mon environnement expérimental installe différentes bibliothèques dans l'ordre ci-dessus. Si vous souhaitez essayer de les installer ensemble (Dieu sait s'il y aura des problèmes)

2. Présentation de la version de la bibliothèque

progiciel Cette version expérimentale La dernière version actuellement
matplotlib 3.5.3 3.8.0
numpy 1.21.6 1.26.0
python 3.7.16
scikit-apprendre 0.22.1 1.3.0
torche 1.8.1+cu102 2.0.1
torcheaudio 0.8.1 2.0.2
vision de la torche 0.9.1+cu102 0.15.2

Nouveau

réseaux 2.6.3 3.1
pandas 1.2.3 2.1.1
pyHSICLase 1.4.2 1.4.2
né de la mer 0.12.2 0.13.0
modèles d'état 0.13.5 0.14.0

3. EDI

        Il est recommandé d'utiliser Pycharm (parmi eux, la bibliothèque pyHSICLasso a une erreur dans VScode, et aucune solution n'a encore été trouvée...)

Win11 installer Anaconda (2022.10) + pycharm (2022.3/2023.1.4) + configurer l'environnement virtuel_Blog de QomolangmaH - Blog CSDN https://blog.csdn.net/m0_63834988/article/details/128693741 icon-default.png?t=N7T8https://blog.csdn .net/ m0_63834988/article/détails/128693741

3. Contenu expérimental

0. Importer les outils nécessaires

import random
import pandas as pd
from pyHSICLasso import HSICLasso
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import train_test_split
from sklearn.metrics import confusion_matrix, classification_report
from sklearn.ensemble import RandomForestClassifier

1. Lire les données

data = pd.read_csv("cancer_subtype.csv")
x = data.iloc[:, :-1]
y = data.iloc[:, -1]

2. Divisez l'ensemble de formation et l'ensemble de test

X_train, X_test, y_train, y_test = train_test_split(x, y, test_size=0.3, random_state=10)

        Divisez l'ensemble de données en un ensemble d'entraînement ( X_trainsum y_train) et un ensemble de test ( X_testsum y_test). Parmi eux, l'ensemble de test représente 30 % du total des données.

3. Effectuer la sélection des fonctionnalités HSIC LASSO

random.seed(1)
le = LabelEncoder()
y_hsic = le.fit_transform(y_train)
x_hsic, fea_n = X_train.to_numpy(), X_train.columns.tolist()
hsic.input(x_hsic, y_hsic, featname=fea_n)
hsic.classification(200)
genes = hsic.get_features()
score = hsic.get_index_score()
res = pd.DataFrame([genes, score]).T
  • Définir des graines aléatoires pour garantir la répétabilité du processus aléatoire
  • Utilisez LabelEncoderle codage d'étiquette pour convertir la variable cible sous forme numérique.
  • La sélection des fonctionnalités est effectuée en saisissant les données X_trainet les étiquettes de l'ensemble d'entraînement y_hsicdans le modèle HSIC LASSO.
    • hsic.inputUtilisé pour définir les données d'entrée et les noms de fonctionnalités
    • hsic.classificationUtilisé pour exécuter l'algorithme HSIC LASSO pour la sélection des fonctionnalités
      • Les fonctionnalités sélectionnées sont enregistrées dans genes;
      • Les scores des fonctionnalités correspondants sont enregistrés dansscore ;
    • Sera genes、scorestocké dans DataFrame  res.

4. Extraction de fonctionnalités

hsic_x_train = X_train[res[0]]
hsic_x_test = X_test[res[0]]

        Selon l'index de fonctionnalités sélectionné par HSIC LASSO, les sous-ensembles de fonctionnalités correspondants sont extraits de l'ensemble d'apprentissage etX_train de l'ensemble de test d'origine et stockés respectivement dans et .X_testhsic_x_trainhsic_x_test

5. Classification à l'aide de Random Forest (en utilisant toutes les fonctionnalités)

rf_model = RandomForestClassifier(20)
rf_model.fit(X_train, y_train)
rf_pred = rf_model.predict(X_test)
print("RF all feature")
print(confusion_matrix(y_test, rf_pred))
print(classification_report(y_test, rf_pred, digits=5))

        Utilisez un classificateur de forêt aléatoire (RandomForestClassifier) ​​​​pour vous entraîner sur l'ensemble d'entraînement avec toutes les fonctionnalités et faire des prédictions sur l'ensemble de test. Les résultats de prédiction sont stockés rf_predet la matrice de confusion et le rapport de classification sont générés.

6. Classification à l'aide de Random Forest (caractéristiques sélectionnées à l'aide de HSIC) :

rf_hsic_model = RandomForestClassifier(20)
rf_hsic_model.fit(hsic_x_train, y_train)
rf_hsic_pred = rf_hsic_model.predict(hsic_x_test)
print("RF HSIC feature")
print(confusion_matrix(y_test, rf_hsic_pred))
print(classification_report(y_test, rf_hsic_pred, digits=5))

        Un classificateur de forêt aléatoire est formé sur le sous-ensemble de fonctionnalités sélectionné à l'aide du HSIC LASSO et des prédictions sont faites sur le sous-ensemble de fonctionnalités correspondant de l'ensemble de test. Les résultats de prédiction sont stockés et la matrice de confusion et le rapport de classification sont générés.hsic_x_trainhsic_x_testrf_hsic_pred

7. Intégration du code

# HSIC LASSO
# HSIC全称“Hilbert-Schmidt independence criterion”,“希尔伯特-施密特独立性指标”,跟互信息一样,它也可以用来衡量两个变量之间的独立性
# 核函数的特定选择,可以在基于核的独立性度量(如Hilbert-Schmidt独立性准则(HSIC))中找到对输出值具有很强统计依赖性的非冗余特征
# CIN 107 EBV 23 GS 50 MSI 47 normal 33
import random
import pandas as pd
from pyHSICLasso import HSICLasso
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import train_test_split
from sklearn.metrics import confusion_matrix, classification_report
from sklearn.ensemble import RandomForestClassifier

data = pd.read_csv("cancer_subtype.csv")
x = data.iloc[:, :-1]
y = data.iloc[:, -1]
X_train, X_test, y_train, y_test = train_test_split(x, y, test_size=0.3, random_state=10)

random.seed(1)

le = LabelEncoder()
hsic = HSICLasso()
y_hsic = le.fit_transform(y_train)
x_hsic, fea_n = X_train.to_numpy(), X_train.columns.tolist()


hsic.input(x_hsic, y_hsic, featname=fea_n)
hsic.classification(200)
genes = hsic.get_features()
score = hsic.get_index_score()
res = pd.DataFrame([genes, score]).T

hsic_x_train = X_train[res[0]]
hsic_x_test = X_test[res[0]]


rf_model = RandomForestClassifier(20)
rf_model.fit(X_train, y_train)
rf_pred = rf_model.predict(X_test)
print("RF all feature")
print(confusion_matrix(y_test, rf_pred))
print(classification_report(y_test, rf_pred, digits=5))


rf_hsic_model = RandomForestClassifier(20)
rf_hsic_model.fit(hsic_x_train, y_train)
rf_hsic_pred = rf_hsic_model.predict(hsic_x_test)
print("RF HSIC feature")
print(confusion_matrix(y_test, rf_hsic_pred))
print(classification_report(y_test, rf_hsic_pred, digits=5))

Je suppose que tu aimes

Origine blog.csdn.net/m0_63834988/article/details/133443975
conseillé
Classement