Visualice el espacio compuesto mediante la reducción de dimensionalidad de Fingerprint

2019/10/26

Visualicemos el espacio compuesto (espacio químico) basado en la estructura química utilizando el conjunto de datos compuestos que está abierto al público.

Motivación

Visualización del espacio compuesto
-¿Hay compuestos únicos en el conjunto de datos?
・ Qué tipo de compuesto contiene y cuánto
Te ayudará a comprender. Al crear modelos predictivos para QSAR y aprendizaje automático, puede determinar aproximadamente si sus datos tienen extrapolaciones.

方法

Cálculo de huellas dactilares

Al generar una huella digital para cada compuesto y reducir la dimensión, es posible trazar en un plano. Según el principio de propiedades similares de Johnson y Maggiora, "Los compuestos similares tienen propiedades similares", los compuestos con estructuras y propiedades similares deben distribuirse cerca unos de otros en un plano.

Para la huella dactilar utilizada para la visualización, pruebe la huella dactilar de Morgan y la huella dactilar RDkit.

Referencia: Huella digital disponible en RDkit

Método de reducción de dimensionalidad

Para reducir la dimensionalidad, intente utilizar el Análisis de componentes principales (PCA) y UMAP. El PCA se utiliza con mayor frecuencia, pero se comprime en un espacio dimensional más bajo en función de la linealidad de los datos, por lo que puede no ser adecuado para datos 0-1 como huellas dactilares.
Por otro lado, UMAP es uno de los métodos de reducción de dimensiones que considera componentes no lineales.La reducción de dimensionalidad como el t-SNE estándar del mismo método se puede completar varias veces más rápido, por lo que se puede utilizar para grandes conjuntos de datos.

Utilice el método kmeans y la agrupación espectral para la agrupación.
El método kmeans agrupa mediante la repetición de una serie de operaciones: (XNUMX) instalar agrupaciones al azar, (XNUMX) agregar puntos de datos cercanos para actualizar la posición del centro de gravedad y (XNUMX) encontrar el centro de gravedad nuevamente con los datos actualizados cerca. el centro de gravedad. Se sabe que los datos no lineales como la Luna y el rollo suizo no pueden clasificarse bien, pero Spectral Clustering parece ser capaz de manejar dichos datos. Incluso la hoja de trucos de scikit learn es una opción si el método kmeans no funciona.

Me gustaría combinar cada uno de ellos con el "método PCA x kmeans" que asume distribución normal y datos lineales y el "UMAP x Spectral Clustering" que admite datos no lineales.

Por cierto, también existe un método de agrupamiento de compuestos basado en el coeficiente de tanimoto (la similitud entre dos compuestos se expresa de 2 a 0. La misma estructura que 1), que a menudo se usa como índice de similitud de compuestos, pero esta vez lo probé. No es ...

Referencia: técnicas de reducción de dimensionalidad y trazado 2D para datos de alta dimensión
   Agrupación espectral (análisis de agrupaciones)

Visualicemos el espacio compuesto

Utilice Lipophilicity de Molecule net para el conjunto de datos.Aproximadamente 4200 compuestos contienen sus respectivos SMILES y logP experimental (índice de hidrofobicidad: coeficiente de partición octanol / agua).

Referencia:Lista de conjuntos de datos compuestos

# paquete importar importar pandas como pd importar numpy como np desde sklearn.cluster importar KMeans desde sklearn.decomposition importar PCA desde sklearn.cluster importar SpectralClustering importar umap desde rdkit importar Chem desde rdkit.Chem importar AllChem importar matplotlib.pyplot como plt% matplotlib en línea # leer conjunto de datos df = pd.read_csv ('Lipophilicity.csv') print (df.info ()) df.head (5)


RangeIndex: 4200 entradas, 0 a 4199
Columnas de datos (total 3 columnas):
CMPD_CHEMBLID 4200 objeto no nulo
exp 4200 no nulo float64
smiles 4200 objeto no nulo
dtypes: float64 (1), object (2) uso de memoria: 98.5+ KB Ninguno

