36. Graph: Overview
Univariate statistics: Given
data as double[] xs
xs
n
m2m
v
(defn stats [{:keys [xs]}]
(let [n (count xs)
m (/ (sum xs) n)
m2 (/ (sum sq xs) n)
v (- m2 (* m m))]
{:n n :m m :m2 m2 :v v}))
Saturday, October 5, 13
37. The Monster let
(defn start [{:keys [a,z]}]
(let [s1 (store a ...)
s2 (store b ...)
db (sql-db c)
t2 (cron s2 db...)
...
srv (server ...)]
(fn shutdown []
(.stop srv)
...
(.flush s1))))
Saturday, October 5, 13
38. The Monster let
dozens of
parameters,
not compositional
(defn start [{:keys [a,z]}]
(let [s1 (store a ...)
s2 (store b ...)
db (sql-db c)
t2 (cron s2 db...)
...
srv (server ...)]
(fn shutdown []
(.stop srv)
...
(.flush s1))))
Saturday, October 5, 13
39. The Monster let
dozens of
parameters,
not compositional
structure of
(de)composition
is locked up in an
opaque function
(defn start [{:keys [a,z]}]
(let [s1 (store a ...)
s2 (store b ...)
db (sql-db c)
t2 (cron s2 db...)
...
srv (server ...)]
(fn shutdown []
(.stop srv)
...
(.flush s1))))
Saturday, October 5, 13
40. The Monster let
dozens of
parameters,
not compositional
structure of
(de)composition
is locked up in an
opaque function
(defn start [{:keys [a,z]}]
(let [s1 (store a ...)
s2 (store b ...)
db (sql-db c)
t2 (cron s2 db...)
...
srv (server ...)]
(fn shutdown []
(.stop srv)
...
(.flush s1))))
Saturday, October 5, 13
41. The Monster let
dozens of
parameters,
not compositional
structure of
(de)composition
is locked up in an
opaque function
(defn start [{:keys [a,z]}]
(let [s1 (store a ...)
s2 (store b ...)
db (sql-db c)
t2 (cron s2 db...)
...
srv (server ...)]
(fn shutdown []
(.stop srv)
...
(.flush s1))))
Saturday, October 5, 13
42. The Monster let
dozens of
parameters,
not compositional
structure of
(de)composition
is locked up in an
opaque function
(defn start [{:keys [a,z]}]
(let [s1 (store a ...)
s2 (store b ...)
db (sql-db c)
t2 (cron s2 db...)
...
srv (server ...)]
(fn shutdown []
(.stop srv)
...
(.flush s1))))
Saturday, October 5, 13
43. The Monster let
dozens of
parameters,
not compositional
structure of
(de)composition
is locked up in an
opaque function
(defn start [{:keys [a,z]}]
(let [s1 (store a ...)
s2 (store b ...)
db (sql-db c)
t2 (cron s2 db...)
...
srv (server ...)]
(fn shutdown []
(.stop srv)
...
(.flush s1))))
Saturday, October 5, 13
44. The Monster let
dozens of
parameters,
not compositional
structure of
(de)composition
is locked up in an
opaque function
(defn start [{:keys [a,z]}]
(let [s1 (store a ...)
s2 (store b ...)
db (sql-db c)
t2 (cron s2 db...)
...
srv (server ...)]
(fn shutdown []
(.stop srv)
...
(.flush s1))))
Saturday, October 5, 13
45. The Monster let
dozens of
parameters,
not compositional
structure of
(de)composition
is locked up in an
opaque function
(defn start [{:keys [a,z]}]
(let [s1 (store a ...)
s2 (store b ...)
db (sql-db c)
t2 (cron s2 db...)
...
srv (server ...)]
(fn shutdown []
(.stop srv)
...
(.flush s1))))
Saturday, October 5, 13
46. The Monster let
dozens of
parameters,
not compositional
structure of
(de)composition
is locked up in an
opaque function
(defn start [{:keys [a,z]}]
(let [s1 (store a ...)
s2 (store b ...)
db (sql-db c)
t2 (cron s2 db...)
...
srv (server ...)]
(fn shutdown []
(.stop srv)
...
(.flush s1))))
Saturday, October 5, 13
47. From let to Graph
(defn stats [{:keys [xs]}]
(let [n (count xs)
m (/ (sum xs) n)
m2 (/ (sum sq xs) n)
v (- m2 (* m m))]
{:n n :m m :m2 m2 :v v}))
Saturday, October 5, 13
48. From let to Graph
(defn stats [{:keys [xs]}]
(let [n (count xs)
m (/ (sum xs) n)
m2 (/ (sum sq xs) n)
v (- m2 (* m m))]
{:n n :m m :m2 m2 :v v}))
xs
n
m2m
v
Saturday, October 5, 13
49. From let to Graph
(defn stats [{:keys [xs]}]
(let [n (count xs)
m (/ (sum xs) n)
m2 (/ (sum sq xs) n)
v (- m2 (* m m))]
{:n n :m m :m2 m2 :v v}))
{:n (fn [xs] (count xs))
:m (fn [xs n] (/ (sum xs) n))
:m2 (fn [xs n] (/ (sum sq xs) n))
:v (fn [m m2] (- m2 (* m m)))}
xs
n
m2m
v
Saturday, October 5, 13
50. From let to Graph
(defn stats [{:keys [xs]}]
(let [n (count xs)
m (/ (sum xs) n)
m2 (/ (sum sq xs) n)
v (- m2 (* m m))]
{:n n :m m :m2 m2 :v v}))
{:n (fn [xs] (count xs))
:m (fn [xs n] (/ (sum xs) n))
:m2 (fn [xs n] (/ (sum sq xs) n))
:v (fn [m m2] (- m2 (* m m)))}
k
k
k
k
xs
n
m2m
v
Saturday, October 5, 13
58. HipHip Examples
Dot Product w · x =
nX
i=1
wixi
Inner loop in
machine learning
arg max
`
w · x`
prediction
Saturday, October 5, 13
59. HipHip Examples
Dot Product w · x =
nX
i=1
wixi
Inner loop in
machine learning
arg max
`
w · x`
prediction
P(x; w) / exp{w · x}
training
Saturday, October 5, 13
60. Dot Product w · x =
nX
i=1
wixi
HipHip Examples
Saturday, October 5, 13
61. Dot Product w · x =
nX
i=1
wixi
(defn dot-product [^doubles ws ^doubles xs]
(areduce ws idx sum 0.0
(+ sum (* (aget ws idx)
(aget xs idx))))
HipHip Examples
Saturday, October 5, 13
62. Dot Product w · x =
nX
i=1
wixi
HipHip Examples
Saturday, October 5, 13
63. Dot Product w · x =
nX
i=1
wixi
double dotProd(double[] ws, double[] xs) {
double sum = 0.0;
for (int i=0; i < xs.length; ++i) {
sum += ws[i] * xs[i];
}
return sum;
}
HipHip Examples
Saturday, October 5, 13
64. Dot Product w · x =
nX
i=1
wixi
HipHip Examples
Saturday, October 5, 13
65. Dot Product w · x =
nX
i=1
wixi
(defn dot-product [ws xs]
(hiphip.double/asum [w ws x xs] (* w x)))
HipHip Examples
Saturday, October 5, 13