[PYTHON] Une réflexion sur la visualisation du champ d'application du modèle de prédiction

introduction

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.

Contenu de la vérification

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 **.

La source

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)

résultat

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

Lors de l'ajustement uniquement avec les données d'entraînement

image.png

Lors de l'ajustement avec toutes les données d'entraînement + les données cibles de prédiction

image.png

UMAP

Lors de l'ajustement uniquement avec les données d'entraînement

image.png

Lors de l'ajustement avec toutes les données d'entraînement + les données cibles de prédiction

image.png

Considération

Recommended Posts

Une réflexion sur la visualisation du champ d'application du modèle de prédiction
Calculer la probabilité de valeurs aberrantes sur les moustaches de la boîte
Remarque sur le comportement par défaut de collate_fn dans PyTorch
Sous Linux, l'horodatage d'un fichier est un peu dépassé.
Trouvez le rang de la matrice dans le monde XOR (rang de la matrice sur F2)
Une commande pour vérifier facilement la vitesse du réseau sur la console
L'histoire de l'exportation d'un programme
Obtenez le nombre de lecteurs d'articles sur Mendeley en Python
Distance approximative entre deux points à la surface d'un ellipsoïde en rotation (à la surface de la terre)
Générer semi-automatiquement une description du package à enregistrer dans PyPI
Parlez de la probabilité d'évasion d'une marche aléatoire sur une grille entière
Mesurer la force de l'association dans un tableau croisé
Publier le sujet de Gmail sur Twitter
[python] [meta] Le type de python est-il un type?
Étude sur Tokyo Rent en utilisant Python (3-1 sur 3)
Obtenez le nom de fichier du répertoire (glob)
L'histoire du traitement A du blackjack (python)
[Python] Une barre de progression sur le terminal
Notez l'achèvement d'une commande chronophage
Calculer la probabilité de valeurs aberrantes sur les moustaches de la boîte
Essayez de tracer la concentration environnementale des composés organiques du fluor sur une carte à l'aide de données ouvertes
Comment calculer la volatilité d'une marque
Un mémo qui a fait un tutoriel pour exécuter python sur heroku
Visualisez la couche interne du réseau neuronal
Le comportement de signal () dépend de l'option de compilation
Remarques sur la personnalisation de la classe de liste de dict
[2020July] Vérifiez l'UDID de l'iPad sous Linux
Copiez la liste en Python
Utilisez la dernière version de PyCharm sur Ubuntu
Trouvez le nombre de jours dans un mois
Écrire une note sur la version python de python virtualenv
[Python] Une compréhension approximative du module de journalisation
Au moment de la mise à jour de python avec ubuntu
Changer la résolution d'Ubuntu s'exécutant sur VirtualBox
Prise en compte des forces et faiblesses de Python
[AWS S3] Confirmation de l'existence de dossiers sur S3
Créez une interface graphique sur le terminal à l'aide de curses
J'ai fait un peu de recherche sur la classe
Pouvez-vous étudier avec un minimum d'effets personnels? Développé sur iPad << 3ème >> ~ Le sauveur apparaît ~
[Python3] Prenez une capture d'écran d'une page Web sur le serveur et recadrez-la davantage
[Exemple d'amélioration de Python] Apprentissage des bases de Python sur un site gratuit en 2 semaines
Faire du répertoire initial de JupyterLab un Google Drive monté sur un disque dur externe
Je souhaite prendre une capture d'écran du site sur Docker en utilisant n'importe quelle police
Un mémo sur la façon de surmonter le problème difficile de la capture d'effets avec l'IA
Nous avons organisé une session d'étude en interne sur la programmation mob avec le thème de FizzBuzz.