MultiLabel Ranking Metrics - ծածկույթի սխալ մեքենայական ուսուցման մեջ


MultiLabel մոդելների որակը գնահատելու համար անհրաժեշտ է օգտագործել MultiLabel Ranking չափանիշները, այդպիսի չափիչներից է Coverage Error-ը, որը քանակականացնում է դասակարգման մոդելի կարողությունը ծածկելու բոլոր համապատասխան պիտակները որոշակի օրինակի համար:

Բազմաթիվ պիտակների դասակարգման առաջադրանքները ներառում են մի քանի համապատասխան պիտակների վերագրում տվյալ օրինակին, օրինակ՝ պատկերների պիտակավորում կամ փաստաթղթերի դասակարգում: Այս հոդվածում մենք խորանում ենք ծածկույթի սխալի հայեցակարգի մեջ և ուսումնասիրում դրա նշանակությունը բազմապիտակ վարկանիշային մոդելների արդյունավետությունը գնահատելու համար:

Ի՞նչ է ծածկույթի սխալը:

Ծածկույթի սխալը չափիչ է, որն օգտագործվում է մեքենայական ուսուցման մեջ՝ գնահատելու բազմանշանակ վարկանիշային մոդելները: Այն չափում է մոդելի կարողությունը ծածկելու բոլոր համապատասխան պիտակները յուրաքանչյուր օրինակի համար: Ծածկույթի ավելի ցածր սխալը ցույց է տալիս ավելի լավ կատարողականություն, իսկ զրոը ցույց է տալիս կատարյալ ծածկույթ, որտեղ բոլոր իրական պիտակները ճիշտ են կանխատեսված:

Ծածկման սխալի մաթեմատիկական արտահայտությունը կարող է սահմանվել հետևյալ կերպ

Coverage Error = (1/N) * Σ |Yi - Ŷi|

Որտեղ −

  • N-ը ներկայացնում է գնահատման հավաքածուի դեպքերի ընդհանուր թիվը:

  • Yi-ն նշանակում է i-րդ օրինակի ճշմարիտ պիտակների բազմությունը:

  • Ŷi-ն նշանակում է i-րդ օրինակի համար կանխատեսված պիտակների բազմությունը:

  • |Yi - Ŷi| ներկայացնում է իրական պիտակների և կանխատեսված պիտակների բացարձակ տարբերությունը՝ նշելով i-րդ օրինակի համար բացակայող պիտակների թիվը:

Ամփոփելով բոլոր ատյանների բացարձակ տարբերությունները և դրանք բաժանելով դեպքերի ընդհանուր թվին (N), մենք ստանում ենք ծածկույթի միջին սխալը, որը գնահատում է համապատասխան պիտակները ճշգրիտ ծածկելու մոդելի կարողությունը:

Ինչպե՞ս հաշվարկել MultiLabel Ranking Metrics - ծածկույթի սխալ:

Ստորև բերված են այն քայլերը, որոնք մենք կհետևենք՝ հաշվարկելու MultiLabel Ranking Metrics - Ծածկման սխալ -

  • Ձեռք բերեք իրական պիտակները և կանխատեսված պիտակները ձեր տվյալների բազայի յուրաքանչյուր օրինակի համար:

  • Որոշեք ձեր տվյալների հավաքածուի օրինակների և պիտակների քանակը:

  • Նախաձեռնեք զանգված կամ ցուցակ՝ յուրաքանչյուր օրինակի համար ծածկույթի սխալը պահելու համար:

  • Յուրաքանչյուր օրինակի համար −

    • Բացահայտեք ճշմարիտ պիտակները՝ գտնելով այն ինդեքսները, որտեղ իսկական պիտակների արժեքները 1 են:

    • Բացահայտեք կանխատեսված պիտակները՝ գտնելով այն ցուցանիշները, որտեղ կանխատեսված պիտակների արժեքները 1 են:

    • Հաշվարկեք ճշմարիտ պիտակների և կանխատեսված պիտակների միջև սահմանված տարբերությունը՝ բացակայող պիտակները գտնելու համար:

    • Այդ օրինակի համար պահեք բացակայող պիտակների թիվը ծածկույթի սխալների զանգվածում:

  • Հաշվեք ծածկույթի միջին սխալը՝ հաշվի առնելով ծածկույթի սխալի զանգվածի միջինը:

  • Ստացված արժեքը ներկայացնում է ծածկույթի սխալի չափանիշը ձեր բազմապիտակ վարկանիշային մոդելի համար:

Օրինակ

Ստորև բերված են ծրագրավորման երկու օրինակներ, մեկը՝ ստեղծելով մեր սեփական տվյալների բազան, իսկ մյուսը՝ օգտագործելով ներկառուցված տվյալների բազա:

import numpy as np

def coverage_error(y_true, y_pred):
   num_samples, num_labels = y_true.shape
   coverage = np.zeros(num_samples)

   for i in range(num_samples):
      true_labels = set(np.where(y_true[i])[0])
      predicted_labels = set(np.where(y_pred[i])[0])
      coverage[i] = len(true_labels - predicted_labels)

   return np.mean(coverage)

# Example usage
y_true = np.array([[1, 0, 1, 0],
                  [0, 1, 0, 1],
                  [1, 0, 0, 1]])

