<jupyter_start><jupyter_text>Stats216v: Statistical LearningStanford UniversitySummer 2017<NAME> (<EMAIL>)  10. Unsupervised Learning<jupyter_code>LoadLibraries = function() {
    library(MASS)
    install.packages("ISLR")
    library(ISLR)
    print("Libraries have been loaded!")
}

LoadLibraries()
states = row.names(USArrests)
states
names(USArrests)
apply(USArrests, 2, mean)
apply(USArrests, 2, var)
# principal components analysis
# scale=TRUE to scale variables to have standard deviation 1
pr.out = prcomp(USArrests, scale=TRUE)
names(pr.out)
# means for scaling
pr.out$center

# standard deviations for scaling
pr.out$scale
# principal components loadings
pr.out$rotation
# principal score vectors
dim(pr.out$x)
biplot(pr.out, scale=0)
# scale=0 to scale arrows to represent loadings
pr.out$rotation = -pr.out$rotation
pr.out$x = -pr.out$x
biplot(pr.out, scale=0)
pr.out$sdev
# variance of principal components
pr.var = pr.out$sdev^2
pr.var
# first principal component explains 62%
pve = pr.var / sum(pr.var)
pve
plot(pve, xlab="Principal Component", ylab="Proportion of Variance Explained", ylim=c(0,1), type='b')
plot(cumsum(pve), xlab="Principal Component", ylab="Cumulative Proportion of Variance Explained", ylim=c(0,1), type='b')
a = c(1, 2, 8, -3)
cumsum(a)
# K-means clustering
set.seed(2)
x = matrix(rnorm(50*2), ncol=2)
x[1:25,1] = x[1:25,1] + 3
x[1:25,2] = x[1:25,2] - 4

# K=2
km.out = kmeans(x, 2, nstart=20)
km.out$cluster
plot(x, col=(km.out$cluster+1), main="K-Means Clustering Results with K=2", xlab="", pch=20, cex=2)
set.seed(4)
km.out = kmeans(x, 3, nstart=20)
km.out

plot(x, col=(km.out$cluster+1), main="K=3", pch=20, cex=2)
# total within-cluster sum of squares
# which we seek to minimize
km.out$tot.withinss
# Hierarchical Clustering
hc.complete = hclust(dist(x), method="complete")
hc.average = hclust(dist(x), method="average")
hc.single = hclust(dist(x), method="single")

par(mfrow=c(1,3))
plot(hc.complete, main="Complete Linkage", cex=.9)
plot(hc.average, main="Average Linkage", cex=.9)
plot(hc.single, main="Single Linkage", cex=.9)
cutree(hc.complete, 2)
cutree(hc.average, 2)
cutree(hc.single, 2)
cutree(hc.single, 4)
# scale variables before performing hierarchical clustering
xsc = scale(x)
plot(hclust(dist(xsc), method="complete"), main="Hierarchical Clustering with Scaled Features")
# correlation-based distance
x = matrix(rnorm(30*3), ncol=3)
dd = as.dist(1-cor(t(x)))
plot(hclust(dd, method="complete"), main="Complete Linkage with Correlation-based Distance")
nci.labs = NCI60$labs
nci.data = NCI60$data
dim(nci.data)
nci.labs[1:4]
table(nci.labs)
pr.out = prcomp(nci.data, scale=TRUE)

Cols = function(vec) {
    cols = rainbow(length(unique(vec)))
    return (cols[as.numeric(as.factor(vec))])
}

par(mfrow=c(1,2))
plot(pr.out$x[,1:2], col=Cols(nci.labs), pch=19, xlab="Z1", ylab="Z2")
plot(pr.out$x[,c(1,3)], col=Cols(nci.labs), pch=19, xlab="Z1", ylab="Z3")
summary(pr.out)
plot(pr.out)
pve = 100*pr.out$sdev^2 / sum(pr.out$sdev^2)
par(mfrow=c(1,2))
plot(pve, type="o", ylab="PVE", xlab="Principal Component", col="blue")
plot(cumsum(pve), type="o", ylab="Cumulative PVE", xlab="Principal Component", col="brown3")
sd.data = scale(nci.data)
par(mfrow=c(1,3))
data.dist = dist(sd.data)

plot(hclust(data.dist, method="complete"), labels=nci.labs, main="Complete Linkage", xlab="", sub="", ylab="")
plot(hclust(data.dist, method="average"), labels=nci.labs, main="Average Linkage", xlab="", sub="", ylab="")
plot(hclust(data.dist, method="single"), labels=nci.labs, main="Single Linkage", xlab="", sub="", ylab="")
hc.out = hclust(dist(sd.data))
hc.clusters = cutree(hc.out, 4)
table(hc.clusters, nci.labs)

par(mfrow=c(1,1))
plot(hc.out, labels=nci.labs)
abline(h=139, col="red")
hc.out
set.seed(2)
km.out = kmeans(sd.data, 4, nstart=20)
km.clusters = km.out$cluster
table(km.clusters, hc.clusters)
hc.out = hclust(dist(pr.out$x[,1:5]))
plot(hc.out, labels=nci.labs, main="Hier. Clust. on First Five Score Vectors")
table(cutree(hc.out,4), nci.labs)<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.18672610203070827, 'fraction_numerical': 0.03070827142149579, 'mean_word_length': 6.521415270018622, 'pattern_counts': {'":': 0, '<': 7, '<?xml version=': 0, '>': 7, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '1', 'dir': 'jupyter-structured-clean-dedup', 'id': '260447', 'license': 'MIT', 'n_tokens_mistral': 1743, 'n_tokens_neox': 1642, 'n_words': 339, 'path': 'notebooks/stats216v/chapter-10-r.ipynb', 'repo_name': 'gyuho/dplearn', 'size': '4051'}