Table des matières
1. Introduction à l'expérience
1. Configurez l'environnement virtuel
2. Présentation de la version de la bibliothèque
0. Importer les outils nécessaires
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) :
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...)
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_train
sum y_train
) et un ensemble de test ( X_test
sum 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
LabelEncoder
le 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_train
et les étiquettes de l'ensemble d'entraînementy_hsic
dans le modèle HSIC LASSO.hsic.input
Utilisé pour définir les données d'entrée et les noms de fonctionnalitéshsic.classification
Utilisé 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 dans
score
;
- Les fonctionnalités sélectionnées sont enregistrées dans
- Sera
genes、score
stocké dans DataFrameres
.
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_test
hsic_x_train
hsic_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_pred
et 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_train
hsic_x_test
rf_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))