Article La découverte de médicaments par IA a commencé gratuitement à l'aide de papiers et de bases de données publiques En prime, le champ d'application du modèle de prédiction a été visualisé. À ce moment-là, les données à prédire étaient appliquées au modèle de compression de dimension par PCA et UMAP formés uniquement avec les données d'apprentissage et visualisées. À ce moment-là, à première vue, j'ai conclu que ** les données cibles de prédiction semblent être dans la plage des données d'entraînement **, mais je me demandais si c'était le cas, alors je vais le vérifier.
Dans l'article, «La figure montre que les données à prédire ne semblent pas s'écarter de manière significative de la plage de données d'entraînement, mais elle peut être affectée par le fait que les dimensions ne sont réduites que par les données composées de données d'apprentissage. Non. " Par conséquent, cette fois, j'aimerais essayer la compression dimensionnelle en utilisant toutes les données d'entraînement et les données cibles de prédiction, et la comparer avec la figure lorsque la compression dimensionnelle est effectuée uniquement à partir des données d'apprentissage **.
Pour la source précédente, je publierai la source modifiée afin qu'elle soit compressée dimensionnellement en utilisant toutes les données d'entraînement et les données cibles de prédiction.
view_ad.py
import argparse
import csv
import pandas as pd
import numpy as np
import umap
import matplotlib.pyplot as plt
from sklearn.manifold import TSNE, MDS
from sklearn.decomposition import PCA
from rdkit import Chem
from rdkit.Chem import Descriptors, AllChem
from rdkit import rdBase, Chem, DataStructs
def main():
parser = argparse.ArgumentParser()
parser.add_argument("-train", type=str, required=True)
parser.add_argument("-predict", type=str)
parser.add_argument("-result", type=str)
parser.add_argument("-method", type=str, default="PCA", choices=["PCA", "UMAP"])
args = parser.parse_args()
# all
all_datas = []
# all_train.Chargement de csv,calcul fp
train_datas = []
train_datas_active = []
train_datas_inactive = []
with open(args.train, "r") as f:
reader = csv.DictReader(f)
for row in reader:
smiles = row["canonical_smiles"]
mol = Chem.MolFromSmiles(smiles)
fp = AllChem.GetMorganFingerprintAsBitVect(mol, radius=3, nBits=2048, useFeatures=False, useChirality=False)
train_datas.append(fp)
if int(row["outcome"]) == 1:
train_datas_active.append(fp)
else:
train_datas_inactive.append(fp)
all_datas.append(fp)
if args.predict and args.result:
result_outcomes = []
result_ads = []
#Lire les résultats de prédiction
with open(args.result, "r",encoding="utf-8_sig") as f:
reader = csv.DictReader(f)
for i, row in enumerate(reader):
#print(row)
if row["Prediction"] == "Active":
result_outcomes.append(1)
else:
result_outcomes.append(0)
result_ads.append(row["Confidence"])
# drugbank.Chargement de csv,calcul fp
predict_datas = []
predict_datas_active = []
predict_datas_inactive = []
predict_ads = []
with open(args.predict, "r") as f:
reader = csv.DictReader(f)
for i, row in enumerate(reader):
print(i)
smiles = row["smiles"]
mol = Chem.MolFromSmiles(smiles)
fp = AllChem.GetMorganFingerprintAsBitVect(mol, radius=3, nBits=2048, useFeatures=False, useChirality=False)
predict_datas.append(fp)
if result_outcomes[i] == 1:
predict_datas_active.append(fp)
else:
predict_datas_inactive.append(fp)
all_datas.append(fp)
#une analyse
model = None
if args.method == "PCA":
model = PCA(n_components=2)
model.fit(train_datas)
#model.fit(all_datas)
if args.method == "UMAP":
model = umap.UMAP()
model.fit(train_datas)
#model.fit(all_datas)
result_train = model.transform(train_datas)
result_train_active = model.transform(train_datas_active)
result_train_inactive = model.transform(train_datas_inactive)
plt.title(args.method)
#plt.scatter(result_train[:, 0], result_train[:, 1], c="blue", alpha=0.1, marker="o")
plt.scatter(result_train_active[:, 0], result_train_active[:, 1], c="blue", alpha=0.5, marker="o")
plt.scatter(result_train_inactive[:, 0], result_train_inactive[:, 1], c="blue", alpha=0.5, marker="x")
#Prévoir(predict)
if args.predict and args.result:
result_predict = model.transform(predict_datas)
result_predict_active = model.transform(predict_datas_active)
result_predict_inactive = model.transform(predict_datas_inactive)
#plt.scatter(result_predict[:, 0], result_predict[:, 1], c=result_ads, alpha=0.1, cmap='viridis_r')
plt.scatter(result_predict_active[:, 0], result_predict_active[:, 1], c="red", alpha=0.1, marker="o")
plt.scatter(result_predict_inactive[:, 0], result_predict_inactive[:, 1], c="red", alpha=0.1, marker="x")
plt.show()
if __name__ == "__main__":
import argparse
import csv
import pandas as pd
import numpy as np
import umap
import matplotlib.pyplot as plt
from sklearn.manifold import TSNE, MDS
from sklearn.decomposition import PCA
from rdkit import Chem
from rdkit.Chem import Descriptors, AllChem
from rdkit import rdBase, Chem, DataStructs
def main():
parser = argparse.ArgumentParser()
parser.add_argument("-train", type=str, required=True)
parser.add_argument("-predict", type=str)
parser.add_argument("-result", type=str)
parser.add_argument("-method", type=str, default="PCA", choices=["PCA", "UMAP"])
args = parser.parse_args()
# all
all_datas = []
# all_train.Chargement de csv,calcul fp
train_datas = []
train_datas_active = []
train_datas_inactive = []
with open(args.train, "r") as f:
reader = csv.DictReader(f)
for row in reader:
smiles = row["canonical_smiles"]
mol = Chem.MolFromSmiles(smiles)
fp = AllChem.GetMorganFingerprintAsBitVect(mol, radius=3, nBits=2048, useFeatures=False, useChirality=False)
train_datas.append(fp)
if int(row["outcome"]) == 1:
train_datas_active.append(fp)
else:
train_datas_inactive.append(fp)
all_datas.append(fp)
if args.predict and args.result:
result_outcomes = []
result_ads = []
#Lire les résultats de prédiction
with open(args.result, "r",encoding="utf-8_sig") as f:
reader = csv.DictReader(f)
for i, row in enumerate(reader):
#print(row)
if row["Prediction"] == "Active":
result_outcomes.append(1)
else:
result_outcomes.append(0)
result_ads.append(row["Confidence"])
# drugbank.Chargement de csv,calcul fp
predict_datas = []
predict_datas_active = []
predict_datas_inactive = []
predict_ads = []
with open(args.predict, "r") as f:
reader = csv.DictReader(f)
for i, row in enumerate(reader):
print(i)
smiles = row["smiles"]
mol = Chem.MolFromSmiles(smiles)
fp = AllChem.GetMorganFingerprintAsBitVect(mol, radius=3, nBits=2048, useFeatures=False, useChirality=False)
predict_datas.append(fp)
if result_outcomes[i] == 1:
predict_datas_active.append(fp)
else:
predict_datas_inactive.append(fp)
all_datas.append(fp)
#une analyse
model = None
if args.method == "PCA":
model = PCA(n_components=2)
#model.fit(train_datas)
model.fit(all_datas)
if args.method == "UMAP":
model = umap.UMAP()
#model.fit(train_datas)
model.fit(all_datas)
result_train = model.transform(train_datas)
result_train_active = model.transform(train_datas_active)
result_train_inactive = model.transform(train_datas_inactive)
plt.title(args.method)
#plt.scatter(result_train[:, 0], result_train[:, 1], c="blue", alpha=0.1, marker="o")
plt.scatter(result_train_active[:, 0], result_train_active[:, 1], c="blue", alpha=0.5, marker="o")
plt.scatter(result_train_inactive[:, 0], result_train_inactive[:, 1], c="blue", alpha=0.5, marker="x")
#Prévoir(predict)
if args.predict and args.result:
result_predict = model.transform(predict_datas)
result_predict_active = model.transform(predict_datas_active)
result_predict_inactive = model.transform(predict_datas_inactive)
#plt.scatter(result_predict[:, 0], result_predict[:, 1], c=result_ads, alpha=0.1, cmap='viridis_r')
plt.scatter(result_predict_active[:, 0], result_predict_active[:, 1], c="red", alpha=0.1, marker="o")
plt.scatter(result_predict_inactive[:, 0], result_predict_inactive[:, 1], c="red", alpha=0.1, marker="x")
plt.show()
if __name__ == "__main__":
main()
Pour le moment, la modification du programme est que l'argument lors de l'ajustement avec le modèle passe des données d'apprentissage à toutes les données (données d'entraînement + données cibles de prédiction).
#model.fit(train_datas)
model.fit(all_datas)
Une fois répétées, le bleu représente les données d'entraînement et le rouge les données de prédiction. Veuillez pardonner les points qui se chevauchent et sont difficiles à voir.
PCA
UMAP
Recommended Posts