Çfarë do të thotë metrikë e cilësisë në mësimin e makinerive. Trajnimi i renditjes

Sipas daljes së klientëve të operatorit të telekomit.


Shkarkoni bibliotekat e nevojshme dhe shikoni të dhënat

importoni panda si pd importoni matplotlib.pyplot si plt nga matplotlib.pylab importoni rc, importoni komplot si sns nga sklearn. parapërpunim nga sklearn.metrics import precision_recall_curve, klasifikim_raport nga sklearn.model_selection. p.sh. ../data/telecom_churn.csv")


df.kokë(5)

Parapërpunimi i të dhënave

# Hartimi i kolonave binare # dhe dummy-kodojnë gjendjen (për thjeshtësi, është më mirë të mos e bëni këtë për modelet prej druri) d = ("Po" : 1, "Jo" : 0) df["Plani ndërkombëtar"] = df[ " Plani ndërkombëtar"].map(d) df["Plani i postës zanore"] = df["Plani i postës zanore"].map(d) df["Churn"] = df["Churn"].atype("int64 " ) le = LabelEncoder() df["State"] = le.fit_transform(df["State"]) ohe = OneHotEncoder(sparse=False) encoded_state = ohe.fit_transform(df["State"].values.reshape( - 1, 1)) tmp = pd.Korniza e të dhënave(gjendja e_kodifikuar, kolonat=["gjendja " + str(i) për i në varg(gjendje_e koduar.formë)]) df = pd.concat(, boshti=1)

Saktësia, saktësia dhe kujtimi

Përpara se të kalojmë në vetë metrikat, duhet të prezantohet një koncept i rëndësishëm për të përshkruar këto metrika në aspektin e gabimeve të klasifikimit - matrica e konfuzionit(matrica e gabimit).
Supozoni se kemi dy klasa dhe një algoritëm që parashikon nëse secili objekt i përket njërës prej klasave, atëherë matrica e gabimit të klasifikimit do të duket kështu:


Pozitiv i vërtetë (TP) Pozitiv i rremë (FP)
False Negative (FN) Negativ i vërtetë (TN)

Këtu është përgjigja e algoritmit mbi objektin dhe është etiketa e vërtetë e klasës në këtë objekt.
Kështu, ekzistojnë dy lloje të gabimeve të klasifikimit: False Negative (FN) dhe False Positive (FP).


Trajnimi i algoritmit dhe ndërtimi i matricës së gabimeve

X = df.drop("Churn", aksi=1) y = df["Churn"] # Ndani kampionin në tren dhe testoni, të gjitha metrikat do të vlerësohen në grupin e të dhënave të testit X_train, X_test, y_train, y_test = train_test_split( X, y , stratify=y, test_size=0.33, random_state=42) # Trajnoni regresionin logjistik vendas lr = LogisticRegression(random_state=42) lr.fit(X_train, y_train) # Përdorni funksionin për të ndërtuar matricën e gabimit nga sklear def plot_confusion_matrix(cm, classes , normalize=False, title="(!LANG:Matrica e konfuzionit", cmap=plt.cm.Blues): """ This function prints and plots the confusion matrix. Normalization can be applied by setting `normalize=True`. """ plt.imshow(cm, interpolation="nearest", cmap=cmap) plt.title(title) plt.colorbar() tick_marks = np.arange(len(classes)) plt.xticks(tick_marks, classes, rotation=45) plt.yticks(tick_marks, classes) if normalize: cm = cm.astype("float") / cm.sum(axis=1)[:, np.newaxis] print("Normalized confusion matrix") else: print("Confusion matrix, without normalization") print(cm) thresh = cm.max() / 2. for i, j in itertools.product(range(cm.shape), range(cm.shape)): plt.text(j, i, cm, horizontalalignment="center", color="white" if cm > thresh else "black") plt.tight_layout() plt.ylabel("True label") plt.xlabel("Predicted label") font = {"size" : 15} plt.rc("font", **font) cnf_matrix = confusion_matrix(y_test, lr.predict(X_test)) plt.figure(figsize=(10, 8)) plot_confusion_matrix(cnf_matrix, classes=["Non-churned", "Churned"], title="Matrica e konfuzionit") plt.savefig("conf_matrix.png") plt.show()!}


Saktësia

Një metrikë intuitive, e dukshme dhe pothuajse e papërdorur është saktësia - përqindja e përgjigjeve të sakta të algoritmit:



Kjo metrikë është e padobishme në problemet me klasa të pabarabarta, dhe kjo është e lehtë të tregohet me një shembull.


Le të themi se duam të vlerësojmë performancën e një filtri të postës së padëshiruar. Ne kemi 100 emaile jo të padëshiruara, 90 prej të cilave klasifikuesi ynë përcaktoi saktë (Negativ i vërtetë = 90, Pozitiv i rremë = 10) dhe 10 emaile të padëshiruara, 5 prej të cilave gjithashtu u përcaktuan saktë nga klasifikuesi (Pozitiv i vërtetë = 5, Negativ i rremë = pesë).
Pastaj saktësia:



Megjithatë, nëse thjesht parashikojmë të gjitha emailet si jo të padëshiruara, marrim një saktësi më të lartë:



Në të njëjtën kohë, modeli ynë nuk ka fare fuqi parashikuese, pasi fillimisht donim të identifikonim emailet e padëshiruara. Kalimi nga një metrikë e përbashkët për të gjitha klasat në tregues individualë të cilësisë së klasës do të na ndihmojë ta kapërcejmë këtë.

Precision, rikujtim dhe F-masë

Për të vlerësuar cilësinë e algoritmit në secilën nga klasat, ne prezantojmë veçmas saktësinë e metrikës (saktësinë) dhe rikujtimin (plotësinë).




Saktësia mund të interpretohet si përqindja e objekteve të quajtura pozitive nga klasifikuesi dhe në të njëjtën kohë janë vërtet pozitive, dhe kujtimi tregon se çfarë përqindje të objekteve të një klase pozitive nga të gjithë objektet e një klase pozitive gjeti algoritmi.



Është futja e saktësisë që nuk na lejon të shkruajmë të gjitha objektet në një klasë, pasi në këtë rast marrim një rritje të nivelit False Positive. Recall demonstron aftësinë e algoritmit për të zbuluar klasën e dhënë në përgjithësi, dhe saktësia është aftësia për të dalluar këtë klasë nga klasat e tjera.


Siç kemi theksuar më herët, ekzistojnë dy lloje gabimesh klasifikimi: False Pozitive dhe False Negative. Në statistikë, lloji i parë i gabimit quhet gabim i tipit I, dhe lloji i dytë quhet gabim i tipit II. Në detyrën tonë për përcaktimin e daljes së abonentëve, gabimi i llojit të parë do të jetë gabimi i një pajtimtari besnik për një abonent që largohet, pasi hipoteza jonë zero është që asnjë nga pajtimtarët nuk largohet, dhe ne e hedhim poshtë këtë hipotezë. Prandaj, një gabim i llojit të dytë do të jetë "kalimi" i pajtimtarit në dalje dhe pranimi i gabuar i hipotezës zero.


Saktësia dhe tërheqja nuk varen, ndryshe nga saktësia, nga raporti i klasave dhe për këtë arsye janë të zbatueshme në kushtet e mostrave të çekuilibruara.
Shpesh në praktikën reale, detyra është të gjesh ekuilibrin optimal (për klientin) midis këtyre dy metrikave. Një shembull klasik është problemi i përcaktimit të daljes së klientëve.
Është e qartë se ne nuk mund të gjejmë të gjitha duke tronditur klientët dhe vetëm ato. Por, duke përcaktuar strategjinë dhe burimin për mbajtjen e klientit, ne mund të zgjedhim pragjet e nevojshme për saktësi dhe rikujtim. Për shembull, ne mund të përqendrohemi në mbajtjen vetëm të klientëve me marzh të lartë ose atyre që kanë më shumë gjasa të largohen, pasi jemi të kufizuar në burimet e qendrës së thirrjeve.


