Kodomo

Пользователь

Методы понижения размерности

PCA

z1 <- rnorm(10000, mean=1, sd=1)
z2 <- rnorm(10000, mean=3, sd=3) 
z3 <- rnorm(10000, mean=5, sd=5) 
z4 <- rnorm(10000, mean=7, sd=7) 
z5 <- rnorm(10000, mean=9, sd=9) 
mydata <- matrix(c(z1, z2, z3, z4, z5), 2500, 20, byrow=T, dimnames=list(paste("R", 1:2500, sep=""), paste("C", 1:20, sep=""))) 

summary(pca) # Выводит на экран summary для всех компонент
summary(pca)$importance[, 1:6] # для первых шести компонент

pca$rotation #перевод старых координат в новые

mycolors <- c("red", "green", "blue", "magenta", "black") 
#График двух первых компонет
plot(pca$x, pch=20, col=mycolors[sort(rep(1:5, 500))])

Многомерное шкалирование

loc <- cmdscale(eurodist)

plot(loc[,1], -loc[,2], type="n", xlab="", ylab="", main="cmdscale(eurodist)")

text(loc[,1], -loc[,2], rownames(loc), cex=0.8)

tSNE

install.packages("Rtsne")
library("Rtsne")

iris_unique <- unique(iris)

tsne<-Rtsne(iris_unique[, c(-5)]) 

plot(tsne$Y, col=iris_unique[,5], pch=19)

Сделаем для сравнения PCA

pca<-prcomp(iris_unique[, -5]) 

plot(pca$x, col=iris_unique[,5], pch=19)

Промоторы и энхансеры

Попробуем применить различные методы уменьшения размерности на уже знакомом нам датасете про эпигенетические модификации в промоторах и энхансерах.

Загрузим данные об эпигенетических модификациях в энхансерах и промоторах. Для простоты создано две таблицы - обучающая выборка (train) и тестовая (test) выборка. Данные для удобства уже прологарифмированы.

train=read.table("http://makarich.fbb.msu.ru/artemov/R/enhancer_promoter_train.tab", header=T)
test=read.table("http://makarich.fbb.msu.ru/artemov/R/enhancer_promoter_test.tab", header=T)

PCA

(Шаг 0). Посмотрим, как устроены данные, методом PCA:

#все колонки, кроме y (столбец Type)
train2=train[,2:ncol(train)]
pc=prcomp(train2)
pc=prcomp(train2, scale=T) # с применением шкалирования
#покрасим по типа элемента (энхансер и промотер)
plot(pc$x, pch=19, col=train$Type)

Сразу нарисовать графики со всеми главными осями

pairs(pc$x, col=train$Type)
#или
pairs(pc$x[,1:4], col=train$Type)

Можно рисовать в 3d и крутить картинку :-)

install.packages("rgl")
library(rgl)
plot3d(pc$x, col=as.integer(train$Type))

Какие переменные x вносят наибольший вклад в главные оси?

plot(pc$rotation, pch=19)
text(pc$rotation[,1], pc$rotation[,2], rownames(pc$rotation))

barplot(pc$rotation[,1], las=2, main="PC1")

Задание

Попробуйте применить к тем же данным tSNE. Поварьируйте параметр perplexity (20, 30, 50) и dim (преобразуем в двумерные и трехмерные координаты).