Untuk membuat titik-titik data untuk plot yang ditunjukkan pada Gambar 2.3, kita perlumenghitung vektor eigen dari matriks sigma, deviasi standar untukdistribusi normal bivariat. Vektoreigen dari sebuah matriks akan dibahasakan dibahas dalam bab selanjutnya. Transformasi menggunakan vektor eigen ini terkaitdengan analisis komponen utama, salah satu model pembelajaran tanpa pengawasan yang paling populersalah satu model pembelajaran yang paling populer dalam ilmu data. Untuk aplikasi praktis ini, tanpa menjelaskan secaraUntuk aplikasi praktis ini, tanpa menjelaskan secara detail, kami menunjukkan bagaimana melakukan transformasi ke titik-titik data yang ditunjukkan pada Gambar 2.3.Kami akan menjelaskan secara lebih rinci ketika kami membahas vektor eigen dan nilai eigennya di bab selanjutnya.nilai eigennya di bab selanjutnya.Untuk contoh kerja, kami menghasilkan titik-titik data dari distribusi bivariatbivariat distribusi normal. Distribusi normal bivariat didefinisikan oleh mean danstandar deviasi, tidak seperti distribusi normal univariat, bagaimanapun, rata-ratadidefinisikan oleh vektor dua dimensi dan deviasi standarnya didefinisikanoleh matriks 2 × 2. Kami menggunakan paket R mvtnorm [18] dan kami menggunakan paket matlibuntuk operasi-operasi matriks. Pertama, kami mengunggah semua paket yang dibutuhkan:
library(mvtnorm)
library(ggplot2)
library(matlib)
Paket ggplot2 [46] adalah untuk membuat plot. Kemudian, kita mendefinisikan mean dan standar deviasi sebagai:
## Standard deviation
sigma <- matrix(c(4,2,2,3), ncol = 2, nrow = 2)
## Mean
mu <- c(1, 2)
Untuk data ini, kami memiliki ukuran sampel n = 10.000
n <- 1000
Fungsi set.seed() menetapkan seed, yang merupakan nilai untuk mulai menghasilkanbilangan acak. Fungsi set.seed() mengatur ulang nilai dari bilangan acakangka acak dan fungsi acak dari nilai yang telah diperoleh sebelumnya. Kita menetapkanseed untuk mereproduksi hasil yang sama. Jika kita menetapkan seed yang sama, makakita dapat mereproduksi angka acak yang sama:
set.seed(123)
x <- rmvnorm(n = n, mean = mu, sigma = sigma)
d <- data.frame(x)
p2 <- ggplot(d, aes(x = X1, y = X2)) +
geom_point(alpha = .5) +
geom_density_2d()
p2
First we translate all data points stored as a variable x by -mu = [−1,
−2]since the center of the distribution is at mu = [1, 2].
y <- x - mu
We store these new data points as a variable y.Then we compute the eigen vectors of sigma.
E <- eigen(sigma)
E$vectors
## [,1] [,2]
## [1,] -0.7882054 0.6154122
## [2,] -0.6154122 -0.7882054
Vektor eigen dari matriks sigma disimpan dalam vektor E$ dalam bentukdari sebuah matriks. Setiap vektor kolom adalah vektor eigen.Kemudian kita ambil perkalian matriks, kumpulan data yang disimpan sebagai matriks 10000 × 2dikalikan dengan matriks 2 × 2, transpose dari kebalikan darimatriks E. Kebalikan dari sebuah matriks akan dibahas di bagian selanjutnya.
y <- y %*% t(inv(E$vectors))
Seperti yang telah kita lakukan untuk kumpulan data x, kita menetapkan data ini sebagai “bingkai data” menggunakan fungsi fungsi data.frame():
dd <- data.frame(y)
p3 <- ggplot(dd, aes(x = X1, y = X2)) +
geom_point(alpha = .5) +
geom_density_2d()
p3