Untuk membuat titik-titik data untuk plot yang ditunjukkan pada Gambar 2.3, kita perlu menghitung vektor eigen dari matriks sigma, deviasi standar untuk distribusi normal bivariat. Vektoreigen dari sebuah matriks akan dibahasakan dibahas dalam bab selanjutnya. Transformasi menggunakan vektor eigen ini terkait dengan analisis komponen utama, salah satu model pembelajaran tanpa pengawasan yang paling populer salah satu model pembelajaran yang paling populer dalam ilmu data. Untuk aplikasi praktis ini, tanpa menjelaskan secara untuk 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 bivariat bivariat distribusi normal. Distribusi normal bivariat didefinisikan oleh mean dan standar deviasi, tidak seperti distribusi normal univariat, bagaimanapun, rata-rata didefinisikan oleh vektor dua dimensi dan deviasi standarnya didefinisikan oleh matriks 2 × 2. Kami menggunakan paket R mvtnorm [18] dan kami menggunakan paket matlib untuk 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 <- 10000
Fungsi set.seed() menetapkan seed, yang merupakan nilai untuk mulai menghasilkan bilangan acak. Fungsi set.seed() mengatur ulang nilai dari bilangan acak angka acak dan fungsi acak dari nilai yang telah diperoleh sebelumnya. Kita menetapkan seed untuk mereproduksi hasil yang sama. Jika kita menetapkan seed yang sama, maka kita 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