Proba

Proba


Brief 130 (412 n. Chr.)

1. In Erinnerung an Ihre Bitte und meine Zusage, dass ich Ihnen, sobald der, zu dem wir beten, Zeit und Gelegenheit geben würde, Ihnen etwas zum Thema Gebet zu Gott zu schreiben, sehe ich es nun als meine Pflicht an, diese Schuld zu begleichen, und in der Liebe Christi, der Befriedigung deines frommen Verlangens zu dienen. Ich kann nicht in Worte fassen, wie sehr ich mich über die Bitte gefreut habe, in der ich gemerkt habe, wie groß Ihre Besorgnis in dieser überaus wichtigen Angelegenheit ist. Denn was könnte für eure Witwenschaft passender sein, als Tag und Nacht im Flehen fortzufahren, nach der Ermahnung des Apostels: Sie, die wirklich Witwe und Verwüstung ist, vertraut auf Gott und verharrt im Flehen Tag und Nacht? 1. Timotheus 5:5 Es mag in der Tat wunderbar erscheinen, dass die Sorge um das Gebet Ihr Herz beschäftigt und den ersten Platz darin beansprucht, wenn Sie, soweit es diese Welt betrifft, edel und wohlhabend und die Mutter eines solchen sind ruhmreiche Familie, und obwohl eine Witwe, nicht desolat, würdest du nicht weise verstehen, dass die Seele in dieser Welt und in diesem Leben keinen sicheren Anteil hat.

2. Darum tut er, der Sie mit diesem Gedanken inspiriert hat, sicherlich, was er seinen Jüngern versprochen hat, als sie betrübt waren, nicht für sich selbst, sondern für die ganze Menschheitsfamilie und an der Erlösung eines jeden verzweifelten, nachdem sie von ihm gehört hatten dass ein Kamel leichter durch ein Nadelöhr ging, als dass ein Reicher in das Himmelreich kam. Er gab ihnen diese wunderbare und barmherzige Antwort: Was bei den Menschen unmöglich ist, ist bei Gott möglich. Matthäus 19:21-26 Er also, mit dem es möglich ist, auch die Reichen in das Himmelreich eingehen zu lassen, hat euch mit jener frommen Angst eingeflößt, die euch für notwendig hält, meinen Rat zu fragen, wie ihr es tun sollt beten. Denn als er noch auf Erden war, brachte er Zachäus, Lukas 19:9, obwohl reich, in das Himmelreich, und nachdem er in seiner Auferstehung und Himmelfahrt verherrlicht worden war, machte er viele Reiche, diese gegenwärtige Welt zu verachten, und machte Sie werden wahrhaft reicher, indem sie ihr Verlangen nach Reichtümern auslöschen, indem er ihnen seinen Heiligen Geist mitteilt. Denn wie könnten Sie sich so sehr wünschen, zu Gott zu beten, wenn Sie Ihm nicht vertrauten? Und wie könntest du auf Ihn vertrauen, wenn du dein Vertrauen auf unsichere Reichtümer setzt und die heilsame Ermahnung des Apostels vernachlässigst: Begegne denen, die in dieser Welt reich sind, dass sie nicht hochgesinnt sind und nicht auf unsichere Reichtümer vertrauen, sondern auf der lebendige Gott, der uns alles reichlich schenkt, damit sie Gutes tun, dass sie reich an guten Werken sind, bereit zum Verteilen, bereit zum Mitteilen, sich ein gutes Fundament zulegen, damit sie das Ewige ergreifen können Leben ? 1. Timotheus 6:17-19


Proba - Geschichte

Die Rubinstein-Straße, in der sich das ProBa-Sprachzentrum befindet, befindet sich im Herzen von Sankt-Petersburg, in der Nähe des Newski-Prospekts – der Hauptstraße unserer Stadt.

Diese Straße wurde nach Anton Rubinstein, Komponist und Mentor von Tschaikowsky, benannt.

Die Rubinstein Street ist der "Dining Heaven" der Stadt. In fast jedem der 40 Gebäude entlang dieser kompakten Straße gibt es ein Restaurant, ein Café, eine Bar oder einen Pub.

Vor mehr als einem Jahrhundert war diese Straße ein Ort, an dem sich viele berühmte russische Schriftsteller und Dichter wie Brodsky und Dovlatov und natürlich viele Underground-Rockstars kreuzten.

Das bekannteste Gebäude ist das „Tolstoi-Haus“. Es gehörte dem Grafen Michail Tolstoi, einem entfernten Verwandten von Leo Tolstoi, dem größten russischen Schriftsteller. Eine interessante Tatsache: ein Prototyp einer der extravaganten und mysteriösen Figuren der russischen Literatur, Professor Voland (der Teufel selbst) aus „Der Meister und Margarita“ (eines der interessantesten Meisterwerke, die man lesen kann, um die russische Sprache zu lernen) geschrieben von Mikhail Bulgakov, lebte auch in diesem Haus. Während seines Besuchs in Sankt Petersburg wohnte Bulgakov in der Wohnung von Dmitry Pozdneev, einem Gelehrten und einem Verwandten von Bulgakov. Pozdneev, ein Mann mit einer bemerkenswerten Persönlichkeit, hatte viel mit seiner fiktiven Charakterisierung gemeinsam: Voland hatte „ein leeres linkes Auge“ genau wie Pozdneev, der eine Glasauge trug, beide waren dunkelhaarige, orientalistische Professoren von hohem Format und starke Raucher mit tiefen Stimmen. Posdneev wurde 1937 während der Säuberung Stalins hingerichtet, während das Bild von Woland in Bulgakows Roman für immer weiterlebt.

In den 1950er Jahren befand sich unter den Bewohnern der Rubinsteinstraße Evgeny Rein, ein Dichter und Freund von Joseph Brodsky. Kennengelernt haben sie sich Ende der 50er Jahre: Brodsky besuchte ihn und las Gedichte vor, die Rein sehr mochte. So wurden sie Freunde. Nach kurzer Zeit bekam Rein ein Zimmer in der Rubinsteinstraße 19 und Brodsky half ihm beim Umzug. Er lebte in der Nähe, und so begannen sich Dichter täglich zu sehen.

Außerdem war Rein mit dem berühmten Schriftsteller Sergey Dovlatov befreundet. Er besuchte Rein fast täglich, da er bis zu seiner Emigration in die USA ebenfalls in der Nähe wohnte – in der Rubinstein Street 23.

Durch die Fenster von Tolstois Haus kann man einen schönen, aber kleinen öffentlichen Garten sehen, der nach dem Sänger Edward Khil, auch bekannt als „Mr. Trololo“.

In den frühen 1980er Jahren gab es immer mehr junge Rockmusiker auf der Straße, so dass 1981 der erste russische offizielle Rockclub im Rubinstein 13 eröffnet wurde. Es war der einzige Ort, an dem Musiker legal Rockmusik spielen durften. Dieser Rockclub verhalf Bands wie „Kino“ zu Karrieren, deren Songs bis heute populär sind.

Heute ist die Rubinsteinstraße vor allem am Abend eine der am dichtesten belebten Straßen von Sankt Petersburg. Entlang der kurzen Rubinsteinstraße befinden sich über 50 Restaurants und Bars. Jede Bar versucht, die Leute durch ihren eigenen Stil anzuziehen. Die Rubinsteinstraße ist also einer der Orte, die Sie in Sankt Petersburg unbedingt besuchen sollten.


Naive Implementierung: A Tale of Memory Usage

Lassen Sie uns das Betrugsproblem auf naive Weise lösen und die Speichernutzung verfolgen. Das erste, was wir normalerweise tun, ist den Datensatz mit Pandas zu lesen. Wie viel kostet das speichertechnisch?

Der Speicher steigt langsam auf über 570 MB an, steigt dann auf 1,14 GB an und fällt dann wieder auf 570 MB ab, was die endgültige Größe des df_train-Objekts ist. Die Spitzenauslastung, die doppelt so groß ist wie die endgültige Objektgröße, könnte darauf hindeuten, dass irgendwo in der pd.read_csv-Funktion eine ineffiziente Kopie vorhanden ist, aber ich lasse dies vorerst durch.

