#LASSO

X1<-rnorm(100,0,1)
X2<-2*X1+rnorm(100,0,1)
X3<-3*X2+rnorm(100,0,1)
X<-cbind(X1,X2,X3)
B<-c(1,1,1)
Y<-drop(X%*%B)+rnorm(100,0,1)

 

 

plot(X1,X2)
plot(X3,X2)


summary(lm(Y~X))


OLS<-summary(lm(Y~X))$coef[,1]
X0<-cbind(1,X)
Lam<-1

 

 

RIDGE<-(t(X0)%*%X0+Lam*diag(c(0,rep(1,3))))


RIDGE<-solve((t(X0)%*%X0+Lam*diag(c(0,rep(1,3)))) )

RIDGE<-RIDGE%*%t(X0)%*%Y

cbind(OLS,RIDGE)  #릿지랑 OLS비교

############

Z1<-rnorm(100,0,1)
Z2<-2*Z1+rnorm(100,0,1)
Z3<-3*Z2+rnorm(100,0,1)
Z<-cbind(Z1,Z2,Z3)
B<-c(1,1,1)
W<-drop(Z%*%B)+rnorm(100,0,1)


sum((W - cbind(1,Z)%*%OLS)^2)  #least square error?

sum((W - cbind(1,Z)%*%RIDGE)^2)  ##OLS랑 릿지 비교

###############

#100개의 estomator 생성

Vec<-seq(1:100)
Est<-c()
Err<-c()
for(Lam in Vec){
 RIDGE<-solve((t(X0)%*%X0+Lam*diag(c(0,rep(1,3)))) )
 RIDGE<-RIDGE%*%t(X0)%*%Y
 Est<-cbind(Est,RIDGE)
 err<-sum((W-cbind(1,Z)%*%RIDGE)^2)
 Err<-c(Err,err)  #에러 100개
}

 

plot(Err) #람다를 1로 설정해서 0근처에서 멈춤

 


Vec<-seq(0.01,1,length.out=100)
Est<-c()
Err<-c()
for(Lam in Vec){
 RIDGE<-solve((t(X0)%*%X0+Lam*diag(c(0,rep(1,3)))) )
 RIDGE<-RIDGE%*%t(X0)%*%Y
 Est<-cbind(Est,RIDGE)
 err<-sum((W-cbind(1,Z)%*%RIDGE)^2)
 Err<-c(Err,err)  #에러 100개
}

 


 

 

'프로그래밍, 통계학 > R(데이터마이닝)' 카테고리의 다른 글

14.6.3 실습  (0) 2014.06.03
5.29 마이닝실습  (0) 2014.05.29
14.5.22 실습  (0) 2014.05.22
14.5.8 데이터마이닝 / 디시젼트리  (0) 2014.05.08
14.5.1 데이터마이닝  (0) 2014.05.01
블로그 이미지

테시리

,