降维
一、PCA
install.packages("pacman")
pacman::p_load(rvest,tidyverse,mclust,factoextra,ggplot2,umap,GGally,dplyr)
pca第一步跟第二步是去中心化和去标准差,使每个维度均值等于0,每个维度的方差等于1
pca第三步跟第四步是找到最大投影方差的方向,然后在此方向投影
例子
install.packages("ISLR")
library("ISLR")
View(College)
data=data.matrix(College)将变量变成数值型变量
data=data.frame(data)
ggpairs(data,aes(col="red"),
upper=list(continuous="cor"), 上三角plot图为相关系数
lower=list(continuous="points"), 下三角plot图为散点图
diag=list(continuous="densityDiag"))+ 对角线plot图为密度图
theme_bw()
ggcorr(data =data[,1:12],label = TRUE,
label_size = 4, label_round = 2,
label_alpha = TRUE, hjust = 0.8, size = 3, color = "grey50")#相关性热图
PCA--prcomp
pr.out=prcomp(data,scale. = TRUE)
names(pr.out)#"sdev" "rotation" "center" "scale" "x" 是pca的五种变量
pr.out$center#标准化——均值等于0:
#第一个维度均值减去1.7271 第二个维度均值减去3001.638353....
pr.out$scale#标准化——去标准差:
#每个维度减去均值之后就要除以标准差:第一个除以0.4457084 第二个除以3870.2014844....
pr.out$rotation#每一列就是一个投影方向:每一个特征向量对应一个特征值
pr.out$sdev #特征值大的说明投影后的投影方差就大
pr.out$x[,1:3]降维 降到三个维度
plot(pr.out$x[,1:2]) 二维可视化
碎石图
fviz_eig(pr.out, addlabels= TRUE)#碎石图帮助我们看新的变量贡献度,高度为特征值所占的比例
biplot
biplot(pr.out)#18个维度即18个箭头
考虑降到哪个维度
pr.var=pr.out$sdev^2
plot(pr.var,ylab = "variance",xlab = "Principal Component",type = 'b')
找像肘关节的节点——567,所以降到7
查看有多少信息损失
pve=cumsum(pr.var)/cumsum(pr.var)[length(pr.var)]
pve[7] 0.8423239,说明损失大约16%的信息
pve[13] 0.9745446,说明损失大约2%的信息,故应该从18维降维到13维
pr.out$x[,1:13]
PCA--princomp
pc.cr<-princomp(data,cor=TRUE)
summary(pc.cr) 每个主成分重要性的排序
# Proportion of Variance 0.3033296 意思是占总方差的30%
loadings(pc.cr) 看主成分的得分,看每种因素属于哪种主成分
plot(pc.cr)#显示主成分分数的图
biplot(pc.cr)#能够清楚的看到哪些特征对主成分(PC)的贡献值大
二、t-SNE
t-SNE本质是一种嵌入模型,能够将高维空间中的数据映射到低维空间中并保留数据集的局部特性
Rtsne输入对象必须为矩阵
dims参数设置降维后的维度,默认为2
theta参数取值越大,结果的准确率越低,默认为0.5
theta此处设置为0.0 ,可计算出t-SNE的准确值,但是运行时间会比较长
pca表示是否对输入的数据进行pca分析,此处设置TRUE
dims参数设置降维后的维度,默认为2
聚类
监督式学习:训练集有明确答案,监督学习就是寻找问题(又称输入、特征、自变量)与答案(又称输出、目标、因变量)之间关系的学习方式。
监督学习模型有两类:分类和回归。
• 分类模型:目标变量是离散的分类型变量
• 回归模型:目标变量是连续性数值型变量
无监督学习:只有数据,无明确答案,即训练集没有标签。常见的无监督学习算法有聚类(clustering),由计算机自己找出规律,把有相似属性的样本放在一组,每个组也称为簇(cluster)
一、k-means
k-means聚类
setwd("C:/Users/JuinYim/Documents/Personal/Study/6.visualization/homework/homework2")
protein<-read.csv('protein.csv')
view(protein)
protein_pca <- prcomp(protein[2:10], center = FALSE, scale. = FALSE)
protein_x_pca <- mutate(protein, pc1 = protein_pca$x[,1],
pc2 = protein_pca$x[,2],
pc3 = protein_pca$x[,3])
ggplot(protein_x_pca, aes(pc1, pc2)) +
geom_point(aes(size = pc3), shape = 21, fill = "green") +
geom_text(aes(label = Country))
ggscatmat(protein)
PCA及初步探索
install.packages("corrplot")
library(corrplot)
data<-protein[,2:9]
str(protein)
data_scale<-scale(data) 数据标准化
data_cor <- cor(data_scale) 数据相关性探索
corrplot(corr = data_cor, method = 'color', addCoef.col="grey")
相关性量化表现
数据初步可视化探索
建立任务
task = TaskClust$new("protein", protein[,2:10])
search = ps(centers = p_int(2,15),algorithm = p_fct(levels = c("Hartigan-Wong","Lloyd","MacQueen")))
instance = TuningInstanceSingleCrit$new(
task = task,
learner = lrn("clust.kmeans"),
resampling = rsmp("holdout"),
measure = msr("clust.db"),
search_space = search,
terminator = trm("none"))
调参过程
tuner = tnr("grid_search", resolution = 20)
tuner$optimize(instance)
autoplot(instance)
ggplot(instance$archive$extended_archive, aes(centers, clust.db, color = algorithm)) +
geom_line()
开始搭建
lrn_kmeans = lrn("clust.kmeans")
lrn_kmeans$param_set$values = list(centers = 3)#6 set by figure above
lrn_kmeans$param_set
lrn_kmeans$train(task)
预测绘图
obj = lrn_kmeans$predict(task)
autoplot(obj, task, type = "pca")
data6pca <- mutate(protein_x_pca , clust = lrn_kmeans$assignments)
ggplot(data6pca, aes(pc1, pc2, color = factor(clust))) +
geom_text(aes(label = Country, size = pc3)) +
scale_color_brewer(palette = "Dark2")