[PYTHON] Ich habe versucht, ein Protein-Protein-Interaktionsnetzwerk in einen zweispurigen Raum mit Poincarē-Einbettung von Gensim einzubetten

Einführung

Mit der Poincarē-Einbettung des Genismus habe ich versucht, ein Netzwerk von Protein-Protein-Wechselwirkungen in Poancare-Bälle einzubetten.

  1. Zwillingsraum Der Zwillingsraum ist einer der nichteuklidischen Räume, der ein gekrümmter Raum mit einer negativen Krümmung ist. Es hat die Eigenschaft, dass sich der Raum zur Peripherie hin ausdehnt, und soll zum Einbetten von Netzwerken mit einer hierarchischen Struktur geeignet sein.

  2. Poancare Ball Eines der Modelle des zweigleisigen Raums ist der Poancare-Ball. Der Abstand zwischen zwei Punkten auf dem Poancare-Ball$d(u,v) = \mathrm{arccosh}\left(1+2\frac{||u-v||^{2}}{(1-||u||^{2})(1-||v||^{2})}\right).$ Es wird ausgedrückt als. Wir definieren die Verlustfunktion basierend auf der Entfernung auf dem Poancare-Ball wie folgt: $\Theta'\leftarrow \mathrm{arg min}\mathcal{L}(\Theta)\;\;\;\mathrm{s.t.}\forall\theta_{i}\in\Theta:||\theta_{i}||<1.$ Durch das Einbetten von Poincarē werden die Koordinaten so festgelegt, dass diese Verlustfunktion minimiert wird.

