-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathLearning from Data HW4 Work.R
More file actions
67 lines (51 loc) · 1.66 KB
/
Learning from Data HW4 Work.R
File metadata and controls
67 lines (51 loc) · 1.66 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# 5/28/2015
# Learning from Data HW #4 Work
### Methods
library(data.table)
mhApprox <- function(N, dVC, nFactor) {
(nFactor*N)^dVC
}
# Obviously the following four functions could also be defined in one line each.
# They are defined in these ways to be easier to debug/logically follow
vcBound <- function(N, delta, dVC) {
ret <- log(4*mhApprox(N, dVC, 2)/delta)
(8*ret/N)^(1/2)
}
rademacher <- function(N, delta, dVC) {
(2*log(2*N*mhApprox(N, dVC, 1))/N)^(1/2) + (2/N*log(1/delta))^(1/2) + 1/N
}
parrondo <- function(N, delta, dVC, epsilon) {
ret <- 4*epsilon*(1+epsilon)+log(4/delta*mhApprox(N, dVC, N))
(ret/(2*N))^(1/2)
}
devroye <- function(N, delta, dVC, epsilon) {
ret <- 4*epsilon*(1+epsilon)+log(4*mhApprox(N, dVC, N)/delta)
ret/(2*N)
}
### Num 1 Work
n_vals <- c(40, 42, 46, 48)*10000
vcBound(n_vals, 0.05, 10)
### Num 2/3 Work
N_levels <- c(5, 10000)
delta_levels <- c(0.1, 0.05, 0.01)
dVC_levels <- c(1, 5, 10)
dat <- data.table(expand.grid(list(N_levels, delta_levels, dVC_levels)))
setnames(dat, c("Var1", "Var2", "Var3"), c("N", "delta", "dVC"))
dat[,vc:=vcBound(N,delta, dVC)]
dat[,rademacher:=rademacher(N, delta, dVC)]
dat[,c("parrondoV", "parrondoR") :=list(parrondo(N, delta, dVC, vc),
parrondo(N, delta, dVC, rademacher))]
dat[,c("devroyeV", "devroyeR") :=list(devroye(N, delta, dVC, vc),
devroye(N, delta, dVC, rademacher))]
options(digits=4)
dat
unlist(lapply(dat[N==5], mean))[c(1,4:9)]
unlist(lapply(dat[N==10000], mean))[c(1,4:9)]
### Num 6 Validation
weights <- unlist(lapply(1:1000, function(i) {
input <- runif(2, -1, 1)
dat <- data.table(x=input, y=sin(pi*input))
coef(lm(data=dat, y ~ x-1))
}))
mean(weights)
var(weights)