Was sollen wir als nächstes tun? Trainieren Sie unser Modell! Nehmen wir an, wir haben bereits Feature-Engineering durchgeführt, daher müssen wir nur unsere train_data in unsere Designmatrix X_train und das Ziel y_train aufteilen und sie einem ExtraTreesClassifier zuführen. Lassen Sie uns überprüfen, wie dieser Schritt funktioniert:

Wir springen auf einen Spitzenwert von 1,91 GB und erhalten eine konstante Nutzung von etwa 1,5 GB. Es gibt während des gesamten Fits kleine „Spikes“, was ich für die Anpassungsprozesse der einzelnen Bäume vermute (10 Bäume = 10 Spikes). Wir beenden den Prozess mit 593 MB.

Der letzte Schritt in unserer Pipeline besteht darin, unsere Testdaten zu lesen, eine Inferenz mit unserem Modell durchzuführen und die Test-AUC zu melden:

Wir gehen von der Nutzung des vorherigen Schritts von etwa 600 MB zu einem Spitzenwert von 1,1 GB und stoppen wieder bei etwa 600 MB. Außerdem sieht der AUC unseres Modells mit 0,9915 großartig aus. Alles in allem sieht unsere Pipeline-Speichernutzung so aus:

Das ist eigentlich nicht viel, aber wer weiß, vielleicht haben wir es morgen mit Datensätzen und Speichernutzungen von mehreren zehn oder hundert GB zu tun. Stellen wir uns also vor, dass wir für diesen Beitrag auf weniger Speicher beschränkt sind, als wir im naiven Fall verwendet haben. Die gleichen Tricks, die wir in diesem Fall entwickeln, sollten für viel größere Datensätze funktionieren.


2 Antworten 2

Soweit ich weiß, möchten Sie Wahrscheinlichkeiten für jede der potenziellen Klassen für Multi-Class-Klassifikatoren erhalten.

In Scikit-Learn kann dies durch die generische Funktion Predict_proba erfolgen. Es ist für die meisten Klassifikatoren in scikit-learn implementiert. Sie rufen grundsätzlich an:

Dabei ist clf der trainierte Klassifikator. Als Ausgabe erhalten Sie für jeden Eingabewert ein dezimales Array von Wahrscheinlichkeiten für jede Klasse.

Ein Wort zur Vorsicht – nicht alle Klassifikatoren werten natürlich Klassenwahrscheinlichkeiten aus. SVM macht das zum Beispiel nicht. Sie können zwar immer noch die Klassenwahrscheinlichkeiten erhalten, aber um dies bei der Konstruktion solcher Klassifikatoren zu tun, müssen Sie ihn anweisen, eine Wahrscheinlichkeitsschätzung durchzuführen. Für SVM würde es so aussehen:

Nachdem Sie es angepasst haben, können Sie Predict_proba wie zuvor verwenden.

Ich muss Sie warnen, dass, wenn der Klassifikator Wahrscheinlichkeiten nicht auf natürliche Weise auswertet, dies bedeutet, dass die Wahrscheinlichkeiten mit ziemlich umfangreichen Berechnungsmethoden bewertet werden, was die Trainingszeit erheblich verlängern kann. Daher empfehle ich Ihnen, Klassifikatoren zu verwenden, die Klassenwahrscheinlichkeiten auf natürliche Weise bewerten (neurale Netze mit Softmax-Ausgabe, logistische Regression, Gradient Boosting usw.).


BEARBEITEN: Wie von @TimH aufgezeigt, können die Wahrscheinlichkeiten durch clf.decision_function(X) angegeben werden. Der folgende Code ist behoben. Angesichts des ernannten Problems mit geringen Wahrscheinlichkeiten mit vorhersagen_proba(X) denke ich, dass die Antwort laut offiziellem Dokument hier ist, . Außerdem werden bei sehr kleinen Datensätzen bedeutungslose Ergebnisse erzeugt.

Die Antwort liegt im Verständnis der resultierenden Wahrscheinlichkeiten von SVMs. Kurz gesagt, Sie haben 7 Klassen und 7 Punkte in der 2D-Ebene. Was SVMs versuchen, ist, einen linearen Separator zwischen jeder Klasse und jeder anderen zu finden (Eins-gegen-Eins-Ansatz). Es werden jeweils nur 2 Klassen gewählt. Was du bekommst ist die Stimmen der Klassifizierer, nach der Normalisierung. Ausführlichere Erläuterungen zu Mehrklassen-SVMs von libsvm in diesem Beitrag oder hier (scikit-learn verwendet libsvm).

Durch eine geringfügige Änderung Ihres Codes sehen wir, dass tatsächlich die richtige Klasse ausgewählt wurde:

Die entsprechende Ausgabe ist

Und Sie können auch Entscheidungszonen sehen:

Sie sollten die Wahrscheinlichkeit deaktivieren und stattdessen Decision_function verwenden, da es keine Garantie dafür gibt, dass Predict_proba und Predict dasselbe Ergebnis zurückgeben. Mehr dazu können Sie hier in der Dokumentation lesen.

Die SVC-Methode Decision_function gibt für jede Probe eine Punktzahl pro Klasse (oder im binären Fall eine einzelne Punktzahl pro Probe). Wenn die Konstruktoroptionswahrscheinlichkeit auf True gesetzt ist, werden Schätzungen der Klassenmitgliedschaftswahrscheinlichkeit (von den Methoden vorhersagen_proba und vorhersagen_log_proba) aktiviert. Im binären Fall ist die Wahrscheinlichkeiten werden mit Platt-Skalierung kalibriert: logistische Regression der SVM-Scores, angepasst durch eine zusätzliche Kreuzvalidierung der Trainingsdaten. Im Mehrklassenfall wird dies nach Wu et al. erweitert. (2004).

Unnötig zu erwähnen, die Kreuzvalidierung bei der Platt-Skalierung ist ein teurer Vorgang für große Datensätze. Darüber hinaus können die Wahrscheinlichkeitsschätzungen nicht mit den Bewertungen übereinstimmen, in dem Sinne, dass das „Argmax“ der Scores möglicherweise nicht das Argmax der Wahrscheinlichkeiten ist. (z. B. in binärer Klassifikation, eine Stichprobe kann durch vorhersagen als zu einer Klasse gehörend gekennzeichnet werden, die die Wahrscheinlichkeit <½ gemäß vorhersagen_proba . hat.) Es ist auch bekannt, dass die Platt-Methode theoretische Probleme hat. Wenn Konfidenzwerte erforderlich sind, dies jedoch keine Wahrscheinlichkeiten sein müssen, dann es ist ratsam, wahrscheinlichkeit=False zu setzen und Decision_function anstelle von Predict_proba zu verwenden.

Es gibt auch viel Verwirrung über diese Funktion unter Stack Overflow-Benutzern, wie Sie in diesem oder diesem Thread sehen können.


Wie wird ein Romberg-Test durchgeführt?

  • Schritt 1: Der Patient wird gebeten, seine Schuhe auszuziehen und aufrecht mit den Füßen zusammen zu stehen. Er oder sie wird gebeten, seine Arme neben seinem Körper zu halten oder sie vor seinem Körper verschränkt zu halten.
  • Schritt 2: Der Patient wird dann gebeten, die Augen offen zu halten und anschließend die Augen zu schließen und beobachtet, ob er in der Lage ist, sein Gleichgewicht zu halten. Es empfiehlt, dass der Arzt oder der Beobachter aus Sicherheitsgründen nahe am Patienten stehen und bei einem Sturz jegliche Körperverletzung des Patienten vermeiden sollte. Sobald der Patient sein Auge schließt, sollte er sich nicht durch Licht, Geräusche oder andere Sinne ablenken lassen, da dies zu einem falsch positiven Ergebnis führen kann.
  • Schritt 3: Die Bewertung erfolgt anhand der Sekunden, die der Patient mit geschlossenen Augen stehen kann, ohne das Gleichgewicht zu verlieren.

In einigen Fällen kann der Arzt den Patienten durch Störung ablenken, dies sollte jedoch mit Vorsicht und ohne Übertreibung erfolgen.

Der Romberg-Test gilt als positiv, wenn der Proband nicht in der Lage ist, lange mit geschlossenen Augen zu stehen, was durch einen Verlust des Gleichgewichts, der zu einem Schwanken des Körpers und einem Aufsetzen eines Fußes in Fallrichtung oder einem vollständigen Fall des Patienten führt, nachgewiesen wird.


3 Antworten 3

Angenommen, Ihr Ziel ist (0,1), dann würde der Klassifikator eine Wahrscheinlichkeitsmatrix der Dimension (N,2) ausgeben. Der erste Index bezieht sich auf die Wahrscheinlichkeit, dass die Daten zur Klasse 0 gehören, und der zweite bezieht sich auf die Wahrscheinlichkeit, dass die Daten zur Klasse 1 gehören.

Sie können das Ergebnis dann ausgeben, indem Sie:

Wenn Sie k Klassen haben, wäre die Ausgabe (N,k), Sie müssen die Wahrscheinlichkeit der gewünschten Klasse angeben.

Im MultiOutputClassifier behandeln Sie die beiden Ausgaben als separate Klassifizierungsaufgaben aus den verknüpften Dokumenten:

Diese Strategie besteht darin, einen Klassifikator pro Ziel anzupassen.

Die beiden Arrays in der resultierenden Liste repräsentieren also jeden der beiden Klassifikatoren / abhängigen Variablen. Die Arrays sind dann die binären Klassifizierungsausgaben (Spalten mit Wahrscheinlichkeitsklasse 0, Wahrscheinlichkeitsklasse 1), die @chrisckwong821 erwähnt hat, jedoch eine für jedes Problem.

Mit anderen Worten, der Rückgabewert von Predict_proba ist eine Liste, deren Länge gleich der Breite Ihres y ist, d.

fit(self, X, y[, sample_weight])

y : (sparse) Array-artig, Form (n_samples, n_outputs)

Das erste 5x2-Array gibt Ihnen die Wahrscheinlichkeiten der 5 Teststichproben, die in die erste Klasse eingeordnet sind. Darüber hinaus sagt Ihnen die erste Spalte dieses 5x2-Arrays "die Wahrscheinlichkeit, dass die Teststichprobe nicht als die erste Klasse eingestuft wird" und die zweite Spalte dieses 5x2-Arrays sagt Ihnen "die Wahrscheinlichkeit, dass die Teststichprobe als die erste Klasse eingestuft wird ".

In ähnlicher Weise gibt Ihnen das zweite 5x2-Array die Klassifizierungswahrscheinlichkeit für das Testen von Proben in der zweiten Klasse.

Wenn Sie dies überprüfen möchten, können Sie den Wert in diesen Arrays den Ergebnissen von vorhersagen gegenüberstellen.

Manchmal liefert die Rückgabe von Predict_proba eine Liste, die Nx1-Arrays und Nx2-Arrays enthält. Wenn dies der Fall ist, werden keine Testdaten in diese durch Nx1 Arrays repräsentierten Klassen klassifiziert.


Visualisieren Sie den Verlauf des Modelltrainings in Keras

Aus den gesammelten Verlaufsdaten können wir Diagramme erstellen.

Im folgenden Beispiel erstellen wir ein kleines Netzwerk, um das binäre Klassifizierungsproblem der Pima-Indianer beim Auftreten von Diabetes zu modellieren. Dies ist ein kleiner Datensatz, der im UCI Machine Learning Repository verfügbar ist. Sie können den Datensatz herunterladen und speichern unter pima-indians-diabetes.csv in Ihrem aktuellen Arbeitsverzeichnis (Update: Download von hier).

Das Beispiel sammelt den Verlauf, der vom Training des Modells zurückgegeben wird, und erstellt zwei Diagramme:

  1. Ein Genauigkeitsdiagramm der Trainings- und Validierungs-Datasets über Trainingsepochen.
  2. Eine Verlustdarstellung der Trainings- und Validierungs-Datasets über Trainingsepochen.

Die Grundstücke sind unten angegeben. Die Historie für das Validierungs-Dataset wird gemäß Konvention als Test bezeichnet, da es sich tatsächlich um ein Test-Dataset für das Modell handelt.

Aus dem Genauigkeitsdiagramm können wir erkennen, dass das Modell wahrscheinlich noch etwas trainiert werden könnte, da der Trend zur Genauigkeit bei beiden Datensätzen in den letzten Epochen immer noch ansteigt. Wir können auch sehen, dass das Modell den Trainingsdatensatz noch nicht überlernt hat und in beiden Datensätzen vergleichbare Fähigkeiten zeigt.

Darstellung der Modellgenauigkeit in Zug- und Validierungsdatensätzen

Aus dem Verlustdiagramm können wir sehen, dass das Modell eine vergleichbare Leistung sowohl bei den Zug- als auch bei den Validierungsdatensätzen (beschriftete Tests) aufweist. Wenn diese parallelen Plots beginnen, sich konsequent zu entfernen, könnte dies ein Zeichen dafür sein, das Training in einer früheren Epoche zu beenden.

Darstellung des Modellverlusts in Trainings- und Validierungsdatensätzen


Sklearn.pipeline .Pipeline¶

Wenden Sie nacheinander eine Liste von Transformationen und einen abschließenden Schätzer an. Zwischenschritte der Pipeline müssen „Transforms“ sein, d. h. sie müssen Fit- und Transformationsmethoden implementieren. Der endgültige Schätzer muss nur die Anpassung implementieren. Die Transformer in der Pipeline können mit dem Speicherargument zwischengespeichert werden.

Der Zweck der Pipeline besteht darin, mehrere Schritte zusammenzustellen, die zusammen kreuzvalidiert werden können, während verschiedene Parameter festgelegt werden. Dazu ermöglicht es das Einstellen von Parametern der verschiedenen Schritte anhand ihrer Namen und des Parameternamens, getrennt durch ein ‚__‘, wie im folgenden Beispiel. Der Schätzer eines Schritts kann vollständig ersetzt werden, indem der Parameter mit seinem Namen auf einen anderen Schätzer gesetzt wird, oder ein Transformer kann entfernt werden, indem er auf „passthrough“ oder None gesetzt wird.

Liste von (Name, Transformation) Tupel (Implementierung von Anpassung/Transformation), die verkettet sind, in der Reihenfolge, in der sie verkettet sind, mit dem letzten Objekt, einem Schätzer.

Erinnerung str oder Objekt mit der joblib.Memory-Schnittstelle, default=None

Wird verwendet, um die eingebauten Transformatoren der Pipeline zwischenzuspeichern. Standardmäßig wird kein Caching durchgeführt. Wenn eine Zeichenfolge angegeben wird, ist dies der Pfad zum Caching-Verzeichnis. Das Aktivieren des Cachings löst vor dem Einpassen einen Klon der Transformatoren aus. Daher kann die der Pipeline gegebene Transformatorinstanz nicht direkt überprüft werden. Verwenden Sie das Attribut named_steps oder steps, um Schätzer innerhalb der Pipeline zu untersuchen. Die Zwischenspeicherung der Transformatoren ist vorteilhaft, wenn die Montage zeitaufwändig ist.

ausführlich bool, default=False

Bei True wird die Zeit, die während der Anpassung jedes Schritts verstrichen ist, gedruckt, sobald er abgeschlossen ist.

Attribute named_steps Bündel

Wörterbuchähnliches Objekt mit den folgenden Attributen. Schreibgeschütztes Attribut für den Zugriff auf jeden Schrittparameter über den vom Benutzer angegebenen Namen. Schlüssel sind Schrittnamen und Werte sind Schrittparameter.


Schau das Video: A próba