[PYTHON] Eine Überlegung zur Visualisierung des Anwendungsbereichs des Vorhersagemodells

Einführung

Artikel KI-Wirkstoffentdeckung kostenlos unter Verwendung von Papieren und öffentlichen Datenbanken gestartet Als Bonus wurde der Anwendungsbereich des Vorhersagemodells visualisiert. Zu diesem Zeitpunkt wurden die vorherzusagenden Daten von PCA und UMAP auf das Dimensionskomprimierungsmodell angewendet, nur mit den Trainingsdaten trainiert und visualisiert. Zu diesem Zeitpunkt kam ich auf den ersten Blick zu dem Schluss, dass ** die Vorhersagezieldaten im Bereich der Trainingsdaten zu liegen scheinen **, aber ich habe mich gefragt, ob dies der Fall ist, also werde ich es überprüfen.

Überprüfungsinhalt

In dem Artikel "Die Abbildung zeigt, dass die vorherzusagenden Daten nicht wesentlich vom Bereich der Trainingsdaten abzuweichen scheinen, kann jedoch auch durch die Tatsache beeinflusst werden, dass die Dimensionen nur durch die aus Trainingsdaten zusammengesetzten Daten reduziert werden. Nein. " Daher möchte ich dieses Mal die Dimensionskomprimierung unter Verwendung aller Trainingsdaten und der Vorhersagezieldaten versuchen und sie mit der Abbildung vergleichen, wenn die Dimensionskomprimierung nur anhand der Trainingsdaten ** durchgeführt wird.

Quelle

Für die vorherige Quelle werde ich die Quelle so modifizieren, dass sie unter Verwendung aller Trainingsdaten und der Vorhersagezieldaten dimensional komprimiert wird.

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.Laden von csv,fp Berechnung
    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 = []

        #Vorhersageergebnisse lesen
        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.Laden von csv,fp Berechnung
        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)

    #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")

    #Prognose(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.Laden von csv,fp Berechnung
    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 = []

        #Vorhersageergebnisse lesen
        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.Laden von csv,fp Berechnung
        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)

    #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")

    #Prognose(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()

Die Modifikation des Programms besteht vorerst darin, dass das Argument bei der Anpassung an das Modell von Trainingsdaten auf alle Daten (Trainingsdaten + Vorhersagezieldaten) geändert wird.

     #model.fit(train_datas)
     model.fit(all_datas)

Ergebnis

Einmal wiederholt, sind Blau die Trainingsdaten und Rot die Vorhersagedaten. Bitte verzeihen Sie die Punkte, die sich überschneiden und schwer zu sehen sind.

PCA

Bei Anpassung nur mit Trainingsdaten

image.png

Bei Anpassung mit allen Trainingsdaten + Vorhersagezieldaten

image.png

UMAP

Bei Anpassung nur mit Trainingsdaten

image.png

Bei Anpassung mit allen Trainingsdaten + Vorhersagezieldaten

image.png

Erwägung

Recommended Posts

Eine Überlegung zur Visualisierung des Anwendungsbereichs des Vorhersagemodells
Berechnen Sie die Wahrscheinlichkeit von Ausreißern auf den Box-Whiskern
Hinweis zum Standardverhalten von collate_fn in PyTorch
Unter Linux ist der Zeitstempel einer Datei etwas vorbei.
Finden Sie den Rang der Matrix in der XOR-Welt (Rang der Matrix auf F2)
Ein Befehl zum einfachen Überprüfen der Netzwerkgeschwindigkeit auf der Konsole
Die Geschichte des Exportierens eines Programms
Holen Sie sich die Anzahl der Leser von Artikeln über Mendeley in Python
Ungefährer Abstand zwischen zwei Punkten auf der Oberfläche eines rotierenden Ellipsoids (auf der Erdoberfläche)
Erzeugt halbautomatisch eine Beschreibung des Pakets, das in PyPI registriert werden soll
Sprechen Sie über die Fluchtwahrscheinlichkeit eines zufälligen Gehens auf einem ganzzahligen Gitter
Messen Sie die Assoziationsstärke in einer Kreuztabelle
Veröffentlichen Sie das Thema Google Mail auf Twitter
[Python] [Meta] Ist der Python-Typ ein Typ?
Studie über die Miete in Tokio mit Python (3-1 von 3)
Holen Sie sich den Dateinamen des Verzeichnisses (glob)
Die Geschichte der Verarbeitung A von Blackjack (Python)
[Python] Ein Fortschrittsbalken auf dem Terminal
Beachten Sie den Abschluss eines zeitaufwändigen Befehls
Berechnen Sie die Wahrscheinlichkeit von Ausreißern auf den Box-Whiskern
Versuchen Sie, die Umweltkonzentration organischer Fluorverbindungen mit offenen Daten auf einer Karte darzustellen
So berechnen Sie die Volatilität einer Marke
Ein Memo, das ein Tutorial zum Ausführen von Python auf Heroku erstellt hat
Visualisieren Sie die innere Schicht des neuronalen Netzwerks
Das Verhalten von signal () hängt von der Kompilierungsoption ab
Hinweise zum Anpassen der Diktatlistenklasse
[2020Juli] Überprüfen Sie die UDID des iPad unter Linux
Kopieren Sie die Liste in Python
Verwenden Sie die neueste Version von PyCharm unter Ubuntu
Finden Sie die Anzahl der Tage in einem Monat
Schreiben Sie eine Notiz über die Python-Version von Python Virtualenv
[Python] Ein grobes Verständnis des Protokollierungsmoduls
Zum Zeitpunkt des Python-Updates mit Ubuntu
Ändern Sie die Auflösung von Ubuntu, das auf VirtualBox ausgeführt wird
Berücksichtigung der Stärken und Schwächen von Python
[AWS S3] Bestätigung des Vorhandenseins von Ordnern in S3
Erstellen Sie eine GUI auf dem Terminal mit Flüchen
Ich habe ein wenig über die Klasse recherchiert
Kannst du mit einem Minimum an Hab und Gut lernen? Entwickelt auf dem iPad << 3rd >> ~ Saviour Appears ~
[Python3] Machen Sie einen Screenshot einer Webseite auf dem Server und schneiden Sie sie weiter zu
[Beispiel für eine Python-Verbesserung] In 2 Wochen wurden die Grundlagen von Python auf einer kostenlosen Website erlernt
Machen Sie das ursprüngliche Verzeichnis von JupyterLab zu einem Google Drive, das auf einer externen Festplatte installiert ist
Ich möchte einen Screenshot der Site in Docker mit einer beliebigen Schriftart erstellen
Ein Memo darüber, wie man das schwierige Problem der Erfassung von FX mit AI überwinden kann
Wir haben eine interne Lernsitzung zum Thema Mob-Programmierung mit dem Thema FizzBuzz abgehalten.