conjunto de datos logP

 

#Morgan y RDkit Get Fingerprint mols = [Chem.MolFromSmiles (x) para x en df.smiles] morgan_fps = [AllChem.GetMorganFingerprintAsBitVect (x, 2, 1024) para x en moles] rdkit_fps = [Chem.RDKFingerSprint (x, fp = 1024) para x en moles] #almacenar huella digital en DF df_morgan_fps = pd.DataFrame (np.array (morgan_fps)) df_rdkit_fps = pd.DataFrame (np.array (rdkit_fps))

La huella dactilar de Morgan cuenta las subestructuras dentro de un radio determinado desde un átomo. Un algoritmo similar a la huella digital ECFP (Extended Connectivity Fingerprint), donde el radio 2 de Morgan corresponde a ECFP4.Aquí, calculamos la huella digital de radio = 2 bits.
La huella dactilar RDkit cuenta las estructuras parciales en función de la longitud del enlace en lugar del radio del átomo.Esto es similar a la huella dactilar de Daylight.De forma predeterminada, la longitud mínima de la ruta: 1 unión - la longitud máxima de la ruta: se consideran 7 combinaciones.

La huella dactilar obtenida esDado que el procesamiento posterior no se puede realizar como es con un objeto como, corríjalo en un marco de datos.
 

# kmeans clustering kmeans = KMeans (n_clusters = 8, n_jobs = -1) kmeans.fit (df_morgan_fps) # Reducción de dimensión con PCA pca = PCA (n_components = 2) decomp = pca.fit_transform (df_morgan_fps) x = decomp [:, 0 ] y = decomp [:, 1] # Visualización plt.figure (figsize = (15,5)) # Clústeres codificados por colores obtenidos por kmeans plt.subplot (1,2,1) plt.scatter (x, y), c = kmeans.labels_, alpha = 0.7) plt.title ("PCA: morgan_fps, cluster") plt.colorbar () # codificado por colores con logP plt.subplot (1,2,2) plt.scatter (x, y, c = df.exp, alpha = 0.7, cmap = 'primavera') plt.title ("PCA: morgan_fps, logP") plt.colorbar ()

El resultado de visualizar el espacio compuesto con la huella dactilar RDkit.

De manera similar, cambie la parte df_morgan_fps a df_rdkit_fps y visualícela con la huella dactilar RDkit.De alguna manera, la impresión de que la huella dactilar RDkit se proyecta más bellamente ↓

# RDkit Huellas digitales visualizadas con "UMAP x Spectral Clustering" sc = SpectralClustering (n_clusters = 50, affinity = 'near_neighbors', n_jobs = -1) sc.fit (df_rdkit_fps) embedding = umap.UMAP (n_neighbors = 50, n_components = 2, min_dist = 0.5) .fit_transform (df_rdkit_fps) x = incrustación [:, 0] y = incrustación [:, 1] fig = plt.figure (figsize = (15,5)) plt.subplot (1,2,1)) plt.scatter (x, y, c = sc.labels_, alpha = 0.7) plt.title ("rdkit_fps, SpectralCluster") plt.colorbar () plt.subplot (1,2,2) plt.scatter (x, y , c = df.exp, alpha = 0.7, cmap = 'primavera') plt.title ("rdkit_fps, logP") plt.colorbar ()

Siento que "UMAP x Spectral Clustering" está más densamente empaquetado con compuestos similares que "PCA x kmeans", pero cualquiera de los dos está bien.

En cuanto a logP, la relación entre la posición en el avión y el valor de la propiedad física es delicada.El autocodificador o aprendizaje supervisado parece ser mejor para graficar en un espacio bidimensional en una mejor correlación con las propiedades físicas y los valores de actividad de un compuesto, así que me gustaría probarlo pronto.