Krótko mówiąc, tak - będzie to standaryzację zmiennych obojętne, ale nie jest to powód do tego. Funkcja glmnet
zajmuje macierzy jako wejście dla jego X
parametru, a nie ramki danych, więc to nie robi różnicy dla factor
kolumn, które mogą mieć, jeśli parametr był data.frame
. Jeśli przyjrzeć funkcją R, kody glmnet parametr standardize
wewnętrznie jako
isd = as.integer(standardize)
który przetwarza wartość logiczną R w 0 lub 1 całkowitej paszy dowolnego z wewnętrznymi funkcjami FORTRAN (elnet, lognet Et ..! al)
Jeśli pójść jeszcze dalej poprzez analizę kodu FORTRAN (stała szerokość - old school), zobaczysz następujący blok:
subroutine standard1 (no,ni,x,y,w,isd,intr,ju,xm,xs,ym,ys,xv,jerr) 989
real x(no,ni),y(no),w(no),xm(ni),xs(ni),xv(ni) 989
integer ju(ni) 990
real, dimension (:), allocatable :: v
allocate(v(1:no),stat=jerr) 993
if(jerr.ne.0) return 994
w=w/sum(w) 994
v=sqrt(w) 995
if(intr .ne. 0)goto 10651 995
ym=0.0 995
y=v*y 996
ys=sqrt(dot_product(y,y)-dot_product(v,y)**2) 996
y=y/ys 997
10660 do 10661 j=1,ni 997
if(ju(j).eq.0)goto 10661 997
xm(j)=0.0 997
x(:,j)=v*x(:,j) 998
xv(j)=dot_product(x(:,j),x(:,j)) 999
if(isd .eq. 0)goto 10681 999
xbq=dot_product(v,x(:,j))**2 999
vc=xv(j)-xbq 1000
xs(j)=sqrt(vc) 1000
x(:,j)=x(:,j)/xs(j) 1000
xv(j)=1.0+xbq/vc 1001
goto 10691 1002
Spójrz na linii oznaczonej 1000 - to jest zasadniczo stosowanie formuły standaryzacji do t on matryca X
.
Teraz statystycznie rzecz biorąc, jeden na ogół nie standaryzację zmiennych kategorycznych zachować interpretability szacowanych regresorów. Jednak, jak podkreślił Tibshirani here „Metoda lasso wymaga wstępnej standaryzacji regresorów, tak że system penalizacja jest sprawiedliwe dla wszystkich regresorów Dla kategorycznych regresorów jeden koduje REGRESSOR ze zmiennych binarnych, a następnie standaryzuje zmienne fikcyjne.” - więc podczas gdy powoduje to arbitralne skalowanie pomiędzy zmiennymi ciągłymi i kategorycznymi, jest to zrobione dla równego traktowania kar.
Dlaczego robisz wszystko, dodatkowej pracy? –
@DWin Nie widzę innej drogi. Jeśli glmnet nie dyskryminuje, to muszę. Jak już napisałem poniżej, jeśli nie możemy zinterpretować współczynnika na standardowej zmiennej obojętnej, to przed standaryzacją muszę oddzielić manekiny od non-dummies. –