y_pred = np.array([[1, 0, 1, 0],
                  [0, 1, 1, 0],
                  [1, 0, 0, 0]])

error = coverage_error(y_true, y_pred)
print("Coverage Error:", error)

Արդյունք

Coverage Error: 0.6666666666666666

Ծածկույթի սխալի միավորը 0,66666666 է, ինչը նշանակում է, որ միջին հաշվով մենք պետք է ներառենք ամենաբարձր վարկանիշ ունեցող պիտակների 66%-ը, որպեսզի ծածկենք բոլոր իրական պիտակները: Սա համեմատաբար լավ միավոր է, բայց այն կարելի է բարելավել՝ օգտագործելով այլ մոդել կամ կարգավորելով մոդելի հիպերպարամետրերը:

Մենք ունենք երեք օրինակ գնահատման հավաքածուում, որոնք նշվում են y_true և y_pred տողերով: Յուրաքանչյուր օրինակ ունի չորս պիտակ:

Առաջին ատյանի համար −

  • Ճշմարիտ պիտակները [0, 2] են (1 արժեք ունեցող տարրերի ինդեքսները y_true-ի առաջին շարքում):

  • Կանխատեսված պիտակները [0, 2] են (1 արժեք ունեցող տարրերի ինդեքսները y_pred-ի առաջին շարքում):

  • Ճշմարիտ և կանխատեսված պիտակների միջև տարբերությունը դատարկ բազմություն է ([]), քանի որ երկու բազմությունները նույնն են:

  • Այսպիսով, ծածկույթի սխալն առաջին ատյանի համար 0 է:

Երկրորդ ատյանի համար −

  • Ճշմարիտ պիտակները [1, 3] են (1 արժեք ունեցող տարրերի ինդեքսները y_true-ի երկրորդ շարքում):

  • Կանխատեսված պիտակները [1, 2] են (1 արժեք ունեցող տարրերի ինդեքսները y_pred-ի երկրորդ շարքում):

  • Ճշմարիտ և կանխատեսված պիտակների միջև տարբերությունը [3] է:

  • Այսպիսով, ծածկույթի սխալը երկրորդ ատյանի համար 1 է:

Երրորդ օրինակի համար 

  • Ճշմարիտ պիտակները [0, 3] են (1 արժեք ունեցող տարրերի ինդեքսները y_true-ի երրորդ շարքում):

  • Կանխատեսված պիտակները [0] են (1 արժեք ունեցող տարրերի ինդեքսները y_pred-ի երրորդ շարքում):

  • Ճշմարիտ և կանխատեսված պիտակների միջև տարբերությունը [3] է:

  • Այսպիսով, երրորդ ատյանի ծածկույթի սխալը 1 է:

Ընդհանուր ծածկույթի սխալը հաշվարկելու համար մենք վերցնում ենք ծածկույթի սխալների միջինը բոլոր դեպքերի համար −

(0 + 1 + 1)/3=2/3=0.6666666666666666

Հետևաբար, օրինակի ծածկույթի սխալը 0,6666666666666666 է, ինչը ցույց է տալիս, որ միջինում 3 դեպքերից 2-ում մոդելի կանխատեսումներում բացակայում է մեկ պիտակ՝ համեմատած իրական պիտակների հետ:

Ծրագիր՝ օգտագործելով ներկառուցված տվյալների բազա (Iris) −

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MultiLabelBinarizer
import numpy as np

def coverage_error(y_true, y_pred):
    num_samples, num_labels = y_true.shape
    coverage = np.zeros(num_samples)

    for i in range(num_samples):
      true_labels = set(np.where(y_true[i])[0])
      predicted_labels = set(np.where(y_pred[i])[0])
      coverage[i] = len(true_labels - predicted_labels)

   return np.mean(coverage)

# Load the Iris dataset
iris = load_iris()

# Data cleaning and preprocessing
X = iris.data
y = iris.target.reshape(-1, 1)

# Convert labels to binary form
mlb = MultiLabelBinarizer()
y = mlb.fit_transform(y)

# Split the dataset into train and test sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Example usage
error = coverage_error(y_test, y_test)
print("Coverage Error:", error)
Coverage Error: 0.0

Վերոնշյալ օրինակում ծածկույթի սխալը 0.0 է, ինչը նշանակում է, որ բազմանշանակ դասակարգման մոդելը հիանալի կերպով ծածկում է բոլոր համապատասխան պիտակները յուրաքանչյուր օրինակի համար՝ Iris տվյալների հավաքածուի թեստային հավաքածուում: 0.0 ծածկույթի սխալը ցույց է տալիս, որ մոդելի կանխատեսումներում բացակայող կամ սխալ պիտակներ չկան, երբ համեմատվում են իրական պիտակների հետ:

Եզրակացություն

Եզրափակելով, ծածկույթի սխալը արժեքավոր չափիչ է մեքենայական ուսուցման մեջ բազմանշանակ վարկանիշային մոդելների կատարողականությունը գնահատելու համար: Այն քանակականացնում է մոդելի կարողությունը՝ ճշգրիտ կանխատեսելու բոլոր համապատասխան պիտակները յուրաքանչյուր օրինակի համար: Ավելի ցածր ծածկույթի սխալի ձեռքբերումը ցույց է տալիս ավելի բարձր ճշգրտություն և արդյունավետություն բազմապիտակ վարկանիշային առաջադրանքներում: