[Bioinformática] Selección de funciones mediante el método HSIC LASSO

Tabla de contenido

1. Introducción al experimento

2. Entorno experimental

1. Configurar el entorno virtual

2. Introducción a la versión de la biblioteca

3. IDE

3. Contenido experimental

0. Importar herramientas necesarias

1. Leer datos

2. Divida el conjunto de entrenamiento y el conjunto de prueba.

3. Realice la selección de funciones HSIC LASSO

4. Extracción de características

5. Clasificación mediante Random Forest (utilizando todas las funciones)

6. Clasificación mediante Random Forest (características seleccionadas mediante HSIC):

7. Integración de código


1. Introducción al experimento

        Este experimento implementa el método HSIC LASSO (criterio de independencia de Hilbert-Schmidt LASSO) para la selección de características y utiliza un clasificador de bosque aleatorio para clasificar el subconjunto de características seleccionado.

        La selección de características es una de las tareas importantes en el aprendizaje automático, que puede mejorar la efectividad del modelo, reducir la sobrecarga computacional y ayudarnos a comprender las características clave de los datos.

        HSIC LASSO es un método de medida de independencia basado en kernel para encontrar características no redundantes con una fuerte dependencia estadística del valor de salida.

2. Entorno experimental

    Esta serie de experimentos utiliza el marco de aprendizaje profundo de PyTorch y las operaciones relevantes son las siguientes (según el entorno de la serie de artículos de aprendizaje profundo):

1. Configurar el entorno virtual

El entorno de la serie de artículos de aprendizaje profundo.

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

Nueva adquisición

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

Nota: Mi entorno experimental instala varias bibliotecas en el orden anterior, si desea intentar instalarlas juntas (Dios sabe si habrá algún problema)

2. Introducción a la versión de la biblioteca

paquete de software Esta versión experimental La última versión actualmente
matplotlib 3.5.3 3.8.0
engordado 1.21.6 1.26.0
pitón 3.7.16
aprendizaje-scikit 0.22.1 1.3.0
antorcha 1.8.1+cu102 2.0.1
antorchaaudio 0.8.1 2.0.2
visión de antorcha 0.9.1+cu102 0.15.2

Nuevo

redx 2.6.3 3.1
pandas 1.2.3 2.1.1
pyHSICLase 1.4.2 1.4.2
nacido en el mar 0.12.2 0.13.0
modelos estatales 0.13.5 0.14.0

3. IDE

        Se recomienda utilizar Pycharm (entre ellos, la biblioteca pyHSICLasso tiene un error en VScode y aún no se ha encontrado una solución...)

Win11 instala Anaconda (2022.10) + pycharm (2022.3/2023.1.4) + configura el entorno virtual_blog de QomolangmaH - blog CSDN https://blog.csdn.net/m0_63834988/article/details/128693741 icono-default.png?t=N7T8https://blog.csdn .net/ m0_63834988/article/details/128693741

3. Contenido experimental

0. Importar herramientas necesarias

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. Leer datos

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

2. Divida el conjunto de entrenamiento y el conjunto de prueba.

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

        Divida el conjunto de datos en un conjunto de entrenamiento ( X_trainsuma y_train) y un conjunto de prueba ( X_testsuma y_test). Entre ellos, el conjunto de prueba representa el 30% de los datos totales.

3. Realice la selección de funciones 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
  • Establezca semillas aleatorias para garantizar la repetibilidad del proceso aleatorio.
  • Utilice LabelEncoderla codificación de etiquetas para convertir la variable de destino en formato numérico.
  • La selección de características se realiza ingresando los datos X_trainy las etiquetas del conjunto de entrenamiento y_hsicen el modelo HSIC LASSO.
    • hsic.inputSe utiliza para configurar datos de entrada y nombres de funciones.
    • hsic.classificationSe utiliza para ejecutar el algoritmo HSIC LASSO para la selección de funciones.
      • Las funciones seleccionadas se guardan en genes;
      • Las puntuaciones de características correspondientes se guardan en score;
    • Se almacenará genes、scoreen DataFrame  res.

4. Extracción de características

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

        De acuerdo con el índice de características seleccionado por HSIC LASSO, los subconjuntos de características correspondientes se extraen del conjunto de entrenamiento yX_train del conjunto de prueba originales y se almacenan en y respectivamente .X_testhsic_x_trainhsic_x_test

5. Clasificación mediante Random Forest (utilizando todas las funciones)

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))

        Utilice un clasificador de bosque aleatorio (RandomForestClassifier) ​​para entrenar en el conjunto de entrenamiento con todas las funciones y hacer predicciones en el conjunto de prueba. Los resultados de la predicción se almacenan rf_predy se generan la matriz de confusión y el informe de clasificación.

6. Clasificación mediante Random Forest (características seleccionadas mediante 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))

Se entrena         un clasificador de bosque aleatorio en el subconjunto de características seleccionado usando HSIC LASSO y se realizan predicciones en el subconjunto de características correspondiente del conjunto de prueba. Los resultados de la predicción se almacenan y se generan la matriz de confusión y el informe de clasificación.hsic_x_trainhsic_x_testrf_hsic_pred

7. Integración de código

# 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))

Supongo que te gusta

Origin blog.csdn.net/m0_63834988/article/details/133443975
Recomendado
Clasificación