Tabla de contenido
1. Introducción al experimento
1. Configurar el entorno virtual
2. Introducción a la versión de la biblioteca
0. Importar herramientas necesarias
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):
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...)
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_train
suma y_train
) y un conjunto de prueba ( X_test
suma 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
LabelEncoder
la 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_train
y las etiquetas del conjunto de entrenamientoy_hsic
en el modelo HSIC LASSO.hsic.input
Se utiliza para configurar datos de entrada y nombres de funciones.hsic.classification
Se 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
;
- Las funciones seleccionadas se guardan en
- Se almacenará
genes、score
en DataFrameres
.
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_test
hsic_x_train
hsic_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_pred
y 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_train
hsic_x_test
rf_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))