Netzwerk von Interproteinbindungen

  1. Prote-protein interaction network
    Verschiedene Proteine funktionieren im Körper, aber viele von ihnen binden eher aneinander als allein. Das Protein-Protein-Interaktionsnetzwerk ist ein Netzwerk, das durch Verbinden von Proteinen aufgebaut wird, die aneinander binden.
  2. Merkmale des Protein-Protein-Interaktionsnetzwerks Die Proteine binden aneinander, aber die Anzahl der Bindungspartner ist nicht einheitlich. Die meisten Proteine binden nur an bestimmte Proteine. Sehr wenige Proteine binden an viele. Infolgedessen weist das Interprotein-Bindungsnetzwerk eine Struktur auf, in der eine kleine Anzahl von Proteinen als Drehscheibe für das Netzwerk dient und die Mehrheit der terminalen Proteine verbindet. Die Elemente im Netzwerk werden als Knoten bezeichnet, die Zweige, die die Knoten verbinden, werden als Kanten bezeichnet, und die Anzahl der Kanten für jeden Knoten wird als Grad bezeichnet. Im Netzwerk der Interproteinbindungen ist der Grad ungleich verteilt. Netzwerke, deren Gradverteilung der Leistungsregel folgt, werden als skalierungsfreie Netzwerke oder kleine Weltnetzwerke bezeichnet. In natürlich vorkommenden Netzwerken werden häufig skalierungsfreie Netzwerke beobachtet. Es ist auch bekannt, dass das Netzwerk von Interproteinbindungen schuppenfrei ist.
  3. Datensatz Informationen zur Interproteinbindung erhalten Sie aus der Datenbank. Dieses Mal habe ich [Datensatz mit NURSA-Protein-Protein-Interaktionen] verwendet (http://amp.pharm.mssm.edu/Harmonizome/dataset/NURSA+Protein-Protein+Interactions). Laden Sie hier die Genattribut-Kantenliste herunter. Diese Datei listet die Paare von Proteinen auf, die binden. Aus diesen Informationen werden wir ein Netzwerk von Bindungsproteinen aufbauen und es in Poancare-Bälle einbetten.

gensim Poin carē em Bettwäsche

Die Einbettung von Poincarē ist im Genismus der Python-Bibliothek zur Verarbeitung natürlicher Sprache implementiert. Verwenden Sie sie daher. Wenn Sie eine Liste von Wortpaaren angeben, wird ein Netzwerk von Wörtern in Poancareball eingebettet.

# Bibliotheksimport
import pandas as pd
import numpy as np
from gensim.models.poincare import PoincareModel
from genism.viz.poincare import poincare_2d_visualization
from plotly.offline import iplot
# Datensatz laden
# Laden Sie gene_attribute_edges.txt.gz herunter und entpacken Sie es.
# Die Proteinpaare, die an die Quell- und Zielabschnitte binden, werden aufgelistet.
dataset = pd.read_csv('gene_attribute_edges.txt', delimiter = '\t', usecols = [0,3], skiprows = [1])
# Erstellen Sie eine Liste der gebundenen Proteinpaare
relations = []
for i in range(len(dataset)):
    relations.append((dataset.source[i], dataset.target[i]))
# Wenden Sie das Poancare-Modell auf das Proteinpaar an
# Wir werden es später in zwei Dimensionen visualisieren, also setze Größe = 2.
model = PoincareModel(relations, size = 2)
model.train(epochs = 1000)
# Visualisierung
# Wenn alle Bindungen zwischen Proteinen durch Linien verbunden sind, ist es zu kompliziert, die Abbildung zu verstehen, sodass die Anzahl der Linien mit num_nodes auf 5 begrenzt ist.
map = poincare_2d_visualization(model = model, tree = relations, figure_title = 'PPI network', num_nodes = 5)
iplot(map)

PPI_10epochs.png PPI_100epochs.png PPI_1000epochs.png

Jeder Punkt repräsentiert ein Protein und die Bindungsproteine sind durch eine Linie verbunden. Wenn der Wert der Epochen allmählich erhöht wird, das Lernen fortschreitet und wenn die Verlustfunktion abnimmt, wird das Protein mit weniger Bindung in der Peripherie platziert und das Protein, das als Hub dient, befindet sich im Zentrum, was zu einer hierarchischen Struktur führt.

Fazit

Ich habe die Poincarē-Einbettung von gensim verwendet, um ein Netzwerk von Interproteinbindungen in Poancare-Bälle einzubetten. Es wurde festgestellt, dass im Verlauf des Lernens Proteine mit weniger Bindung im peripheren Teil platziert werden, während Proteine, die als Hubs dienen, im zentralen Teil verbleiben und eine hierarchische Struktur erhalten wird. Das Einbetten von Poincarē scheint ein guter Weg zu sein, um ein skalierungsfreies Netzwerk einzubetten.

Referenz

Maximillian Nickel and Douwe Kiela, “Poincaré Embeddings for Learning Hierarchical Representations” genism Nuclear Receptor Signaling Atlas Malovannaya, A et al., "Analysis of the human endogenous coregulator complexome"

Recommended Posts

Ich habe versucht, ein Protein-Protein-Interaktionsnetzwerk in einen zweispurigen Raum mit Poincarē-Einbettung von Gensim einzubetten
Ich schrieb einen Test in "Ich habe versucht, die Wahrscheinlichkeit eines Bingospiels mit Python zu simulieren".
Ich habe versucht, mit Python eine Liste von Primzahlen zu erstellen
Ich habe versucht, mit Go einen exklusiven Kontrollmechanismus zu erstellen
Ich habe versucht, den Höhenwert von DTM in einem Diagramm anzuzeigen
Ich habe versucht, Trumps Kartenspiel in Python zu implementieren
Ich habe versucht, Keras in TFv1.1 zu integrieren
Ich habe eine einfache Mail-Sendeanwendung mit tkinter von Python erstellt
[Azure] Ich habe versucht, eine virtuelle Linux-Maschine mit Azure von Microsoft Learn zu erstellen
Ich habe versucht, ein Modell mit dem Beispiel von Amazon SageMaker Autopilot zu erstellen
[Python & SQLite] Ich habe den erwarteten Wert eines Rennens mit Pferden im 1x-Gewinnbereich ① analysiert
Ich wollte die Anzahl der Zeilen in mehreren Dateien wissen und versuchte, sie mit einem Befehl abzurufen
Einführung in die KI-Erstellung mit Python! Teil 2 Ich habe versucht, den Hauspreis in Boston mit einem neuronalen Netz vorherzusagen
Ich möchte eine Variable in einen Python-String einbetten
Ich habe versucht, mit dem Seq2Seq-Modell von TensorFlow so etwas wie einen Chatbot zu erstellen
Ich habe versucht, eine Umgebung mit WSL + Ubuntu + VS-Code in einer Windows-Umgebung zu erstellen
Ich habe versucht, Funktionen mit SIFT von OpenCV zu extrahieren
Ich möchte mit einem Knopf am Kolben übergehen
Ich habe versucht, einen Pseudo-Pachislot in Python zu implementieren
Ich möchte mit einem Roboter in Python arbeiten.
[Python] Ich habe versucht, automatisch einen täglichen Bericht über YWT mit Outlook-Mail zu erstellen
Ich habe versucht, mit AI kreative Kunst zu machen! Ich habe eine Neuheit programmiert! (Artikel: Creative Adversarial Network)
Ich habe versucht, eine Klasse für die Suche nach Dateien mit der Glob-Methode von Python in VBA zu erstellen
Ich habe auch versucht, die Funktionsmonade und die Zustandsmonade mit dem Generator in Python nachzuahmen
Ich habe ein Convolutional Neural Network (CNN) mit einem TensorFlow-Tutorial zur Cloud9-Klassifizierung handgeschriebener Bilder ausprobiert.
[Grafikzeichnung] Ich habe versucht, ein mehrreihiges Balkendiagramm mit Matplotlib und Seaborn zu schreiben
Ich habe versucht, mit Quantx eine Linie mit gleitendem Durchschnitt des Volumens zu implementieren
Ich habe versucht, die Entropie des Bildes mit Python zu finden
Ich habe versucht, mit TensorFlow den Durchschnitt mehrerer Spalten zu ermitteln
Ich habe versucht, einen eindimensionalen Zellautomaten in Python zu implementieren
Ich habe versucht, automatisch einen Bericht mit der Markov-Kette zu erstellen
Ich habe versucht, das Problem der Kombinationsoptimierung mit Qiskit zu lösen
Ich habe versucht "Wie man eine Methode in Python dekoriert"
Ich habe versucht, mit Hy ・ Define a class zu beginnen
Ich habe versucht, ListNet of Rank Learning mit Chainer zu implementieren
Ich habe versucht, eine zufällige FizzBuzz-Spalte mit Blasensortierung zu sortieren.
Ich habe eine Stoppuhr mit tkinter mit Python gemacht
Ich habe versucht, die Wahrscheinlichkeit eines Bingospiels mit Python zu simulieren
Ich habe versucht, das Blackjack of Trump-Spiel mit Python zu implementieren
Ich habe versucht, in einem tief erlernten Sprachmodell zu schreiben
Ich habe versucht, einen Artikel mit SQL Alchemy auf Wiki.js zu erstellen
Ich habe versucht, den Sesam für Eingang 2 mit einem einzigen Druck auf die AWS IoT-Taste zu entsperren
Ich habe versucht, die Anzahl der im Inland infizierten Menschen der neuen Korona mit einem mathematischen Modell vorherzusagen
Eine Geschichte, die nicht funktioniert hat, als ich versucht habe, mich mit dem Python-Anforderungsmodul anzumelden
[5.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ich habe versucht, mit Pandas eine Pferderenn-Datenbank zu erstellen
Ich habe versucht, die Bewässerung des Pflanzgefäßes mit Raspberry Pi zu automatisieren
[2nd] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ein Memorandum beim automatischen Erwerb mit Selen
Ich habe versucht, mit Python einen regulären Ausdruck für "Betrag" zu erstellen
Ich habe versucht, mit Python einen regulären Ausdruck von "Zeit" zu erstellen
[3.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ich habe versucht, das Bild mit OpenCV im "Skizzenstil" zu verarbeiten