Zakonisht, kur optimizoni hiperparametrat e një algoritmi (për shembull, në rastin e përsëritjes mbi një rrjet GridSearchCV) përdor një metrikë, përmirësimin e së cilës presim ta shohim në kampionin e provës.
Ka disa mënyra të ndryshme kombinoni saktësinë dhe rikujtimin në një kriter të përgjithshëm të cilësisë. F-masa (në përgjithësi) - saktësia mesatare harmonike dhe kujtimi:



Në këtë rast, ajo përcakton peshën e saktësisë në metrikë, dhe në të njëjtën kohë mesataren harmonike (me një faktor 2, në mënyrë që në rastin e saktësisë = 1 dhe rikujtimit = 1 të ketë )
Masa F arrin maksimumin e saj në tërheqje dhe saktësi të barabartë me një dhe është afër zeros nëse një nga argumentet është afër zeros.
sklearn ka tipar i dobishëm _metrika.klasifikimi raporti, i cili kthen rikujtimin, saktësinë dhe masën F për secilën nga klasat, si dhe numrin e rasteve të secilës klasë.


raport = classification_raport(y_test, lr.predict(X_test), target_names=["Non-churned", "Churned"]) print(raport)
klasës saktësi kujtoj rezultati f1 mbështetje
I pa përdredhur 0.88 0.97 0.93 941
E përvëluar 0.60 0.25 0.35 159
mesatare/gjithsej 0.84 0.87 0.84 1100

Këtu duhet të theksohet se në rastin e detyrave me klasa të pabalancuara që mbizotërojnë në praktikën reale, shpesh është e nevojshme të përdoren teknika për modifikimin artificial të grupit të të dhënave për të barazuar raportin e klasave. Ka shumë prej tyre, dhe ne nuk do t'i prekim ato, ju mund të shikoni disa metoda dhe të zgjidhni atë që i përshtatet detyrës suaj.

AUC-ROC dhe AUC-PR

