2013-07-26 24 views
13

Trong tập dữ liệu của tôi, tôi có một số biến liên tục và giả. Để phân tích với glmnet, tôi muốn các biến liên tục được chuẩn hóa nhưng không phải là biến giả.Tham số chuẩn hóa của glmnet xử lý các biến giả như thế nào?

Hiện tại, tôi thực hiện việc này bằng tay trước tiên xác định vectơ giả của các cột chỉ có giá trị [0,1] và sau đó sử dụng lệnh scale trên tất cả các cột không giả. Vấn đề là, điều này không phải là rất thanh lịch.

Nhưng glmnet có một đối số được xây dựng trong đối số standardize. Theo mặc định, điều này sẽ chuẩn hóa các núm vú giả? Nếu vậy, có cách nào thanh lịch để nói với đối số standardize của glmnet để bỏ qua núm vú giả không?

+0

Tại sao bạn làm tất cả công việc phụ đó? –

+0

@DWin Tôi không thấy cách nào khác. Nếu glmnet không phân biệt đối xử thì tôi cần. Như tôi vừa mới đăng dưới đây, nếu chúng ta không thể diễn giải một hệ số trên một biến giả chuẩn hóa, thì tôi cần phải tách riêng các núm vú giả từ các không giả trước khi chuẩn hóa. –

Trả lời

10

Tóm lại, có - điều này sẽ chuẩn hóa các biến giả, nhưng có lý do để làm như vậy. Hàm glmnet lấy một ma trận làm đầu vào cho tham số X của nó, không phải là khung dữ liệu, do đó, nó không tạo sự khác biệt cho các cột factor mà bạn có thể có nếu thông số là data.frame. Nếu bạn có một cái nhìn tại các chức năng R, mã glmnet các standardize tham số trong nội bộ như

isd = as.integer(standardize) 

nào chuyển đổi boolean R để 0 hoặc 1 số nguyên để nuôi với bất kỳ chức năng FORTRAN nội (elnet, lognet, et ..! al)

Nếu bạn đi xa hơn nữa bằng cách kiểm tra mã FORTRAN (cố định chiều rộng - trường cũ), bạn sẽ thấy các khối sau:

  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 

hãy nhìn vào các đường đánh dấu 1000 - về cơ bản là áp dụng công thức chuẩn hóa cho t ma trận X.

Hiện tại, theo thống kê, thường không chuẩn hóa các biến phân loại để duy trì tính giải nghĩa của các biến hồi quy ước tính. Tuy nhiên, như đã được chỉ ra bởi Tibshirani here, "Phương pháp Lasso yêu cầu chuẩn hóa ban đầu của các biến hồi quy, để sơ đồ phạt là công bằng cho tất cả các biến hồi quy. Đối với các biến hồi quy phân loại, một mã trả về biến giả và sau đó chuẩn hóa các biến giả" - do đó, trong khi điều này gây ra sự phân chia tùy ý giữa các biến liên tục và phân loại, nó được thực hiện cho việc xử lý xử phạt bằng nhau.

+2

Tôi đã làm một số [tương tự đào lên] (https: // thinklab.com/discussion/computing-standardized-logistic-regression-coefficients/205 # 5) để xác nhận cách glmnet đã tái biến đổi các hệ số sau khi phù hợp với các biến chuẩn hóa. Funtran :-) –

+0

từ trợ giúp của 'glmnet':" Hệ số luôn được trả về trên thang điểm ban đầu ". Vì vậy, khả năng diễn giải của các hệ số không phải là một vấn đề. – pbahr

+0

Trong khi các hệ số là "trên thang điểm ban đầu", hình phạt L1 và L2 vốn đã thiên vị các hệ số hồi quy để thử và giảm phương sai (Xem [Bias-Variance Tradeoff] (https://en.wikipedia.org/wiki/Bias%E2 % 80% 93variance_tradeoff)), có nghĩa là chúng không được coi là ước tính không thiên vị về tác động lên giá trị của biến phụ thuộc. Chỉ cần làm rõ :) –

3

glmnet không biết gì về các biến giả, vì nó không có giao diện công thức (và do đó không chạm vào model.framemodel.matrix.) Nếu bạn muốn chúng được xử lý đặc biệt, bạn sẽ phải làm chính nó.

+0

Có thể cho phép các núm vú giả được chuẩn hóa không? –

+2

Trả lời câu hỏi của riêng tôi ở trên. ** Không, không thể chuẩn hóa núm vú giả. ** Trích dẫn http://www.sagepub.com/upm-data/21120_Chapter_7.pdf, trang 140: "hệ số không chuẩn hóa cho trình hồi quy giả được giải thích là phản hồi dự kiến sự khác biệt có thể biến đổi giữa một loại cụ thể và loại cơ sở cho bộ hồi quy giả (kiểm soát, tất nhiên, đối với các biến giải thích khác trong mô hình). Nếu hệ số hồi quy giả được chuẩn hóa thì giải thích đơn giản này sẽ bị mất. " –

+0

@R_User Bạn có muốn thêm câu trả lời dựa trên nhận xét của mình không? Sau đó tôi có thể chấp nhận bạn làm câu trả lời. –

Các vấn đề liên quan