Dans la continuité de Matplotlib appris par chimioinfomatique, "Matplotlib" est l'une des bibliothèques représentatives de Python avec le thème de la lipidomique (analyse complète des lipides). Je vais vous expliquer. Nous expliquerons principalement des exemples pratiques de chimioinfomatique, donc si vous souhaitez vérifier les bases, veuillez lire l'article suivant avant de lire cet article.
Les chercheurs des sociétés pharmaceutiques ont résumé scikit-learn
scikit-learn est une bibliothèque pour l'apprentissage automatique.
Ici, envisagez de prédire le temps de rétention (RT) en chromatographie liquide (LC) à partir des propriétés physiques d'un composé en utilisant la régression des moindres carrés partiels (PLS). Je vais.
Tout d'abord, créez un ensemble de données pour l'apprentissage automatique.
import pandas as pd
params_fatty_acids = ['Heavy atoms', 'Rotatable Bonds', 'van der Waals Molecular Volume', 'logP', 'Molar Refractivity']
lauric = [14, 10, 231.10, 3.99, 59.48]
myristic = [16, 12, 265.70, 4.77, 68.71]
palmitic = [18, 14, 300.30, 5.55, 77.95]
palmitoleic = [18, 13, 297.66, 5.33, 77.85]
stearic = [20, 16, 334.90, 6.33, 87.18]
oleic = [20, 15, 332.26, 6.11, 87.09]
linoleic = [20, 14, 329.62, 5.88, 86.99]
linolenic = [20, 13, 326.98, 5.66, 86.90]
stearidonic = [20, 12, 324.34, 5.44, 86.81]
arachidic = [22, 18, 369.50, 7.11, 96.42]
bishomo_gamma_linolenic = [22, 15, 361.58, 6.44, 96.13]
arachidonic = [22, 14, 358.94, 6.22, 96.04]
eicosapentaenoic = [22, 13, 356.30, 5.99, 95.95]
behenic = [24, 20, 404.10, 7.89, 105.65]
adrenic = [24, 16, 393.54, 7.00, 105.27]
docosapentaenoic = [24, 15, 390.90, 6.77, 105.18]
docosahexaenoic = [24, 14, 388.26, 6.55, 105.09]
df_fatty_acids = pd.DataFrame([lauric, myristic, palmitic, palmitoleic, stearic, oleic, linoleic, linolenic, stearidonic, arachidic, bishomo_gamma_linolenic, arachidonic, eicosapentaenoic, behenic, adrenic, docosapentaenoic, docosahexaenoic], columns=params_fatty_acids)
df_fatty_acids['Experimental Retention Time (min)'] = [4.53, 7.52, 11.02, 10.59, 14.45, 11.86, 9.76, 8.31, 6.71, 17.52, 11.20, 9.96, 8.27, 20.40, 12.75, 11.52, 9.84]
print(df_fatty_acids)
Ici, la liste des noms de paramètres de propriétés physiques utilisés comme variables explicatives est params_fatty_acids
.
Chaque valeur de propriété fait référence aux informations stockées dans la base de données de LIP ID MAPS.
En outre, RT est publié sur le site Web de PRIMe de l'Institut de recherche physique et chimique [données RT en phase inverse LC](http: //prime.psc). .riken.jp / Metabolomics_Software / MrmDatabase / Detail% 20of% 20LCQqQMS% 20method% 20 (ODS-lipids) .xlsx) est référencé.
De plus, en réalité, je pense que vous lisez souvent des fichiers CSV, etc. avec pandas.read_csv
etc.
En outre, un prétraitement des données tel que la saisie de la valeur manquante est souvent nécessaire.
Ensuite, nous allons construire un modèle de prédiction et calculer la valeur de prédiction à l'aide du modèle.
from sklearn.cross_decomposition import PLSRegression
X = df_fatty_acids[params_fatty_acids] #Variable explicative
y = df_fatty_acids['Experimental Retention Time (min)'] #Variable objective
pls_rt = PLSRegression()
pls_rt.fit(X, y) #Construire un modèle de prédiction PLS
y_pred = pls_rt.predict(X) #Calculer la valeur prévue
df_fatty_acids['Predicted Retention Time (min)'] = y_pred
df_fatty_acids['Diff (min)'] = df_fatty_acids['Predicted Retention Time (min)'] - df_fatty_acids['Experimental Retention Time (min)']
df_fatty_acids['Accuracy (%)'] = (df_fatty_acids['Diff (min)'] / df_fatty_acids['Experimental Retention Time (min)']) * 100
print(df_fatty_acids)
La relation entre la valeur mesurée et la valeur prévue est indiquée ci-dessous.
%matplotlib inline
import matplotlib.pyplot as plt
plt.scatter(y, y_pred)
plt.xlabel('Experimental Retention Time (min)')
plt.ylabel('Predicted Retention Time (min)')
plt.savefig('rts_fatty_acids.png')
plt.show()
Dans ces données, il semble que la valeur mesurée et la valeur prédite correspondent bien.
Vous pouvez vérifier le degré d'ajustement du modèle construit avec r2_score
.
from sklearn.metrics import r2_score
print(r2_score(y, y_pred))
r2_score
prend une valeur entre 0 et 1, et plus il est proche de 1, meilleures sont les valeurs mesurées et prédites.
Dans ces données, r2_score
est une valeur supérieure à 0,98, ce qui est un assez bon modèle.
Cette fois, nous avons utilisé 5 types de paramètres de propriétés physiques pour prédire la RT, mais voyons lesquels d'entre eux contribuent de manière significative à la prédiction.
print(pls_rt.coef_)
À partir de ce résultat, on peut voir que dans ces données, le coefficient (valeur absolue) pour les obligations rotatives est le plus grand à 3,44, et cette valeur de propriété physique contribue fortement à la prédiction de RT.
Nous avons discuté de la précision de prédiction des données utilisées pour construire le modèle de prédiction, mais enfin, voyons avec quelle précision les données non utilisées pour construire le modèle peuvent être prédites.
lignoceric = [26, 22, 438.70, 8.67, 114.88]
x_lignoceric = pd.DataFrame([lignoceric], columns=params_fatty_acids)
y_pred_lignoceric = pls_rt.predict(x_lignoceric)
y_exp_lignoceric = 22.31 #La valeur de mesure
print(y_exp_lignoceric)
print(y_pred_lignoceric)
Ici, j'ai essayé de prédire la RT de l'acide lignocérique (FA 24: 0). La différence entre la valeur prédite et la valeur mesurée est d'environ 1,2 minute. Je pense qu'il existe différents points de vue sur la question de savoir si cette différence est grande ou petite, mais je pense personnellement que la précision des prévisions est plutôt faible. La raison en est que l'acide lignocérique est une espèce moléculaire qui est plus hydrophobe que toute espèce moléculaire d'acide gras incluse dans l'ensemble de données utilisé pour la construction du modèle, et l'ajustement des données proches des propriétés physiques de l'acide lignocérique est effectué au stade de la construction du modèle. On pense que c'est lié à ce qui n'a pas été fait.
La régression PLS peut être effectuée par la procédure ci-dessus.
Bien que cela ne soit pas mentionné ici, le nombre de variables latentes n_components
est également important lors de l'exécution de la régression PLS.
Cette fois, j'ai utilisé la valeur par défaut «2», mais en changeant cela, la précision de la prédiction changera petit à petit.
Je voudrais l'expliquer à un autre moment.
Ici, nous avons expliqué scikit-learn, en nous concentrant sur les connaissances pratiques qui peuvent être utilisées en chimioinfomatique. Revoyons à nouveau les principaux points.
Recommended Posts