#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 |