Știu că există o posibilitate în Keras cu dicționarul de parametri class_weights la potrivire, dar nu am găsit niciun exemplu. Ar fi cineva atât de amabil să ofere unul?

clasei

Apropo, în acest caz, practica adecvată este pur și simplu să pondereze clasa minoritară proporțional cu subreprezentarea sa?

8 Răspunsuri 8

Dacă vorbiți despre cazul obișnuit, în care rețeaua dvs. produce o singură ieșire, atunci presupunerea dvs. este corectă. Pentru a vă forța algoritmul să trateze fiecare instanță a clasa 1 ca 50 de cazuri de clasa 0 trebuie să:

Definiți un dicționar cu etichetele dvs. și cu greutățile asociate acestora

Alimentați dicționarul ca parametru:

EDITĂ: "tratează fiecare caz de clasa 1 ca 50 de cazuri de clasa 0"înseamnă că în funcția de pierdere atribuiți o valoare mai mare acestor instanțe. Prin urmare, pierderea devine o medie ponderată, unde greutatea fiecărui eșantion este specificată de greutate_clasă și clasa sa corespunzătoare.

greutate_clasă: Indici opționali de clasare a dicționarului (numere întregi) la o valoare de greutate (float), utilizată pentru ponderarea funcției de pierdere (numai în timpul antrenamentului).

Puteți pur și simplu să implementați class_weight din sklearn:

Să importăm mai întâi modulul

Pentru a calcula clasa de greutate la următoarele

În al treilea și în sfârșit adăugați-l la montajul modelului

Atenţie: Am editat această postare și am schimbat numele variabilei din class_weight în class_weights pentru a nu suprascrie modulul importat. Ajustați corespunzător atunci când copiați codul din comentarii.

Folosesc acest tip de regulă pentru class_weight:

math.log netezește greutățile pentru cursuri foarte dezechilibrate! Aceasta returnează:

class_weight este în regulă, dar, așa cum a spus @Aalok, acest lucru nu va funcționa dacă sunteți clase de codare multi-etichetate. În acest caz, utilizați sample_weight:

sample_weight: matrice opțională de aceeași lungime ca x, conținând greutăți de aplicat pierderii modelului pentru fiecare mostră. În cazul datelor temporale, puteți trece o matrice 2D cu formă (probe, secvență_lungime), pentru a aplica o greutate diferită fiecărui pas de timp al fiecărei probe. În acest caz, trebuie să vă asigurați că specificați sample_weight_mode = "temporal" în compile () .

sample_weights este obișnuit asigurați o greutate pentru fiecare probă de antrenament. Asta înseamnă că ar trebui să treceți o matrice 1D cu același număr de elemente ca probele de antrenament (indicând greutatea pentru fiecare dintre aceste probe).

class_weights este folosit pentru a furniza un greutate sau părtinire pentru fiecare clasă de ieșire. Aceasta înseamnă că ar trebui să treceți o pondere pentru fiecare clasă pe care încercați să o clasificați.

sample_weight trebuie să primească o matrice numpy, deoarece forma sa va fi evaluată.