चुनौतियों पर वापस जाएँ
आसान 0 हल किए गए 0% स्वीकृति

लॉस फ़ंक्शन: MSE, MAE और क्रॉस-एंट्रॉपी

मीन स्क्वेयर्ड एरर, मीन एब्सोल्यूट एरर या बाइनरी क्रॉस-एंट्रॉपी से मापें कि मॉडल की भविष्यवाणियाँ कितनी गलत हैं।

आप क्या सीखेंगे

  • तीन तरीकों से अनुमान की त्रुटि मापना
  • log(0) से बचने के लिए प्रायिकताएँ सीमित करना
  • रिग्रेशन या क्लासिफ़िकेशन के लिए लॉस चुनना

समस्या

लॉस फ़ंक्शन मॉडल की गलतियों को एक ऐसी संख्या में बदल देता है जिसे कम करना है। तीन आम लॉस के लिए compute_loss(kind, predictions, targets) लागू करें, जहाँ n भविष्यवाणियों की संख्या है:

  • "mse" (मीन स्क्वेयर्ड एरर): (p - t)² का औसत
  • "mae" (मीन एब्सोल्यूट एरर): |p - t| का औसत
  • "binary_cross_entropy": [t × ln(p) + (1 - t) × ln(1 - p)] के औसत का ऋणात्मक। पहले हर भविष्यवाणी p को [0.0000001, 0.9999999] की सीमा में सीमित करें, ताकि लघुगणक कभी ln(0) न हो।

इनपुट

kind: "mse", "mae" या "binary_cross_entropy"।

predictions: मॉडल की भविष्यवाणियाँ।

targets: सही मान (समान लंबाई)। क्रॉस-एंट्रॉपी में ये 0 या 1 होते हैं और भविष्यवाणियाँ 0 और 1 के बीच होती हैं।

आउटपुट

लॉस को दशमलव संख्या के रूप में लौटाएँ।

सीमाएँ

1 ≤ लंबाई ≤ 1,000

-1,000 ≤ हर मान ≤ 1,000 (क्रॉस-एंट्रॉपी में 0 ≤ p ≤ 1 और t ∈ {0, 1})

उदाहरण

उदाहरण 1
इनपुट:
kind = "mse"
targets = [3.0, -0.5, 2.0]
predictions = [2.5, 0.0, 2.0]

अपेक्षित आउटपुट:
expected = 0.166667
इनपुट:
std::string kind = "mse";
std::vector<double> targets = {3.0, -0.5, 2.0};
std::vector<double> predictions = {2.5, 0.0, 2.0};

अपेक्षित आउटपुट:
double expected = 0.166667;
इनपुट:
string kind = "mse";
double[] targets = new double[] {3.0, -0.5, 2.0};
double[] predictions = new double[] {2.5, 0.0, 2.0};

अपेक्षित आउटपुट:
double expected = 0.166667;

व्याख्या

स्क्वेयर्ड एरर: 0.5² = 0.25, 0.5² = 0.25 और 0² = 0। इनका औसत 0.5 / 3 ≈ 0.166667 है।

उदाहरण 2
इनपुट:
kind = "binary_cross_entropy"
targets = [1.0, 0.0]
predictions = [0.9, 0.2]

अपेक्षित आउटपुट:
expected = 0.164252
इनपुट:
std::string kind = "binary_cross_entropy";
std::vector<double> targets = {1.0, 0.0};
std::vector<double> predictions = {0.9, 0.2};

अपेक्षित आउटपुट:
double expected = 0.164252;
इनपुट:
string kind = "binary_cross_entropy";
double[] targets = new double[] {1.0, 0.0};
double[] predictions = new double[] {0.9, 0.2};

अपेक्षित आउटपुट:
double expected = 0.164252;

व्याख्या

-(ln(0.9) + ln(1 - 0.2)) / 2 = -(-0.105361 - 0.223144) / 2 ≈ 0.164252। आत्मविश्वास से की गई सही भविष्यवाणियों का लॉस कम होता है।

कैसे हल करें

पहले खुद कोशिश करें, फिर एक-एक करके संकेत खोलें।

संकेत 1

हर loss predictions को targets से element by element compare करती है और फिर per-example errors का average लेती है.

संकेत 2

Cross-entropy के लिए logarithm लेने से पहले predictions को 0 और 1 से थोड़ा दूर clamp करें.

संकेत 3

Absolute value और squaring अलग हैं, और cross-entropy में target हर log term पर weight की तरह काम करता है.

अपेक्षित जटिलता

समय O(n), अतिरिक्त स्थान O(1)

संदर्भ

यह चुनौती CodeUtility के लिए अनुकूलित की गई है। ऊपर दिए गए स्टेटमेंट और सीमाओं का पालन करें।

दूसरों से सीखें

समुदाय समाधान

अभी तक कोई प्रकाशित समाधान नहीं। पहला साझा करने के लिए इस चुनौती को हल करें।