Kur konvertojmë përgjigjen reale të algoritmit (zakonisht probabilitetin për t'i përkatur një klase, shih veçmas SVM) në një etiketë binar, duhet të zgjedhim një prag në të cilin 0 bëhet 1. Një prag prej 0.5 duket i natyrshëm dhe i afërt, por është jo gjithmonë rezulton të jetë optimale, për shembull, në mungesën e lartpërmendur të ekuilibrit të klasës.


Një mënyrë për të vlerësuar modelin në tërësi, pa u lidhur me një prag specifik, është AUC-ROC (ose ROC AUC) - zona ( A rea U nder C urve) nën lakoren e gabimit ( R marrës O duke vepruar C kurba karakteristike). Kjo kurbë është një vijë nga (0.0) në (1.1) në koordinatat e normës së vërtetë pozitive (TPR) dhe normës pozitive të rreme (FPR):




Ne e dimë tashmë TPR, kjo është plotësia, dhe FPR tregon se çfarë përqindje të objekteve të klasës negative algoritmi parashikoi gabimisht. Në rastin ideal, kur klasifikuesi nuk bën gabime (FPR = 0, TPR = 1), do të marrim sipërfaqen nën kurbë të barabartë me një; përndryshe, kur klasifikuesi nxjerr rastësisht probabilitetet e klasës, AUC-ROC do të priret në 0.5 pasi klasifikuesi do të nxjerrë të njëjtën sasi TP dhe FP.
Çdo pikë në grafik korrespondon me zgjedhjen e një pragu. Zona nën kurbë në këtë rast tregon cilësinë e algoritmit (më shumë, aq më mirë), përveç kësaj, pjerrësia e vetë kurbës është e rëndësishme - ne duam të maksimizojmë TPR duke minimizuar FPR, që do të thotë se kurba jonë në mënyrë ideale duhet të priret të pika (0,1).


Kodi i vizatimit të kurbës ROC

sns.set(font_scale=1.5) sns.set_color_codes("muted") plt.figure(figsize=(10, 8)) fpr, tpr, pragjet = roc_curve(y_test, lr.predict_proba(X_test)[:,1], pos_label=1) lw = 2 plt.plot(fpr, tpr, lw=lw, label="lakorja ROC ") plt.plot(, ) plt.xlim() plt.ylim() plt.xlabel("Norma false pozitive ") plt.ylabel("Norma e vërtetë pozitive") plt.title("Kurba ROC") plt.savefig("ROC.png") plt.show()



Kriteri AUC-ROC është rezistent ndaj klasave të çekuilibruara (spoiler: mjerisht, jo gjithçka është kaq e thjeshtë) dhe mund të interpretohet si probabiliteti që një objekt pozitiv i zgjedhur rastësisht të renditet më lart nga klasifikuesi (do të ketë një probabilitet më të lartë për të qenë pozitiv ) se një objekt negativ i zgjedhur rastësisht.


Merrni parasysh problemin e mëposhtëm: duhet të zgjedhim 100 dokumente përkatëse nga 1 milion dokumente. Ne kemi mësuar nga makina dy algoritme:

  • Algoritmi 1 kthen 100 dokumente, 90 prej të cilave janë relevante. Në këtë mënyrë,

  • Algoritmi 2 kthen 2000 dokumente, 90 prej të cilave janë relevante. Në këtë mënyrë,


Me shumë mundësi, do të zgjidhnim algoritmin e parë, i cili prodhon shumë pak False Pozitive në krahasim me konkurrentin e tij. Por ndryshimi në Normën False Pozitive midis këtyre dy algoritmeve jashtëzakonisht i vogël - vetëm 0,0019. Kjo është pasojë e faktit që AUC-ROC mat proporcionin e False Positive në raport me Negativin e Vërtetë, dhe në detyrat ku klasa e dytë (më e madhe) nuk është aq e rëndësishme për ne, mund të mos japë një pamje plotësisht të përshtatshme kur krahasojmë algoritmet. .


Për të korrigjuar situatën, le të kthehemi në plotësinë dhe saktësinë:

  • Algoritmi 1

  • Algoritmi 2


Tashmë ekziston një ndryshim domethënës midis dy algoritmeve - 0,855 në saktësi!


Precisioni dhe rikujtimi përdoren gjithashtu për të paraqitur kurbën dhe, ngjashëm me AUC-ROC, për të gjetur zonën nën të.



Këtu mund të vërehet se në grupe të vogla të dhënash, zona nën kurbën PR mund të jetë tepër optimiste, sepse llogaritet duke përdorur metodën e trapezit, por zakonisht ka të dhëna të mjaftueshme në detyra të tilla. Për detaje mbi marrëdhëniet midis AUC-ROC dhe AUC-PR, shihni këtu.

Humbje logjistike

Qëndrimi i ndarë është funksioni i humbjes logjistike, i përcaktuar si:



ku është përgjigja e algoritmit në objektin i-të, është etiketa e klasës së vërtetë në objektin i-të dhe është madhësia e mostrës.


Detajet në lidhje me interpretimin matematikor të funksionit të humbjes logjistike janë shkruar tashmë në postimin për modelet lineare.
Kjo metrikë nuk shfaqet shpesh në kërkesat e biznesit, por shpesh në detyrat "kaggle".
Në mënyrë intuitive, mund të mendohet minimizimi i logloss si një problem i maksimizimit të saktësisë duke penalizuar parashikimet e gabuara. Megjithatë, duhet theksuar se logloss penalizon rëndë besimin e klasifikuesit në përgjigjen e gabuar.


Konsideroni një shembull:


def logloss_crutch(y_true, y_pred, eps=1e-15): return - (y_true * np.log(y_pred) + (1 - y_true) * np.log(1 - y_pred)) print("Logloss me klasifikim të pasigurt %f " % logloss_crutch(1, 0.5)) >> Logloss me klasifikim të pasigurt 0.693147 print("Logloss me klasifikim të sigurt dhe përgjigje të saktë %f" % logloss_crutch(1, 0.9)) >> Logloss me klasifikim të sigurt dhe përgjigje të saktë 0.105361 print(" Logloss për klasifikim të sigurt dhe përgjigje të gabuar %f" % logloss_crutch(1, 0.1)) >> Logloss për klasifikim të sigurt dhe përgjigje të gabuar 2.302585

Vini re sa u rrit në mënyrë dramatike logloss me përgjigjen e gabuar dhe klasifikimin e sigurt!
Prandaj, gabimi në një objekt mund të japë një përkeqësim të konsiderueshëm të gabimit të përgjithshëm në mostër. Objekte të tilla shpesh janë të jashtzakonshme që duhen mbajtur mend për të filtruar ose konsideruar veçmas.
Çdo gjë bie në vend nëse vizatoni një grafik logloss:



Mund të shihet se sa më afër zeros të jetë përgjigja e algoritmit për të vërtetën bazë = 1, aq më e lartë është vlera e gabimit dhe sa më e pjerrët rritet kurba.

Për të përmbledhur:

  • Në rastin e klasifikimit me shumë klasa, duhet të monitoroni me kujdes matjet e secilës prej klasave dhe të ndiqni logjikën e vendimit detyrat, në vend të optimizimit të metrikës
  • Në rastin e klasave të pabarabarta, është e nevojshme të zgjidhni një bilanc të klasave për trajnim dhe një metrikë që do të pasqyrojë saktë cilësinë e klasifikimit.
  • dhe madrugado për ndihmën e tyre në përgatitjen e artikullit.

Hej Habr!

Në detyrat mësimi i makinës metrikat përdoren për të vlerësuar cilësinë e modeleve dhe për të krahasuar algoritme të ndryshme, dhe përzgjedhja dhe analiza e tyre është një pjesë e domosdoshme e punës së një Satanisti të të dhënave.

Në këtë artikull, ne do të shikojmë disa kritere të cilësisë në problemet e klasifikimit, do të diskutojmë se çfarë është e rëndësishme kur zgjedh një metrikë dhe çfarë mund të shkojë keq.

Metrika në problemet e klasifikimit

Për demonstrim veçori të dobishme sklearin dhe një paraqitje vizuale e matjeve, ne do të përdorim grupin e të dhënave të klientëve të operatorit tonë të telekomit, të cilin e takuam në artikullin e parë të kursit.

Shkarkoni bibliotekat e nevojshme dhe shikoni të dhënat

Importoni panda si pd importoni matplotlib.pyplot si plt nga matplotlib.pylab importoni rc, grafikoni importin detar si sns nga sklearn.preprocessing importoni LabelEncoder, OneHotEncoder nga sklearn.model_selection import cross_val_score nga sklearn. nga sklearn.metrics import precision_recall_curve, classification_report nga sklearn.model_selection import train_test_split df = pd.read_csv("../../data/telecom_churn.csv")

Df.head (5)

Parapërpunimi i të dhënave

# Hartimi i kolonave binare # dhe dummy-kodojnë gjendjen (për thjeshtësi, është më mirë të mos e bëni këtë për modelet prej druri) d = ("Po" : 1, "Jo" : 0) df["Plani ndërkombëtar"] = df[ " Plani ndërkombëtar"].map(d) df["Plani i postës zanore"] = df["Plani i postës zanore"].map(d) df["Churn"] = df["Churn"].atype("int64 " ) le = LabelEncoder() df["State"] = le.fit_transform(df["State"]) ohe = OneHotEncoder(sparse=False) encoded_state = ohe.fit_transform(df["Gjendja"].values.reshape( - 1, 1)) tmp = pd.Korniza e të dhënave(gjendja e_kodifikuar, kolonat=["gjendja " + str(i) për i në varg(gjendje_e koduar.formë)]) df = pd.concat(, boshti=1)

Saktësia, saktësia dhe kujtimi

Përpara se të kalojmë në vetë metrikat, duhet të prezantohet një koncept i rëndësishëm për të përshkruar këto metrika në aspektin e gabimeve të klasifikimit - matrica e konfuzionit(matrica e gabimit).
Supozoni se kemi dy klasa dhe një algoritëm që parashikon nëse secili objekt i përket njërës prej klasave, atëherë matrica e gabimit të klasifikimit do të duket kështu:

Pozitiv i vërtetë (TP) Pozitiv i rremë (FP)
False Negative (FN) Negativ i vërtetë (TN)

është përgjigja e algoritmit në objekt, dhe

Etiketa e vërtetë e klasës në këtë objekt.
Kështu, ekzistojnë dy lloje të gabimeve të klasifikimit: False Negative (FN) dhe False Positive (FP).

Trajnimi i algoritmit dhe ndërtimi i matricës së gabimeve

X = df.drop("Churn", bosht=1) y = df["Churn"] # Ndani kampionin në tren dhe testoni, të gjitha metrikat do të vlerësohen në grupin e të dhënave të testit X_train, X_test, y_train, y_test = train_test_split( X, y , stratify=y, test_size=0.33, random_state=42) # Trajnoni regresionin logjistik vendas lr = LogisticRegression(random_state=42) lr.fit(X_train, y_train) # Përdorni funksionin për të ndërtuar matricën e gabimit nga sklear dokumentacioni def plot_confusion_matrix(cm, classes , normalize=False, title="(!LANG:Matrica e konfuzionit", cmap=plt.cm.Blues): """ This function prints and plots the confusion matrix. Normalization can be applied by setting `normalize=True`. """ plt.imshow(cm, interpolation="nearest", cmap=cmap) plt.title(title) plt.colorbar() tick_marks = np.arange(len(classes)) plt.xticks(tick_marks, classes, rotation=45) plt.yticks(tick_marks, classes) if normalize: cm = cm.astype("float") / cm.sum(axis=1)[:, np.newaxis] print("Normalized confusion matrix") else: print("Confusion matrix, without normalization") print(cm) thresh = cm.max() / 2. for i, j in itertools.product(range(cm.shape), range(cm.shape)): plt.text(j, i, cm, horizontalalignment="center", color="white" if cm > thresh else "black") plt.tight_layout() plt.ylabel("True label") plt.xlabel("Predicted label") font = {"size" : 15} plt.rc("font", **font) cnf_matrix = confusion_matrix(y_test, lr.predict(X_test)) plt.figure(figsize=(10, 8)) plot_confusion_matrix(cnf_matrix, classes=["Non-churned", "Churned"], title="Matrica e konfuzionit") plt.savefig("conf_matrix.png") plt.show()!}

Saktësia

Një metrikë intuitive, e dukshme dhe pothuajse e papërdorur është saktësia - përqindja e përgjigjeve të sakta të algoritmit:

Kjo metrikë është e padobishme në problemet me klasa të pabarabarta dhe është e lehtë të tregohet me një shembull.

Le të themi se duam të vlerësojmë performancën e një filtri të postës së padëshiruar. Ne kemi 100 emaile jo të padëshiruara, 90 prej të cilave klasifikuesi ynë përcaktoi saktë (Negativ i vërtetë = 90, Pozitiv i rremë = 10) dhe 10 emaile spam, 5 prej të cilave u përcaktuan saktë nga klasifikuesi (Pozitiv i vërtetë = 5, Negativ i rremë = 5).
Pastaj saktësia:

Megjithatë, nëse thjesht parashikojmë të gjitha emailet si jo të padëshiruara, marrim një saktësi më të lartë:

Në të njëjtën kohë, modeli ynë nuk ka fare fuqi parashikuese, pasi fillimisht donim të identifikonim emailet e padëshiruara. Kalimi nga një metrikë e përbashkët për të gjitha klasat në tregues individualë të cilësisë së klasës do të na ndihmojë ta kapërcejmë këtë.

Precision, rikujtim dhe F-masë

Për të vlerësuar cilësinë e algoritmit për secilën nga klasat veç e veç, ne prezantojmë saktësinë e metrikës (saktësinë) dhe rikujtimin (plotësinë).

Saktësia mund të interpretohet si përqindja e objekteve të quajtura pozitive nga klasifikuesi dhe në të njëjtën kohë janë vërtet pozitive, dhe kujtimi tregon se çfarë përqindje të objekteve të një klase pozitive nga të gjithë objektet e një klase pozitive gjeti algoritmi.

Është futja e saktësisë që nuk na lejon të shkruajmë të gjitha objektet në një klasë, pasi në këtë rast marrim një rritje të nivelit False Positive. Recall demonstron aftësinë e algoritmit për të zbuluar fare një klasë të caktuar, ndërsa saktësia demonstron aftësinë për të dalluar këtë klasë nga klasat e tjera.

Siç kemi theksuar më herët, ekzistojnë dy lloje gabimesh klasifikimi: False Pozitive dhe False Negative. Në statistikë, lloji i parë i gabimit quhet gabim i tipit I, dhe lloji i dytë quhet gabim i tipit II. Në detyrën tonë për përcaktimin e daljes së abonentëve, gabimi i llojit të parë do të jetë gabimi i një pajtimtari besnik për një abonent në dalje, pasi hipoteza jonë zero është se asnjë nga pajtimtarët nuk del jashtë, dhe ne e hedhim poshtë këtë hipotezë. Prandaj, një gabim i llojit të dytë do të jetë "kalimi" i pajtimtarit në dalje dhe pranimi i gabuar i hipotezës zero.

Saktësia dhe tërheqja nuk varen, ndryshe nga saktësia, nga raporti i klasave dhe për këtë arsye janë të zbatueshme në kushtet e mostrave të çekuilibruara.
Shpesh në praktikën reale, detyra është të gjesh ekuilibrin optimal (për klientin) midis këtyre dy metrikave. Një shembull klasik është problemi i përcaktimit të daljes së klientëve.
Është e qartë se ne nuk mund të gjejmë të gjitha duke tronditur klientët dhe vetëm ato. Por pasi të kemi përcaktuar strategjinë dhe burimin për mbajtjen e klientit, ne mund të zgjedhim pragjet e nevojshme për saktësi dhe rikujtim. Për shembull, ne mund të përqendrohemi në mbajtjen vetëm të klientëve me marzh të lartë ose atyre që kanë më shumë gjasa të largohen, pasi jemi të kufizuar nga burimet e qendrës së thirrjeve.

Zakonisht, kur optimizoni hiperparametrat e një algoritmi (për shembull, në rastin e përsëritjes mbi një rrjet GridSearchCV) përdor një metrikë, përmirësimin e së cilës presim ta shohim në kampionin e provës.
Ka disa mënyra të ndryshme për të kombinuar saktësinë dhe rikujtimin në një masë të përgjithshme të cilësisë. Masa F (në përgjithësi

) - saktësi mesatare harmonike dhe kujtim:

në këtë rast përcakton peshën e saktësisë në metrikë dhe, kur

kjo është mesatarja harmonike (me një faktor 2, kështu që në rastin e saktësisë = 1 dhe rikujtimit = 1 kemi

)
Masa F arrin maksimumin e saj në tërheqje dhe saktësi të barabartë me një dhe është afër zeros nëse një nga argumentet është afër zeros.
sklearn ka një funksion të dobishëm _metrics.classification raporti i cili kthen rikujtimin, saktësinë dhe matjen F për secilën nga klasat, si dhe numrin e rasteve të secilës klasë.

Raport = classification_raport(y_test, lr.predict(X_test), target_names=["Non-Churned", "Churned"]) print(raport)

klasës saktësi kujtoj rezultati f1 mbështetje
I pa përdredhur 0.88 0.97 0.93 941
E përvëluar 0.60 0.25 0.35 159
mesatare/gjithsej 0.84 0.87 0.84 1100

Këtu duhet të theksohet se në rastin e detyrave me klasa të pabalancuara që mbizotërojnë në praktikën reale, shpesh është e nevojshme të përdoren teknika për modifikimin artificial të grupit të të dhënave për të barazuar raportin e klasave. Ka shumë prej tyre dhe ne nuk do t'i prekim, ju mund të shikoni disa metoda dhe të zgjidhni atë që i përshtatet detyrës suaj.

AUC-ROC dhe AUC-PR

Kur konvertojmë përgjigjen reale të algoritmit (zakonisht probabilitetin për t'i përkatur një klase, shih veçmas SVM) në një etiketë binar, duhet të zgjedhim një prag në të cilin 0 bëhet 1. Një prag prej 0.5 duket i natyrshëm dhe i afërt, por është jo gjithmonë rezulton të jetë optimale, për shembull, në mungesën e lartpërmendur të ekuilibrit të klasës.

Një mënyrë për të vlerësuar modelin në tërësi, pa u lidhur me një prag specifik, është AUC-ROC (ose ROC AUC) - zona ( A rea U nder C urve) nën lakoren e gabimit ( R marrës O duke vepruar C kurba karakteristike). Kjo kurbë është një vijë nga (0.0) në (1.1) në koordinatat e normës së vërtetë pozitive (TPR) dhe normës pozitive të rreme (FPR):

Ne e dimë tashmë TPR, kjo është plotësia, dhe FPR tregon se çfarë përqindje të objekteve të klasës negative algoritmi parashikoi gabimisht. Në rastin ideal, kur klasifikuesi nuk bën gabime (FPR = 0, TPR = 1), do të marrim sipërfaqen nën kurbë të barabartë me një, përndryshe, kur klasifikuesi prodhon rastësisht probabilitetet e klasës, AUC-ROC do të priret të 0.5, pasi klasifikuesi do të lëshojë të njëjtën sasi TP dhe FP.
Çdo pikë në grafik korrespondon me zgjedhjen e një pragu. Zona nën kurbë në këtë rast tregon cilësinë e algoritmit (më shumë, aq më mirë), përveç kësaj, pjerrësia e vetë kurbës është e rëndësishme - ne duam të maksimizojmë TPR duke minimizuar FPR, që do të thotë se kurba jonë në mënyrë ideale duhet të priret të pika (0,1).

Kodi i vizatimit të kurbës ROC

sns.set(font_scale=1.5) sns.set_color_codes("muted") plt.figure(figsize=(10, 8)) fpr, tpr, pragjet = roc_curve(y_test, lr.predict_proba(X_test)[:,1], pos_label=1) lw = 2 plt.plot(fpr, tpr, lw=lw, label="lakorja ROC ") plt.plot(, ) plt.xlim() plt.ylim() plt.xlabel("Norma false pozitive ") plt.ylabel("Norma e vërtetë pozitive") plt.title("Kurba ROC") plt.savefig("ROC.png") plt.show()

Kriteri AUC-ROC është rezistent ndaj klasave të çekuilibruara (spoiler: mjerisht, jo gjithçka është kaq e thjeshtë) dhe mund të interpretohet si probabiliteti që një objekt pozitiv i zgjedhur rastësisht të renditet më lart nga klasifikuesi (do të ketë një probabilitet më të lartë për të qenë pozitiv) sesa një objekt negativ i zgjedhur rastësisht.

Merrni parasysh problemin e mëposhtëm: duhet të zgjedhim 100 dokumente përkatëse nga 1 milion dokumente. Ne kemi mësuar nga makina dy algoritme:

  • Algoritmi 1 kthen 100 dokumente, 90 prej të cilave janë relevante. Në këtë mënyrë,
  • Algoritmi 2 kthen 2000 dokumente, 90 prej të cilave janë relevante. Në këtë mënyrë,

Me shumë mundësi, do të zgjidhnim algoritmin e parë, i cili prodhon shumë pak False Pozitive në krahasim me konkurrentin e tij. Por ndryshimi në Normën False Pozitive midis këtyre dy algoritmeve jashtëzakonisht i vogël - vetëm 0,0019. Kjo është pasojë e faktit që AUC-ROC mat proporcionin e False Positive në raport me Negativin e Vërtetë, dhe në detyrat ku klasa e dytë (më e madhe) nuk është aq e rëndësishme për ne, mund të mos japë një pamje plotësisht të përshtatshme kur krahasojmë algoritmet. .

Për të korrigjuar situatën, le të kthehemi në plotësinë dhe saktësinë:

  • Algoritmi 1
  • Algoritmi 2

Tashmë ekziston një ndryshim domethënës midis dy algoritmeve - 0,855 në saktësi!

Precisioni dhe rikujtimi përdoren gjithashtu për të paraqitur kurbën dhe, ngjashëm me AUC-ROC, për të gjetur zonën nën të.

Këtu mund të vërehet se në grupe të vogla të dhënash, zona nën kurbën PR mund të jetë tepër optimiste, sepse llogaritet duke përdorur metodën e trapezit, por zakonisht ka të dhëna të mjaftueshme në detyra të tilla. Për detaje mbi marrëdhëniet midis AUC-ROC dhe AUC-PR, shihni këtu.

Humbje logjistike

Qëndrimi i ndarë është funksioni i humbjes logjistike, i përcaktuar si:

është përgjigja e algoritmit ndaj

objekt ohm,

etiketa e vërtetë e klasës në

objekt ohm, dhe

Madhësia e mostrës.

Detajet në lidhje me interpretimin matematikor të funksionit të humbjes logjistike janë shkruar tashmë në postimin për modelet lineare.
Kjo metrikë nuk shfaqet shpesh në kërkesat e biznesit, por shpesh në detyrat "kaggle".
Në mënyrë intuitive, mund të mendohet minimizimi i logloss si një problem i maksimizimit të saktësisë duke penalizuar parashikimet e gabuara. Megjithatë, duhet theksuar se logloss penalizon rëndë besimin e klasifikuesit në përgjigjen e gabuar.

Konsideroni një shembull:

Def logloss_crutch(y_true, y_pred, eps=1e-15): return - (y_true * np.log(y_pred) + (1 - y_true) * np.log(1 - y_pred)) print("Logloss me klasifikim të pasigurt %f " % logloss_crutch(1, 0.5)) >> Logloss me klasifikim të pasigurt 0.693147 print("Logloss me klasifikim të sigurt dhe përgjigje të saktë %f" % logloss_crutch(1, 0.9)) >> Logloss me klasifikim të sigurt dhe përgjigje të saktë 0.105361 print(" Logloss për klasifikim të sigurt dhe përgjigje të gabuar %f" % logloss_crutch(1, 0.1)) >> Logloss për klasifikim të sigurt dhe përgjigje të gabuar 2.302585

Vini re sa u rrit në mënyrë dramatike logloss me përgjigjen e gabuar dhe klasifikimin e sigurt!
Prandaj, gabimi në një objekt mund të japë një përkeqësim të konsiderueshëm të gabimit të përgjithshëm në mostër. Objekte të tilla shpesh janë të jashtzakonshme që duhen mbajtur mend për të filtruar ose konsideruar veçmas.
Çdo gjë bie në vend nëse vizatoni një grafik logloss:

Mund të shihet se sa më afër zeros të jetë përgjigja e algoritmit për të vërtetën bazë = 1, aq më e lartë është vlera e gabimit dhe sa më e pjerrët rritet kurba.

Duke përmbledhur:

  • Në rastin e klasifikimit me shumë klasa, duhet të monitoroni me kujdes matjet e secilës prej klasave dhe të ndiqni logjikën e vendimit detyrat, në vend të optimizimit të metrikës
  • Në rastin e klasave të pabarabarta, është e nevojshme të zgjidhni një bilanc të klasave për trajnim dhe një metrikë që do të pasqyrojë saktë cilësinë e klasifikimit.
  • Zgjedhja e metrikës duhet të bëhet duke u fokusuar në fushën e temës, duke përpunuar paraprakisht të dhënat dhe, ndoshta, segmentimin (si në rastin e ndarjes në klientë të pasur dhe të varfër)

Lidhje të dobishme

  1. Kursi nga Evgeny Sokolov: Seminar mbi zgjedhjen e modeleve (ka informacion mbi matjet e problemeve të regresionit)
  2. Problemet për AUC-ROC nga A.G. Dyakonova
  3. Mund të lexoni më shumë rreth metrikave të tjera në kaggle. Një lidhje me konkursin ku është përdorur është shtuar në përshkrimin e çdo metrike
  4. Prezantimi nga Bogdan Melnyk i njohur si ld86 rreth të mësuarit mbi mostrat e pabalancuara

Ky kapitull paraqet metoda të njohura për vlerësimin e cilësisë së një modeli klasifikimi, të cilat përdoren edhe në punime të tjera mbi këtë temë. Janë dhënë përshkrimi i tyre dhe vërtetimi i matjeve të përdorura për këtë vlerësim.

Metrikat e vlerësimit të cilësisë

Saktësia e plotë (saktësia)

Kjo metrikë është një nga metrikat më të thjeshta dhe në të njëjtën kohë universale për vlerësimin e cilësisë së algoritmeve të klasifikimit. Vlera e këtij koeficienti llogaritet si raport i objekteve të klasifikuara saktë nga numri i përgjithshëm i objekteve në mostër. Kjo metrikë është e njohur për shkak të thjeshtësisë së saj dhe aftësisë për t'u shtrirë në çdo numër klasash. Disavantazhi kryesor i kësaj metrike është se ai u jep të njëjtën peshë të gjitha dokumenteve, gjë që mund të jetë e pasaktë në rast të një paragjykimi të fortë të dokumenteve në kampionin e trajnimit ndaj një ose më shumë klasave. Kjo metrikë mund të ketë një vlerë të lartë, por klasifikuesi brenda së njëjtës klasë mund të shfaqet jashtëzakonisht cilesi e dobet puna. Në të njëjtën kohë, metrika nuk e sinjalizon këtë në asnjë mënyrë.

Saktësia, kujtimi dhe masa F

Metrikat si precisioni (precisioni) dhe rikujtimi (kujtimi) për herë të parë u përdorën gjerësisht në vlerësimin e cilësisë së sistemeve që zgjidhin problemin e rikthimit të informacionit. Saktësia e sistemit brenda një klase është proporcioni i objekteve që në të vërtetë i përkasin një klase të caktuar në raport me të gjithë objektet e caktuara nga sistemi në këtë klasë. Plotësia shprehet si proporcion i objekteve të gjetura nga klasifikuesi që i përkasin klasës në raport me të gjitha objektet e kësaj klase. Tabela 4 është një tabelë kontingjente e një klase të veçantë, ku TP (pozitive e vërtetë) është një zgjidhje e vërtetë pozitive, TN (negative e vërtetë) është një zgjidhje e vërtetë negative, FP (pozitive e rreme) është një zgjidhje pozitive false dhe FN (negative e rreme) është vendim i rremë-negativ.

Tabela 1 - Tabela e kontigjencës së klasës së objektit

Pra, saktësia dhe kujtimi llogariten si:

Masa F kombinon informacionin në lidhje me saktësinë dhe plotësinë e algoritmit që vlerësohet. Ai llogaritet si mesatare harmonike e treguesve të saktësisë dhe të rikujtimit:

Për shkak të faktit se masa F llogaritet veçmas për secilën klasë, është e përshtatshme ta përdorni atë për të kërkuar dhe analizuar gabime specifike të algoritmit, për të vlerësuar një klasifikim me disa klasa. Në të njëjtën kohë, në rastin e një numri të madh klasash, nevojitet një karakteristikë që do të grumbullonte plotësinë dhe saktësinë mbi të gjitha klasat dhe të karakterizonte sjelljen e përgjithshme të sistemit. Në këtë punim, për këtë qëllim përdoren vlerat e agreguara në vijim: preciziteti makro (precision makro), i cili llogaritet si mesatarja aritmetike e saktësisë për të gjitha klasat, rikujtimi makro (makro rikujtimi), i cili llogaritet si mesatarja aritmetike. të rikujtimit për të gjitha klasat, dhe makro F-masë (Macro F-score), që është mesatarja harmonike ndërmjet tyre.

Vleresimi kryq

Një nga metodat më të zakonshme për kryerjen e testimit të plotë dhe vlerësimin e performancës së algoritmeve të ndryshme të mësimit të makinerive është verifikimi i kryqëzuar. Për një mostër të pavarur kjo metodë ju lejon të merrni një vlerësim të paanshëm të probabilitetit të gabimit, në kontrast me gabimin mesatar në kampionin e trajnimit, i cili mund të jetë një vlerësim i njëanshëm i probabilitetit të gabimit për shkak të përshtatjes së tepërt të algoritmit. Një avantazh tjetër i kësaj procedure është aftësia për të marrë një vlerësim të probabilitetit të një gabimi algoritmi, në mungesë të një kampioni kontrolli të krijuar posaçërisht për testim.

Supozoni se është një grup përshkrimesh të veçorive të objekteve në të cilat specifikohet një mostër e fundme precedentësh, ku është një grup i kufizuar klasash. Është dhënë një hartë që lidh një mostër arbitrare të precedentëve me një algoritëm. Pastaj performanca e algoritmit për një mostër arbitrare të precedentëve vlerësohet duke përdorur funksionalitetin e cilësisë:

ku është një funksion jo negativ që kthen vlerën e gabimit të algoritmit duke pasur parasysh etiketën e saktë të klasës.

Çdo shkencëtar i të dhënave punon me sasi të mëdha të dhënash çdo ditë. Besohet se rreth 60% - 70% e kohës merret nga faza e parë e rrjedhës së punës: pastrimi, filtrimi dhe konvertimi i të dhënave në një format të përshtatshëm për aplikimin e algoritmeve të mësimit të makinerive. Në fazën e dytë, kryhet parapërpunimi dhe trajnimi i drejtpërdrejtë i modeleve. Në artikullin e sotëm, ne do të përqendrohemi në hapin e dytë të procesit dhe do të shikojmë teknikat e ndryshme dhe praktikat më të mira që rezultojnë nga pjesëmarrja ime në mbi 100 gara të mësimit të makinerive. Përkundër faktit se konceptet e përshkruara janë të një natyre mjaft të përgjithshme, ato do të jenë të dobishme në zgjidhjen e shumë problemeve specifike.

Të gjithë shembujt e kodit janë shkruar në Python!

Të dhënat

Përpara aplikimit të algoritmeve të mësimit të makinerive, të dhënat duhet të konvertohen në një paraqitje tabelare. Ky proces, i paraqitur në figurën më poshtë, është më kompleksi dhe më kërkon shumë kohë.

Të dhënat në bazën e të dhënave - të dhënat në bazën e të dhënave. Data Munging - filtrim i të dhënave. Të dhëna të dobishme - të dhëna të dobishme. Konvertimi i të dhënave - konvertimi i të dhënave. Tabular Data - të dhëna tabelare. Të dhënat - variabla (veçori) të pavarura. Etiketat janë variabla të varura (ndryshoret e synuara).

Pasi të dhënat janë tabeluar, ato mund të përdoren për të trajnuar modelet. Pamja e tabelës është përfaqësimi më i zakonshëm i të dhënave në mësimin e makinerive dhe nxjerrjen e të dhënave. Rreshtat e tabelave janë objekte të veçanta (vëzhgime). Kolonat e tabelës përmbajnë variabla (veçori) të pavarura, të shënuara X, dhe shënohen variablat e varur (objektiv). y. Në varësi të klasës së detyrës, variablat e synuar mund të përfaqësohen nga një ose më shumë kolona.

Llojet e ndryshoreve të synuara

Variablat e synuar përcaktojnë klasën e detyrës dhe mund të përfaqësohen nga një nga opsionet e mëposhtme:

  • Një kolonë me vlera binare: problemi i klasifikimit me dy klasa (klasifikimi binar), çdo objekt i përket vetëm një klase.
  • Një kolonë me vlera reale: Problemi i regresionit, parashikohet një vlerë.
  • Kolona të shumta me vlera binare: problem i klasifikimit me shumë klasa, çdo objekt i përket vetëm një klase.
  • Kolona të shumta me vlera reale: Problemi i regresionit, parashikohen vlera të shumëfishta.
  • Kolona të shumta me vlera binare: problemi i klasifikimit me shumë etiketa, një objekt mund t'i përkasë disa klasave.

Metrikë

Kur zgjidhni ndonjë problem të mësimit të makinës, është e nevojshme të jeni në gjendje të vlerësoni rezultatin, domethënë nevojitet një metrikë. Për shembull, për një problem klasifikimi me dy klasa, zona nën lakoren ROC (ROC AUC) zakonisht përdoret si metrikë. Në rastin e klasifikimit me shumë klasa, zakonisht përdoret ndër-entropia kategorike. Në rastin e regresionit, është gabimi mesatar në katror (MSE).

Ne nuk do t'i shqyrtojmë metrikat në detaje, pasi ato mund të jenë mjaft të ndryshme dhe zgjidhen për një detyrë specifike.

Bibliotekat

Hapi i parë është instalimi i bibliotekave bazë që kërkohen për të kryer llogaritjet, si p.sh i mprehtë Dhe scipy. Pastaj mund të filloni të instaloni bibliotekat më të njohura për analizën e të dhënave dhe mësimin e makinerive:

  • Eksplorimi dhe transformimi i të dhënave: pandat(http://pandas.pydata.org/).
  • Një gamë e gjerë algoritmesh të ndryshme të mësimit të makinerive: scikit-mësoj(http://scikit-learn.org/stable/).
  • Zbatimi më i mirë i rritjes së gradientit: xgboost(https://github.com/dmlc/xgboost).
  • Rrjetet nervore: keras(http://keras.io/).
  • Vizualizimi: matplotlib(http://matplotlib.org/).
  • Treguesi i progresit të ekzekutimit: tqdm(https://pypi.python.org/pypi/tqdm).

Duhet thënë që nuk e përdor Anakonda(https://www.continuum.io/downloads). Anakonda kombinon shumicën e bibliotekave të njohura dhe thjeshton shumë procesin e instalimit, por më duhet më shumë liri. Ti vendos. 🙂

Korniza e mësimit të makinerisë

Në vitin 2015, unë prezantova konceptin e një kuadri automatik të mësimit të makinerive. Sistemi është ende në zhvillim, por do të dalë së shpejti. Struktura e kornizës, e cila do të shërbejë si bazë për paraqitje të mëtejshme, është paraqitur në figurën më poshtë.

Figura nga publikimi: Thakur A., ​​Kron-Grimberge A. AutoCompete: një kornizë për garat në mësimin e makinerive. (A. Thakur dhe A. Krohn-Grimberghe, AutoCompete: A Framework for Machine Learning Competitions.)

Në hyrje, korniza merr të dhëna që janë konvertuar më parë në një pamje tabele. Vijat rozë tregojnë drejtimin për rastin më të thjeshtë.

Hapi i parë është përcaktimi i klasës së detyrës. Kjo mund të bëhet duke analizuar variablin e synuar. Detyra mund të jetë një klasifikim ose regresion, klasifikimi mund të jetë me dy klasa ose me shumë klasa, klasat mund të mbivendosen ose jo. Pasi të përcaktohet klasa e detyrave, ne e ndajmë grupin e të dhënave origjinale në dy pjesë dhe marrim një grup trajnimi (grup trajnimi) dhe një grup validimi (grup i vlefshmërisë), siç tregohet në figurën më poshtë.

Në rast se kemi të bëjmë me klasifikim, ndarja e të dhënave duhet të kryhet në atë mënyrë që në grupet rezultuese raporti i numrit të objekteve që u përkasin klasave të ndryshme t'i përgjigjet këtij raporti për grupin e të dhënave origjinale (ndarja e shtresuar). Kjo mund të bëhet lehtësisht me klasën StratifiedKFold bibliotekat scikit-mësoj.

Për problemin e regresionit, ndarja e zakonshme duke përdorur klasën KFold, e cila gjendet edhe në bibliotekë scikitmësojnë.

Përveç kësaj, për problemin e regresionit, ekzistojnë metoda më komplekse të ndarjes së të dhënave që sigurojnë të njëjtën shpërndarje të ndryshores së synuar në grupet rezultuese. Këto qasje janë lënë në shqyrtimin e vetë lexuesit.

Në shembullin e kodit të mësipërm, madhësia e grupit të vlefshmërisë ( madhësia_vlerësuese) është 10% e të dhënave origjinale. Kjo vlerë duhet të zgjidhet bazuar në sasinë e të dhënave fillestare.

Pas ndarjes së të dhënave, të gjitha operacionet e aplikuara në grupin e trajnimit duhet të ruhen dhe më pas të aplikohen në grupin e vlefshmërisë. Seti i vlefshmërisë nuk duhet të kombinohet kurrë me grupin e trajnimit. Nëse e bëjmë këtë, do të marrim rezultate shumë të mira, ndërsa modelet tona do të jenë të padobishme për shkak të mbivendosjes së fortë.

Në hapin tjetër, ne përcaktojmë llojet e veçorive. Tre llojet më të zakonshme janë numerike, kategorike dhe tekste. Le të shohim grupin e të dhënave nga problemi popullor i pasagjerëve Titanic (https://www.kaggle.com/c/titanic/data).

Në këtë grup të dhënash, kolona mbijetesën përmban variablin e synuar. Në hapin e mëparshëm, ne kemi ndarë tashmë variablin e synuar nga veçoritë. shenjat pklasa, seksi Dhe i hipur janë kategorike. shenjat mosha, sibsp, parch dhe si janë numerike. shenjë emriështë tekst. Megjithatë, nuk mendoj se emri i pasagjerit do të jetë i dobishëm për të parashikuar nëse ai pasagjer mbijetoi apo jo.

Karakteristikat numerike nuk kanë nevojë të konvertohen. Karakteristika të tilla në formën e tyre origjinale janë gati për normalizimin dhe trajnimin e modeleve.

Mos harroni se para përdorimit OneHotEncoder, ju duhet të konvertoni kategoritë në numra me LabelEncoder.

Meqenëse të dhënat nga konkursi i Titanikut nuk përmbajnë një shembull të mirë të një veçorie teksti, le të formulojmë rregull i përgjithshëm transformimi i veçorive të tekstit. Ne mund të kombinojmë të gjitha tiparet e tekstit në një, dhe më pas të aplikojmë algoritmet e duhura për ta kthyer tekstin në një paraqitje numerike.

Karakteristikat e tekstit mund të kombinohen si më poshtë:

Më pas mund të bëjmë transformimin me klasën CountVetorizer ose TfidfVektorizer bibliotekat scikit-mësoj.

Zakonisht, TfidfVektorizer jep rezultate më të mira se CountVetorizer. Në praktikë, kam gjetur se vlerat e parametrave të mëposhtëm TfidfVektorizer janë optimale në shumicën e rasteve:

Nëse e aplikoni vektorizuesin vetëm në grupin e trajnimit, sigurohuni që ta ruani në disk në mënyrë që më vonë ta aplikoni në grupin e vlefshmërisë.

Në hapin tjetër, tiparet e marra si rezultat i transformimeve të përshkruara më sipër transferohen në stacker. Kjo nyje kornizë kombinon të gjitha tiparet e transformuara në një matricë të vetme. Ju lutemi vini re se në rastin tonë ne po flasim për një stacker funksioni, i cili nuk duhet të ngatërrohet me një stacker model, i cili është një teknologji tjetër popullore.

Kombinimi i veçorive mund të bëhet duke përdorur funksionin hstack bibliotekat i mprehtë(në rastin e veçorive jo të rralla (të dendura)) ose duke përdorur funksionin hstack nga moduli i rrallë bibliotekat scipy(në rastin e veçorive të rralla).

Në rast se kryhen hapa të tjerë të parapërpunimit, për shembull, zvogëlimi i dimensioneve ose përzgjedhja e veçorive (që do të diskutohet më vonë), kombinimi i veçorive të marra mund të kryhet në mënyrë efikase duke përdorur klasën FeatureUnion bibliotekat scikitmësojnë.

Pasi të gjitha veçoritë janë kombinuar në një matricë, ne mund të fillojmë trajnimin e modeleve. Meqenëse veçoritë nuk janë normalizuar, në këtë fazë duhet të përdoren vetëm algoritmet e ansamblit të bazuara në pemët e vendimit:

  • RandomForestClassifier
  • RandomForestRegressor
  • Klasifikuesi ExtraTrees
  • ExtraTreesRegressor
  • Klasifikuesi XGB
  • XGBRegresor

Për të aplikuar modele lineare, është e nevojshme të kryhet normalizimi i veçorive duke përdorur klasa Normalizues ose StandardScaler bibliotekat scikit-mësoj.

Këto metoda normalizimi japin një rezultat të mirë vetëm në rastin e karakteristikave jo të rralla (të dendura). Te aplikosh StandardScaler për veçori të rralla (të rralla), si parametër, duhet të specifikoni with_mean=E rreme.

Nëse hapat e mësipërm na dhanë një model "të mirë", mund të kalojmë në akordimin e hiperparametrave. Nëse modeli nuk na kënaq, ne mund të vazhdojmë të punojmë me veçori. Në veçanti, ne mund të aplikojmë teknika të ndryshme të reduktimit të dimensioneve si hapa shtesë.

Për t'i mbajtur gjërat të thjeshta, ne nuk do të shqyrtojmë analizën diskriminuese lineare (LDA) dhe analizën diskriminuese kuadratike (QDA). Në përgjithësi, analiza e komponentit kryesor (PCA) përdoret për të reduktuar dimensionalitetin e të dhënave. Kur punoni me imazhe, duhet të filloni me 10 - 15 komponentë dhe ta rrisni këtë vlerë derisa rezultati të përmirësohet ndjeshëm. Kur punoni me lloje të tjera të dhënash, mund të filloni me 50 - 60 komponentë.

Në rastin e të dhënave të tekstit, pas konvertimit të tekstit në një matricë të rrallë, mund të aplikoni një zbërthim të vlerës njëjës (SVD). Zbatimi i zbërthimit të vlerës njëjës SVD e cunguar në dispozicion në bibliotekë scikit-mësoj.

Numri i përbërësve të zbërthimit të vlerës njëjës, i cili, si rregull, siguron një rezultat të mirë në rastin e veçorive të marra si rezultat i transformimit duke përdorur CountVetorizer ose TfidfVektorizer, është 120 - 200. Sasi e madhe Komponenti lejon një përmirësim të lehtë të rezultatit me koston e kostove të konsiderueshme llogaritëse.

Pasi të keni përfunduar hapat e përshkruar, mos harroni të normalizoni veçoritë në mënyrë që të jeni në gjendje të aplikoni modele lineare. Më pas, ne mund të përdorim veçoritë e përgatitura për të trajnuar modelet, ose të kryejmë përzgjedhjen e veçorive.

Ka mënyra të ndryshme për zgjedhjen e veçorive. Një nga metodat e njohura është algoritmi i përzgjedhjes së tipareve të babëzitur. Algoritmi i babëzitur ka skemën e mëposhtme. Hapi 1: trajnoni dhe vlerësoni modelin për secilën nga veçoritë fillestare; ne zgjedhim një veçori që ofron vlerësimin më të mirë. Hapi 2: trajnoni dhe vlerësoni modelin në çiftet e tipareve që përbëhen nga tipari më i mirë i zgjedhur në hapin e mëparshëm dhe secila prej veçorive të mbetura; zgjidhni veçorinë më të mirë nga pjesa tjetër. Ne përsërisim hapa të ngjashëm derisa të zgjedhim numrin e kërkuar të veçorive, ose derisa të plotësohet ndonjë kriter tjetër. Një zbatim i këtij algoritmi, ku zona nën lakoren ROC përdoret si metrikë, është në dispozicion në lidhjen e mëposhtme: https://github.com/abhishekkrthakur/greedyFeatureSelection . Duhet të theksohet se ky zbatim nuk është ideal dhe kërkon modifikime të caktuara për një detyrë specifike.

Një tjetër metodë më e shpejtë e zgjedhjes së veçorive është përzgjedhja duke përdorur një nga algoritmet e mësimit të makinerive që vlerëson rëndësinë e veçorive. Për shembull, mund të përdorni regresionin logjistik (regresionin logjistik) ose Në të ardhmen, veçoritë e zgjedhura mund të përdoren për të trajnuar algoritme të tjera.

Kur kryeni zgjedhjen e veçorive me një pyll të rastësishëm, mbani në mend se numri i pemëve duhet të jetë i vogël dhe se akordimi i hiperparametrit nuk duhet të bëhet shumë, përndryshe është e mundur mbivendosja.

Përzgjedhja e veçorive mund të kryhet gjithashtu duke përdorur algoritme të rritjes së gradientit. Rekomandohet përdorimi i bibliotekës xgboost në vend të zbatimit përkatës nga scikit-mësoj, sepse zbatimi xgboost shumë më të shpejtë dhe të shkallëzuar.

Algoritmet RandomForestClassifier, RandomForestRegressor Dhe xgboost gjithashtu ju lejon të kryeni zgjedhjen e veçorive në rast të të dhënave të pakta.

Një tjetër teknikë popullore e përzgjedhjes së veçorive jo-negative është përzgjedhja me katrorë chi. Një zbatim i kësaj metode është gjithashtu i disponueshëm në bibliotekë scikit-mësoj.

Në kodin e mësipërm, ne aplikojmë klasën ZgjidhniKBest së bashku me testin chi-square ( chi2 ) për të zgjedhur 20 tiparet kryesore. Numri i përzgjedhjeve të veçorive është në thelb një hiperparametër që duhet të optimizohet për të përmirësuar performancën e modelit.

Mos harroni të ruani çdo transformim që keni aplikuar në grupin e trajnimit. Ato do të nevojiten për të vlerësuar modelet në grupin e vlefshmërisë.

Hapi tjetër është të zgjidhni një algoritëm të mësimit të makinës dhe të rregulloni hiperparametrat.

Në përgjithësi, kur zgjidhni një algoritëm të mësimit të makinës, duhet të merrni parasysh opsionet e mëposhtme:

  • Klasifikimi:
    • Pyll i rastësishëm (pyll i rastësishëm).
    • Regresioni logjistik.
    • Naive Bayes.
    • Metoda e k fqinjëve më të afërt (k-fqinjët më të afërt).
  • Regresioni:
    • Pyll i rastësishëm (pyll i rastësishëm).
    • Rritja e gradientit.
    • Regresionit linear.
    • Regresioni i kreshtës.
    • Lasso regression (regresion lasso).
    • Makinë vektoriale mbështetëse.

Tabela e mëposhtme tregon hiperparametrat kryesorë të secilit algoritëm dhe diapazonin e vlerave të tyre optimale.

Etiketa RS* në tabelë do të thotë që vlerat optimale nuk mund të specifikohen dhe duhet të kryhet një kërkim i rastësishëm.

Më lejoni t'ju kujtoj përsëri, mos harroni të ruani të gjithë konvertuesit e aplikuar:

Dhe mos harroni t'i zbatoni ato në grupin e vlefshmërisë:

Qasja që kemi shqyrtuar dhe kuadri i bazuar në të kanë treguar rezultate të mira në shumicën e grupeve të të dhënave me të cilat më është dashur të punoj. Sigurisht, kur zgjidhen probleme shumë komplekse, kjo teknikë nuk jep gjithmonë një rezultat të mirë. Asgjë nuk është perfekte, por duke mësuar ne përmirësohemi. Ashtu si ndodh në mësimin e makinerive.

Mbi elementet brenda secilës listë. Rendi i pjesshëm zakonisht jepet duke specifikuar një pikë për çdo artikull (p.sh., "relevant" ose "jo relevant"; më shumë se dy gradime janë të mundshme). Qëllimi i një modeli të renditjes është të përafrojë dhe përgjithësojë më së miri (në një farë kuptimi) metodën e renditjes në grupin e trajnimit për të dhëna të reja.

Mësimi i renditjes është ende një fushë kërkimore mjaft e re, me zhvillim të shpejtë, e cila u ngrit në vitet 2000 me shfaqjen e interesit në fushën e marrjes së informacionit në aplikimin e metodave të mësimit të makinerive për renditjen e problemeve.

YouTube enciklopedik

  • 1 / 5

    Gjatë trajnimit të modelit të renditjes dhe gjatë funksionimit të tij, çdo çift dokument-kërkesë përkthehet në një vektor numerik të veçorive të renditjes (të quajtura edhe faktorë të renditjes ose sinjale) që karakterizojnë vetitë e dokumentit, pyetjen dhe marrëdhëniet e tyre. Këto shenja mund të ndahen në tre grupe:

    Më poshtë janë disa shembuj të veçorive të renditjes të përdorura në grupin e njohur të të dhënave LETOR në terren:

    • Vlerat e masave TF, TF-IDF, BM25, dhe modeli i gjuhës së përputhjes së kërkesës së zonave të ndryshme të dokumentit (titulli, URL, teksti i trupit, teksti i lidhjes);
    • Gjatësitë dhe shumat IDF të zonave të dokumenteve;
    • Renditjet e dokumenteve përftohen nga variacione të ndryshme të algoritmeve të renditjes së lidhjeve si PageRank dhe HITS.

    Metrikat e renditjes së cilësisë

    Ka disa metrika që vlerësojnë dhe krahasojnë performancën e algoritmeve të renditjes në një kampion me rishikimet e kolegëve. Shpesh, parametrat e modelit të renditjes priren të rregullohen në atë mënyrë që të maksimizojnë vlerën e një prej këtyre metrikave.

    Shembuj të metrikës:

    Klasifikimi i algoritmeve

    Në artikullin e tij "Të mësosh të rangosh për marrjen e informacionit" dhe fjalimet në konferenca tematike, Tai-Yan Liu nga Microsoft Research Asia analizoi metodat e disponueshme aktualisht për zgjidhjen e problemit të të mësuarit të renditjes dhe propozoi klasifikimin e tyre në tre qasje, në varësi të hyrjes. përfaqësimi i të dhënave të përdorura dhe funksioni i imët:

    Qasje nga pika

    Shënime

    1. Tie Yan Liu (2009) Mësimi to Ranku për RikthiminInformacioni, Bazat dhe tendencat në marrjen e informacionit: Vëll. 3: Nr 3, f. 225-331, ISBN 978-1-60198-244-5 , DOI 10.1561/1500000016. Sllajde nga fjalimi i T. Lew në konferencën WWW 2009 janë në dispozicion.


Artikuj të ngjashëm: