Alle Herausforderungen
Einfach 0 gelöst 0% Erfolgsquote

Vorhersage mit logistischer Regression

Klassifiziere Beispiele als 0 oder 1, indem du eine gewichtete Summe durch Sigmoid leitest und mit einem Schwellenwert vergleichst.

Das lernst du

  • Eine gewichtete Summe in eine Wahrscheinlichkeit umwandeln
  • Mit einem Entscheidungsschwellenwert klassifizieren
  • Binäre Klassifikatoren verstehen

Problem

Die logistische Regression ist ein lineares Modell für Ja/Nein-Fragen. Für jedes Beispiel berechnet sie eine Wahrscheinlichkeit und macht daraus eine Klasse:

  1. z = x₁×w₁ + … + xₙ×wₙ + bias
  2. p = 1 / (1 + e^(-z))
  3. Klasse = 1, wenn p ≥ threshold, sonst 0

Implementiere logistic_predict(samples, weights, bias, threshold).

Eingabe

samples: Eine Zeile mit n Merkmalen pro Beispiel.

weights: n Gewichte.

bias: Der Bias.

threshold: Die Wahrscheinlichkeit, die für Klasse 1 nötig ist (echt zwischen 0 und 1).

Ausgabe

Gib die vorhergesagte Klasse (0 oder 1) jedes Beispiels in Reihenfolge zurück.

Einschränkungen

1 ≤ Beispiele ≤ 1.000, 1 ≤ n ≤ 50

-100 ≤ jedes Merkmal, jedes Gewicht und der Bias ≤ 100

0 < threshold < 1

Beispiele

Beispiel 1
Eingabe:
bias = -1.0
samples = [
    [2.0, 1.0],
    [0.0, 0.0],
    [-1.0, -3.0]
]
weights = [1.5, -0.5]
threshold = 0.5

Erwartete Ausgabe:
expected = [1, 0, 0]
Eingabe:
double bias = -1.0;
std::vector<std::vector<double>> samples = {
    {2.0, 1.0},
    {0.0, 0.0},
    {-1.0, -3.0}
};
std::vector<double> weights = {1.5, -0.5};
double threshold = 0.5;

Erwartete Ausgabe:
std::vector<long long> expected = {1, 0, 0};
Eingabe:
double bias = -1.0;
double[][] samples = new double[][] {
    new double[] {2.0, 1.0},
    new double[] {0.0, 0.0},
    new double[] {-1.0, -3.0}
};
double[] weights = new double[] {1.5, -0.5};
double threshold = 0.5;

Erwartete Ausgabe:
long[] expected = new long[] {1, 0, 0};

Erläuterung

Beispiel 1: z = 3 - 0.5 - 1 = 1.5, p ≈ 0.818 → 1. Beispiel 2: z = -1, p ≈ 0.269 → 0. Beispiel 3: z = -1.5 + 1.5 - 1 = -1, p ≈ 0.269 → 0. Ergebnis: [1, 0, 0].

Beispiel 2
Eingabe:
bias = -2.0
samples = [
    [1.0],
    [2.0],
    [3.0]
]
weights = [1.0]
threshold = 0.7

Erwartete Ausgabe:
expected = [0, 0, 1]
Eingabe:
double bias = -2.0;
std::vector<std::vector<double>> samples = {
    {1.0},
    {2.0},
    {3.0}
};
std::vector<double> weights = {1.0};
double threshold = 0.7;

Erwartete Ausgabe:
std::vector<long long> expected = {0, 0, 1};
Eingabe:
double bias = -2.0;
double[][] samples = new double[][] {
    new double[] {1.0},
    new double[] {2.0},
    new double[] {3.0}
};
double[] weights = new double[] {1.0};
double threshold = 0.7;

Erwartete Ausgabe:
long[] expected = new long[] {0, 0, 1};

Erläuterung

Die Wahrscheinlichkeiten sind σ(-1) ≈ 0.269, σ(0) = 0.5 und σ(1) ≈ 0.731. Nur die letzte erreicht den Schwellenwert 0.7, also ist das Ergebnis [0, 0, 1].

Referenzen

Diese Aufgabe wurde für CodeUtility angepasst. Beachte die oben genannten Vorgaben und Einschränkungen.

Von anderen lernen

Community-Lösungen

Noch keine veröffentlichten Lösungen. Löse die Aufgabe und teile als Erster eine Lösung.