Gekissimo.net - Opi ansaitsemaan rahaa webilläsi Internetissä!

Epätasapainoisen datan käsittely luokkapainoilla logistisessa regressiossa

Seuraava artikkeli auttaa sinua: Epätasapainoisen datan käsittely luokkapainoilla logistisessa regressiossa

Logistinen regressio on yksi valvotuista koneoppimistekniikoista, joita käytetään luokitustehtävissä. Luokittelutietojoukoissa on suurimman osan ajasta luokkaepätasapaino tietyssä luokassa, jossa on enemmän näytteitä, ja tietyissä luokissa, joissa näytteitä on hyvin vähemmän. Epätasapainoisen tietojoukon käyttäminen mallin rakentamiseen selittäisi väärän ennusteen ja olisi edullisempaa luokille, joissa on enemmän näytteitä. Joten tässä artikkelissa yritetään ymmärtää luokkapainojen merkitys logistisessa regressiossa ja miksi luokkapainojen tasapaino on välttämätön luotettavan mallin saamiseksi.

Sisällysluettelo

  1. Mitkä ovat luokkapainot?
  2. Epätasapainoiseen luokkapainoon liittyvät ongelmat
  3. Luokkapainojen merkityksen ymmärtäminen
  4. Vaiheet luokan painon laskemiseen
  5. Yhteenveto

Mitkä ovat luokkapainot?

Luokkapainot ovat terminologiaa, jota käytetään luokitustehtävissä, joissa jokaiselle tietojoukon luokalle annetaan tietyt painotukset kunkin luokan esiintymistiheyden mukaan. Joten luokkapainot ovat vastuussa siitä, että kaikille luokille annetaan samat painot kaltevuuspäivityksissä. Epätasapainoisten luokkapainojen käyttö on vastuussa poikkeamisesta tiedoissa eniten esiintyviin luokkiin. Luotettavamman ja puolueettoman luokitusmallin saamiseksi on tärkeää, että luokkapainot jakautuvat tasaisesti. Luokkien painojen tasainen jakautuminen tuottaa myös erilaisia ​​parametreja, kuten tarkkuuden, muistamisen ja F1-pisteet, koska luokkapainot olisivat tasapainossa.

Yritetään nyt ymmärtää luokkapainojen epätasapainoon liittyvät ongelmat.

Etsitkö täydellistä arkistoa tietotieteessä käytettävistä Python-kirjastoista, katso tästä.

Epätasapainoiseen luokkapainoon liittyvät ongelmat

Suurin epätasapainoiseen luokkapainoon liittyvä ongelma on tarkkuus. Maailmassa tuotettu tarkkuus on korkea, mutta tärkeintä on tarkkuuden oikeellisuus. Epätasapainoluokkapainoille saatu tarkkuus olisi yleensä korkea, koska se olisi vinoutunut eniten esiintyvään luokkaan, koska se ottaisi huomioon korkeammat luokkapainot.

Oletetaan, että terveydenhuollon tiedot tai yrityslähtöiset tiedot ovat käytössä ja luokkapainot ovat epätasapainossa. Joten jos tietojen luokkaepätasapainoon ei puututa, se aiheuttaisi mallin väärintulkintoja. Lisäksi tietyt parametrit, kuten vääriä positiivisia ja vääriä negatiivisia, osoittautuvat 0:ksi, koska malli on enemmän taipuvainen kohti usein esiintyvää luokkaa.

Luokkapainojen merkityksen ymmärtäminen

Ymmärtääksemme luokkapainojen tärkeyden, tarkastelkaamme luokitustietojoukkoa, jonka kohdemuuttujajakaumassa on epätasapainoa.

🔥 Empfohlen:  Kuinka Sigmoid tarjoaa nopeasti kasvavan ympäristön datan ja analytiikan ammattilaisille

Tässä käytetään terveydenhuollon tietojoukkoa ja analysoidaan kohdemuuttujan epätasainen jakautuminen laskentakaavion avulla.

sns.countplot(y)

Tässä nähdään, että kohdemuuttuja on erittäin epätasapainoinen, kun luokalla 0 on korkeammat luokkapainot verrattuna luokkaan 1. Rakennetaan siis logistinen regressio epätasapainotavoitemuuttujan kanssa ja yritetään arvioida tiettyjä parametreja mallista.

X=df.drop(‘stroke’,axis=1) y=df[‘stroke’]
from sklearn.model_selection import train_test_split X_train,X_test,Y_train,Y_test=train_test_split(X,y,test_size=0.2,random_state=42) from sklearn.linear_model import LogisticRegression lr_imb=Logistic_stamblrrste=4randommb_stambllrrersion. sovi(X_train, Y_train) y_pred=lr_imb_model.predict(X_test) print(‘Epätasapainoisen logistisen regression luokitusraportti \n’,classification_report(Y_test,y_pred))

plot_confusion_matrix(lr_imb_model,X_test,Y_test)

Luokitteluraportista voidaan havaita, että harmoninen keskiarvo (F1-pisteet) on enemmän painokkaammalla luokalla ja pienempipainoisella luokalla harmoninen keskiarvo ja muut parametrit ovat 0. Lisäksi malli on tuottanut tarkkuuden pistemäärä 94%, mikä tarkoittaa, että malli tekisi vääriä ennusteita ja olisi taipuvaisempia usein esiintyviin luokkiin. Tämä on siis suurin ongelma, joka liittyy epätasapainoisiin luokkapainoihin, ja luokkapainot tasapainotetaan, jotta saadaan puolueeton ja luotettavampi malli.

Tasapainottavat luokan painot

Luokkapainot voidaan tasapainottaa logistisen regressiomallin avulla ilmoittamalla luokka_paino-parametri tasapainotetuksi logistisessa regressiomallissa. Luokkapainot voidaan tasapainottaa automaattisesti ohittamalla vakioparametri, joka on tasapainotettu luokkapainoissa tai satunnaiset painot kullekin luokalle voidaan antaa jokaiselle datan kategorialle.

Katsotaanpa nyt, kuinka tasapainottaa painot käyttämällä scikit learning -kirjaston ennalta määritettyä “tasapainotettua parametria”.

“Balanced”-parametrin käyttäminen luokkapainoille

Nyt logistiseen regressiomalliin asennetaan luokkapainot vakioparametrina “tasapainotettuna”. Parametri on helposti saatavilla scikit-learn-malleissa. Katsotaanpa, kuinka tätä parametria käytetään, hankitaan logistinen regressiomalli ja arvioidaan tietyt parametrit.

lr_bal=LogisticRegression(random_state=42,class_weight=”balanced”) lr_bal_model=lr_bal.fit(X_train,Y_train) y_pred_bal=lr_bal_model.predict(X_test) print(‘Luokitteluraportti tasapainoisille luokille) )

plot_confusion_matrix(lr_bal_model,X_test,Y_test)

Tässä nähdään, että kun luokkapainoja on käytetty tasapainotettuina logistisen regressiomallin sovittamisessa, voimme nähdä, että tarkkuus on heikentynyt verrattuna epätasapainomalliin, mutta alemman esiintyvän luokan harmoninen keskiarvo on kasvanut. Myös muut parametrit, kuten tarkkuus, muistaminen ja F1-pisteet, ovat lisääntyneet, mikä auttaa koneoppimisen insinöörejä tekemään sopivasti tulkintoja mallista.

Tätä mallia voidaan edelleen hypervirittää, jotta saadaan entistä parempia parametreja ja suorituskykyä. Lisäksi, jos sekaannusmatriisi myös arvioidaan, voimme nähdä, että pystymme tuottamaan oikeat parametrit, kuten Väärä positiivinen ja väärä negatiivinen, mikä osoittaa, että malli ei ole taipuvainen tai vinoutunut usein esiintyvään luokkaan.

🔥 Empfohlen:  SEOPressorin tekninen erinomaisuus – kasvumme versiosta 1 versioon 5.

Luokkapainojen tasapainottaminen sanakirjan avulla parametrina

Luokkien painot tasapainotetaan käyttämällä sanakirjaa, jossa sanakirjan avaimet ovat tietojoukon luokat ja sanakirjan avaimet olisivat painojen prosenttiosuudet, jotka määritettäisiin jokaiselle dataluokalle. Tarkastellaanpa siis sanakirjan käyttämistä luokkapainojen parametrina ja arvioikaamme tiettyjä mallin parametreja.

lr_bal2=LogisticRegression(random_state=42,class_weight={0: 0.2,1: 0.8}).fit(X_train,Y_train) y_pred_bal2=lr_bal2.predict(X_test) print(classification_report(Y_test,y_pred_bal2))

plot_confusion_matrix(lr_bal2,X_test,Y_test)

Joten kun on käytetty satunnaista painojakaumaa tiedoissa olevien luokkien kesken, olemme nähneet mallin tarkkuuden parantuneen verrattuna “tasapainotetun” parametrin käyttöön, mutta tässä näytetään luokkapainojen tasapaino prosenttiosuuksilla 80 ja 20. Joten jos luokat ovat tasa-arvoisia tai lähes yhtä suuria, malli tuottaa samanlaisen suorituskyvyn kuin “balanced”-parametrilla saatu malli.

Joten näin epätasapaino ja luokkapainojen tasapaino vaikuttavat mallin suorituskykyyn. Yleisesti ottaen on hyvä käytäntö käyttää tasapainotettua dataa luotettavan mallin saamiseksi ja oikeiden ennusteiden saamiseksi mallista. Yritetään nyt ymmärtää, että luokkapainoja lasketaan eri luokan painoparametreille.

Luokkapainojen laskemisen vaiheet

Kaikkien luokitteluongelmien luokkapainot voidaan saada käyttämällä scikit-learnin standardikirjastoja. Mutta on tärkeää ymmärtää, kuinka scikit-learn laskee sisäisesti luokkapainot. Luokkapainot lasketaan yleensä alla olevan kaavan mukaan.

w(j)=n/Kn(j)

w(j) = luokkien painot

n = havaintojen lukumäärä

K = Luokkien kokonaismäärä

n(j) = Havaintojen lukumäärä kussakin luokassa

Joten scikit-learn utils -kirjasto käyttää sisäisesti tätä kaavaa luokkapainojen laskemiseen eri parametrijoukkojen kanssa, joita käytetään luokkapainoissa. Katsotaanpa nyt, kuinka scikitLearn utils -kirjastoa käytetään luokkapainojen laskemiseen eri tapauksissa.

Epätasapainoluokan painojen laskeminen

Luokkapainojen laskemiseen käytetään sisäänrakennettua “compute_class_weight” -funktiota alla esitetyllä tavalla ja vastaavasti vähemmistö- ja enemmistöluokkien luokkapainot voidaan laskea alla olevan kuvan mukaisesti.

# Laske painot sklearnilla

sklearn_weights1 = class_weight.compute_class_weight(class_weight=Ei mitään,y=df[‘stroke’],classes=np.unique(y)) sklearn_weights1

Tässä molemmille luokille annetut painot ovat samat. Lasketaanpa kunkin luokan painot.

# Vertaa arvoja print(f’Enemmistöluokan painot ovat {sklearn_weights1[0]*2:.3f}’) print(f’vähemmistöluokan painot ovat {sklearn_weights1[1]*2:.3f}’)

Tässä näemme, että epätasapainoisissa luokissa sekä vähemmistöluokille että enemmistöluokille annetut painot ovat samat, mikä selittää mallin vinoutumisen enemmistöluokkia kohtaan.

🔥 Empfohlen:  7 parasta datan visualisointityökalua yrityksellesi vuonna 2023

Luokkapainojen laskeminen “balanced”-parametrin käytön jälkeen

Luokkapainot voidaan laskea käyttämällä “balanced”-parametria alla kuvatulla tavalla.

sklearn_weights2 = class_weight.compute_class_weight(class_weight=”balanced”,y=df[‘stroke’],classes=np.unique(y)) Sklearn_weights2

Tässä nähdään, että luokalle 1 annetaan enemmän painotusta, koska siinä on vähemmän näytteitä verrattuna luokkaan 0. Yritetään siis saada painot, jotka voidaan helposti tulkita alla esitetyllä tavalla.

# Vertaa arvoja print(f’Enemmistöluokan painot ovat {sklearn_weights2[0]*2:.3f}’) print(f’vähemmistöluokan painot ovat {sklearn_weights2[1]*2:.3f}’)

Joten tässä voimme nähdä, että “tasapainoinen” parametri on antanut enemmän painoarvoa vähemmistöluokkalle verrattuna enemmistöluokkaan, mikä auttaa meitä saamaan paremman luotettavan mallin.

Luokkapainojen laskeminen käyttämällä sanakirjaa parametrina

Tässä luokkapainot lasketaan antamalla satunnaiset prosenttiosuudet painojen jakautumisesta kuhunkin dataluokkaan, kuten alla on esitetty.

# Laske painot käyttämällä sklearn dict1={0: 0.2,1: 0.8} sklearn_weights3 = class_weight.compute_class_weight(class_weight=dict1,y=df[‘stroke’],classes=np.unique(y)) sklearn_weights3

Tästä nähdään, että määritetyllä tavalla 20 % painotuksista käytetään luokkaan 0 ja 80 % painotuksista tietojoukon luokkaan 1. Yritetään nyt tulkita luokan painot alla esitetyllä tavalla ymmärtämisen helpottamiseksi.

print(f’Enemmistöluokan painot ovat {sklearn_weights3[0]*2:.3f}’) print(f’vähemmistöluokan painot ovat {sklearn_weights3[1]*2:.3f}’)

Näin ollen tietojoukon eri luokkien luokkapainot pakotetaan käyttämällä kunkin luokan sanakirjassa olevaa painotusta.

Yhteenveto

Luokkapainoilla on erittäin tärkeä rooli kaikissa luokittelukoneoppimismalleissa. Joten tässä artikkelissa olemme nähneet, kuinka luokkapainot ja luokkapainojen tasapaino ovat tärkeitä luotettavan mallin saamiseksi. Luokan painotasapaino on erittäin tärkeää, jotta saadaan puolueeton malli, jota voidaan käyttää oikeita ennusteita varten. Luokkapainojen epätasapaino selittää virheelliset ennusteet ja väärät tulkinnat mallista. Siksi on erittäin tärkeää tasapainottaa luokkapainot luotettavan mallin saamiseksi, jota voidaan käyttää reaaliaikaisiin ennusteisiin.

Viite

Table of Contents