Codificarea variabilelor categorice la un moment dat și dincolo; Win Vector LLC

(sau: cum să utilizați corect xgboost din R)

R are codificare „one-hot” ascunsă în majoritatea căilor sale de modelare. Întrebarea unui utilizator R unde se utilizează o codificare la cald este ca și cum ai întreba un pește unde este apă; ei nu pot indica acest lucru așa cum este peste tot.

codificarea

De exemplu, putem vedea dovezi ale unei codificări one-hot în numele variabilelor alese printr-o regresie liniară:

O mare parte din codificarea în R se bazează în esență pe „contraste” implementate în statistici: model.matrix () Notă: nu utilizați base: data.matrix () sau utilizați hashing înainte de modelare - s-ar putea să scăpați de ele (în special cu metode bazate pe arbori), dar nu sunt în general o tehnică bună așa cum arătăm mai jos:

stats: model.matrix () nu stochează planul său one-hot într-un mod convenabil (poate fi dedus prin tragerea atributului „contraste” plus examinarea numelor coloanelor primei codificări, dar nivelurile identificate nu sunt reprezentate convenabil ). Când aplicați direct statistici: model.matrix () nu puteți presupune în siguranță aceeași formulă aplicată la două seturi de date diferite (de exemplu tren și aplicație sau test) utilizează aceeași codificare! Demonstrăm acest lucru mai jos:

Codarea defectuoasă de mai sus poate fi un defect critic atunci când construiți un model și apoi îl utilizați ulterior pe date noi (fie date de validare încrucișată, date de testare sau date de aplicație viitoare). Mulți utilizatori R nu sunt familiarizați cu problema de mai sus, deoarece codificarea este ascunsă în formarea modelului, iar modul de codificare a datelor noi este stocat ca parte a modelului. Utilizatorii Python scikit-learn care vin la R întreabă deseori „unde este codificatorul one-hot” (întrucât nu se discută atât de mult în R cât și în scikit-learn) și chiar furnizează un număr de (de calitate scăzută) one- off packages "portarea unei codificări one-hot în R."

Locul principal în care un utilizator R are nevoie de un codificator adecvat (și anume este un codificator care își stochează planul de codificare într-o formă reutilizabilă convenabil, pe care multe dintre pachetele „purtate unic din Python” nu reușesc să le facă) o implementare de învățare automată care nu este complet centrică pe R. Un astfel de sistem este xgboost care necesită (așa cum este tipic învățarea automată în scikit-learn) datele să fie deja codificate ca o matrice numerică (în loc de o structură eterogenă, cum ar fi un cadru de date). Acest lucru necesită o conversie explicită din partea utilizatorului R și mulți utilizatori R greșesc (nu reușesc să stocheze planul de codificare undeva). Pentru a face acest lucru concret, să lucrăm un exemplu simplu.