Filtru | R-BLOGGERS

URMĂREȘTE-NE
16,065FaniÎmi place
1,142CititoriConectați-vă

(Acest articol a fost publicat pentru prima dată pe mlr-orgși a contribuit cu drag la R-Bloggers). (Puteți raporta problema despre conținutul de pe această pagină aici)


Doriți să vă împărtășiți conținutul pe R-Bloggers? Faceți clic aici dacă aveți un blog sau aici dacă nu.

JavaScript este necesar pentru a debloca soluții.

Vă rugăm să activați JavaScript și să reîncărcați pagina,
Sau descărcați fișierele sursă de la GitHub și rulați codul local.

Aflați cum să clasificați caracteristicile unei sarcini supravegheate prin importanța / puterea relației lor cu variabila țintă folosind o metodă de filtrare a caracteristicilor.

Creăm sarcina în ceea ce privește exercițiul de eșantionare: setul de date de credit german.

library("mlr3verse")
library("data.table")
task = tsk("german_credit")

În interiorul mlr3 ecosistem, filtrele de caracteristici sunt implementate în mlr3filters pachet și sunt utilizate de obicei în combinație cu mlr3pipelines pentru a putea include întreaga etapă de preprocesare într -o conductă. În exercițiile 1 până la 3, aplicăm filtrarea caracteristicilor pentru a preprocesa datele unei sarcini fără a utiliza o conductă. În exercițiul 4, vom configura o conductă care combină un elev cu filtrarea caracteristicilor ca pas de preprocesare.

Exercițiul 1: Găsiți un filtru de caracteristici adecvat







Fă -te familiarizat cu mlr3filters pachet (link). Care FilterS sunt aplicabile tuturor tipurilor de caracteristici din sarcina pe care am creat -o mai sus?

Aluzie:

Unele filtre sunt aplicabile fie pentru clasificare, fie de regresie, fie funcțiilor numerice sau categorice. Prin urmare, căutăm un Filter care se aplică sarcinii noastre de clasificare și care poate fi calculat pentru integer şi factor Caracteristici (deoarece aceste tipuri de caracteristici sunt prezente în sarcină, consultați task$feature_types)

Site -ul legat mai sus include un tabel care oferă informații detaliate pentru fiecare Filter.

Exercițiul 2: Filtru de câștig de informații

Acum vrem să folosim information_gain filtru care necesită instalarea FSelectorRcpp pachet. Acest filtru cuantifică câștigul în informații, luând în considerare următoarea diferență: H(Target) + H(Feature) - H(Target, Feature) Aici, H(X) este entropia Shannon pentru variabilă X şi H(X, Y) este entropia Shannon articulară pentru variabilă X condiționat pe Y.

Creați un filtru de câștig de informații și calculați câștigul de informații pentru fiecare caracteristică.

Vizualizați scorul pentru fiecare caracteristică și decideți câte și ce caracteristici trebuie să includă.

Sugestie 1:

Utilizare flt("information_gain") Pentru a crea un information_gain filtrați și calculați scorurile filtrului caracteristicilor. Vedea ?mlr_filters_information_gain (sau echivalent flt("information_gain")$help()) Pentru mai multe detalii despre cum să utilizați un filtru. Dacă nu funcționează, puteți utiliza de ex. flt("importance", learner = lrn("classif.rpart")) care folosește importanța caracteristică a unui classif.rpart Arborele de decizie pentru a clasifica caracteristicile pentru filtrul de caracteristici.

Pentru vizualizare, puteți, de exemplu, să creați o diagramă de scree (similară cu analiza componentelor principiu) care complotează scorul filtrului pentru fiecare caracteristică de pe axa y și caracteristicile de pe axa x.

Folosind o regulă generală, de exemplu, „regula cotului” puteți determina numărul de funcții pentru a include.

Sugestie 2:
library(mlr3filters)
library(mlr3viz)
library(FSelectorRcpp)
filter = flt(...)
filter$calculate()
autoplot(...)

Exercițiul 3: Creați și aplicați un Pipeopfilter la o sarcină

Deoarece elevul K-nn suferă de blestemul dimensionalității, vrem să stabilim o preprocesare PipeOp pentru a subseta setul nostru de caracteristici la cele mai importante 5 în funcție de filtrul de câștig de informații (a se vedea flt("information_gain")$help()) În general, puteți vedea o listă cu alte filtre posibile, uitându -vă la dicționar as.data.table(mlr_filters). Puteți construi un PipeOp obiect cu po() Funcție din mlr3pipelines pachet. Vedea mlr_pipeops$keys() pentru alegeri posibile. Creați un PipeOp care filtrează caracteristicile german_credit sarcina și creează o nouă sarcină care conține doar cele mai importante 5 în funcție de filtrul de câștig de informații.






Sugestie 1:
  • Filtrul poate fi creat de flt("information_gain") (Vezi și pagina de ajutor flt("information_gain")$help())
  • În cazul nostru, trebuie să trecem "filter" cheie la primul argument al po() funcția și filtrul creat anterior cu flt Funcție la filter argument al po() Funcție pentru a construi un PipeOpFilter obiect care efectuează filtrarea caracteristicilor (consultați și exemple de cod în pagina de ajutor ?PipeOpFilter)
  • Pagina de ajutor a ?PipeOpFilter De asemenea, dezvăluie parametrii pe care îi putem specifica. De exemplu, pentru a selecta cele mai importante 5 caracteristici, putem seta filter.nfeat. Acest lucru se poate face folosind param_vals argument al po() Funcționează în timpul construcției sau prin adăugarea valorii parametrului la param_set$values Câmpul unui deja creat PipeOpFilter obiect (a se vedea, de asemenea, exemple de cod în pagina de ajutor).
  • Creatul PipeOpFilter obiectul poate fi aplicat pe un Task obiect pentru a crea filtrul Task. Pentru a face acest lucru, putem folosi $train(input) câmpul PipeOpFilter obiect și trece un listă conținând sarcina pe care dorim să o filtram.
Sugestie 2:
library(mlr3pipelines)
# Set the filter.nfeat parameter directly when constructing the PipeOp:
pofilter = po("...",
  filter = flt(...),
   ... = list(filter.nfeat = ...))

# Alternative (first create the filter PipeOp and then set the parameter):
pofilter = po("...", filter = flt(...))
pofilter$...$filter.nfeat = ...

# Train the PipeOpFilter on the task
filtered_task = pofilter$train(input = list(...))
filtered_task
task

Exercițiul 4: Combinați pipeopfilter cu un elev

Faceți următoarele sarcini:

  1. Combinați PipeOpFilter din exercițiul anterior cu un elev K-NN pentru a crea un așa-numit Graph (poate conține mai multe etape de preprocesare) folosind %>>% operator.
  2. Convertiți Graph la a GraphLearner astfel încât să se comporte ca un nou elev care mai întâi prezintă filtrarea și apoi antrenează un model pe datele filtrate și rulează resample() Funcție pentru a estima performanța GraphLearner cu o validare încrucișată de 5 ori.
  3. Modificați valoarea nfeat.filter parametrul (care a fost setat la 5 în exercițiul precedent) și rulați din nou resample().
Sugestie 1:
  • Creați un elev KNN folosind lrn(). Amintiți -vă că comanda rapidă pentru un clasificator KNN IST "classif.kknn".
  • Puteți concatena diferiți pași de preprocesare și un elev folosind %>>% operator.
  • Utilizare as_learner Pentru a crea a GraphLearner (A se vedea, de asemenea, exemplele de cod din pagina de ajutor ?GraphLearner)
Sugestie 2:
library(mlr3learners)
graph = ... %>>% lrn("...")
glrn = as_learner(...)
rr = resample(task = ..., learner = ..., resampling = ...)
rr$aggregate()

# Change `nfeat.filter` and run resampling again using same train-test splits
...
rr2 = resample(task = ..., learner = ..., resampling = rr$resampling)
rr2$aggregate()

Am învățat cum să folosim filtre de caracteristici pentru a clasifica funcțiile WRT o metodă de filtrare a caracteristicilor într -o setare supravegheată și cum să subsetați o sarcină în consecință.

În mod ideal, filtrarea caracteristicilor este încorporată direct în procedura de învățare prin utilizarea unei conducte, astfel încât estimarea performanței după filtrarea caracteristicilor să nu fie părtinitoare.

Dominic Botezariu
Dominic Botezariuhttps://www.noobz.ro/
Creator de site și redactor-șef.

Cele mai noi știri

Pe același subiect

LĂSAȚI UN MESAJ

Vă rugăm să introduceți comentariul dvs.!
Introduceți aici numele dvs.