Tutte le sfide
Facile 0 risolte 0% di accettazione

Logistic Regression Prediction

Classify samples as 0 or 1 by passing a weighted sum through the sigmoid and comparing it to a threshold.

Cosa imparerai

  • Turn a weighted sum into a probability
  • Classify with a decision threshold
  • Understand binary classifiers

Problema

Mostra traduzione

Logistic regression is a linear model for yes/no questions. For each sample it computes a probability and turns it into a class:

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

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

Input

samples: One row of n features per sample.

weights: n weights.

bias: The bias.

threshold: The probability needed to predict class 1 (strictly between 0 and 1).

Output

Return the predicted class (0 or 1) of each sample, in order.

Vincoli

1 ≤ samples ≤ 1,000, 1 ≤ n ≤ 50

-100 ≤ each feature, weight and bias ≤ 100

0 < threshold < 1

Esempi

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

Output atteso:
expected = [1, 0, 0]
Input:
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;

Output atteso:
std::vector<long long> expected = {1, 0, 0};
Input:
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;

Output atteso:
long[] expected = new long[] {1, 0, 0};

Spiegazione

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

Esempio 2
Input:
bias = -2.0
samples = [
    [1.0],
    [2.0],
    [3.0]
]
weights = [1.0]
threshold = 0.7

Output atteso:
expected = [0, 0, 1]
Input:
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;

Output atteso:
std::vector<long long> expected = {0, 0, 1};
Input:
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;

Output atteso:
long[] expected = new long[] {0, 0, 1};

Spiegazione

The probabilities are σ(-1) ≈ 0.269, σ(0) = 0.5 and σ(1) ≈ 0.731. Only the last one reaches the 0.7 threshold, so the result is [0, 0, 1].

Riferimenti

Questa sfida è adattata per CodeUtility. Segui la traccia e i vincoli sopra.

Impara dagli altri

Soluzioni della community

Nessuna soluzione pubblicata. Risolvi questa sfida per condividere la prima.