关于数据挖掘:视频主成分分析PCA降维方法和R语言分析葡萄酒可视化实例数据分享附代码数据

11次阅读

共计 5031 个字符,预计需要花费 13 分钟才能阅读完成。

原文链接:http://tecdat.cn/?p=22492

最近咱们被客户要求撰写对于主成分剖析 PCA 的钻研报告,包含一些图形和统计输入。
降维技术之一是主成分剖析 (PCA) 算法,该算法将可能相干变量的一组察看值转换为一组线性不相干变量。在本文中,咱们将探讨如何通过应用 R 编程语言应用主成分剖析来缩小数据维度剖析葡萄酒数据

高维数据集的解决可能是一个简单的问题,因为咱们须要更高的计算资源,或者难以管制机器学习模型的适度拟合等。为防止此类问题,您能够升高数据集的维数。降维将数据从高维空间转移到低维空间,使数据的低维示意只保留原始数据的重要方面。

 
 

这是将三维数据集转换为三个二维数据集的可视化:该图阐明了一个三维特色空间被分成三个二维特色空间,之后,如果发现相干,特色的数量能够进一步缩小。

 

主成分剖析(PCA)

主成分剖析(PCA)是最风行的线性降维算法之一。它是一种基于投影的办法,通过将数据投影到一组正交(垂直)轴上来转换数据。

 

“PCA 的工作条件是,当高维空间中的数据映射到低维空间中的数据时,低维空间中数据的方差或分布应该最大。”

假如咱们必须将数据点的二维示意转换为一维示意。因而,咱们将尝试在它们上找到一条直线并投影数据点。(直线是一维的)。抉择直线的可能性有很多。

假如蓝色线将是咱们的新维度。如果你看到蓝线(连贯红点在蓝线上的投影),即每个数据点与直线的垂直距离就是投影误差。所有数据点的误差之和将是总投影误差。

咱们的新数据点将是那些原始蓝色数据点的投影(红色点)。正如咱们所看到的,咱们通过将二维数据点投影到一维空间(即直线)上,将它们转换为一维数据点。

您从实质上将数据的维度从二维缩小到一维。一维空间(也就是直线)是二维坐标系的子空间。

蓝线是应用数学优化构建的,以尽可能地沿该线最大化数据点之间的方差,数据在二维空间中沿蓝线具备最大方差。

咱们称这条线为咱们的第一个主成分。天然,线上的点依然比原始 2D 空间中的点更靠近,因为您正在失去辨别它们的维度。但在很多状况下,通过降维实现的简化超过了信息的损失,损失能够局部或全副重构。

在咱们之前的示例中,咱们只有一个主成分。一旦进入更高维空间,您可能会应用多个主成分,因为由一个主成分解释的方差通常有余。主成分是互相正交的向量。这意味着它们造成 90 度角。在数学上,正交向量是独立的,这意味着由第二个主成分解释的方差与第一个主成分的方差不重叠。因而,它们尽可能无效地示意信息。第一个主成分将捕捉大部分方差;第二个主成分将捕捉第一个未解释的方差的第二大部分,依此类推。

实际上,主成分是通过确保特色之间没有信息重叠来尽可能无效地示意数据及其差别的特色组合。原始特色通常显示出显着的冗余,这也是主成分剖析在降维方面如此无效的次要起因。

R 语言主成分剖析(PCA)葡萄酒可视化:主成分得分散点图和载荷图

咱们将应用葡萄酒数据集进行主成分剖析。

数据

数据蕴含 177 个样本和 13 个变量的数据框;vintages 蕴含类标签。这些数据是对成长在意大利同一地区但来自三个不同栽培品种的葡萄酒进行化学分析的后果:内比奥罗、巴贝拉和格里格诺葡萄。来自内比奥罗葡萄的葡萄酒被称为巴罗洛。

这些数据蕴含在三种类型的葡萄酒中各自发现的几种成分的数量。

# 看一下数据
head(no)

输入

转换和标准化数据

对数转换和标准化,将所有变量设置在同一尺度上。

# 对数转换
no_log <- log(no)

# 标准化
log_scale <- scale(no_log)
head(log_scale)

主成分剖析(PCA)

应用奇怪值合成算法进行主成分剖析

prcomp(log_scale, center=FALSE)
summary(PCA)

根本图形(默认设置)

带有根底图形的主成分得分和载荷图

plot(scores[,1:2], # x 和 y 数据
     pch=21, # 点形态
    cex=1.5, # 点的大小

legend("topright", # legend 的地位
       legend=levels(vint), # 图例显示

plot(loadings[,1:2], # x 和 y 数据
     pch=21, # 点的形态

text(loadings[,1:2], # 设置标签的地位

此外,咱们还能够在分数图中的组别上增加 95% 的置信度椭圆。


点击题目查阅往期内容

高维数据惩办回归办法:主成分回归 PCR、岭回归、lasso、弹性网络 elastic net 剖析基因数据

左右滑动查看更多

01

02

03

04

置信度椭圆图函数

## 椭圆曲线图
                        elev=0.95, # 椭圆概率程度
                        pcol=NULL, # 手工增加色彩,必须满足长度的因素
                        cexsize=1, # 点大小
                        ppch=21, # 点类型,必须满足因素的长度
                        legcexsize=2, # 图例字体大小
                        legptsize=2, # 图例点尺寸

    ## 设定因子程度
    if(is.factor(factr) {f <- factr} else {f <- factor(factr, levels=unique(as.character(factr)))
    }
    intfactr <- as.integer(f) # 设置与因子程度相匹配的整数向量

    ## 获取椭圆的数据
    edf <- data.frame(LV1 = x, LV2=y, factr = f) # 用数据和因子创立数据框
    ellipses <- dlply(edf, .(factr), function(x) {Ellipse(LV1, LV2, levels=elev, robust=TRUE, draw=FALSE) #从 dataEllipse()函数中按因子程度获取置信度椭圆点})
    ## 获取 X 和 Y 数据的范畴
    xrange <- plotat(range(c(as.vector(sapply(ellipses, function(x) x[,1])), min(x), max(x))))
    ## 为图块设置色彩
    if(is.null(pcol) != TRUE) { # 如果色彩是由用户提供的
        pgcol <- paste(pcol, "7e", sep="") # 减少不透明度

    # 绘图图形
    plot(x,y, type="n", xlab="", ylab="", main=""abline(h=0, v=0, col="gray", lty=2) #在 0 增加线条
    legpch <- c() # 收集图例数据的矢量
    legcol <- c() # 收集图例 col 数据的向量
    ## 增加点、椭圆,并确定图例的色彩
    ## 图例
    legend(x=legpos, legend=levels(f), pch=legpch, 
## 应用 prcomp()函数的 PCA 输入的轴图示
    pcavar <- round((sdev^2)/sum((sdev^2))

根底图形

绘制主成分得分图,应用根本默认值绘制载荷图

plot(scores[,1], # X 轴的数据
            scores[,2], # Y 轴的数据
            vint, # 有类的因素
            pcol=c(), # 用于绘图的色彩(必须与因素的数量相匹配)
            pbgcol=FALSE, #点的边框是彩色的?cexsize=1.5, # 点的大小 
            ppch=c(21:23), # 点的形态(必须与因子的数量相匹配)
            legpos="bottom right", # 图例的地位           
            legcexsize=1.5, # 图例文字大小
            legptsize=1.5, # 图例点的大小 
            axissize=1.5, # 设置轴的文字大小
            linewidth=1.5 # 设置轴线尺寸
)                         
title(xlab=explain[["PC1"]], # PC1 上解释的方差百分比
      ylab=explain[["PC2"]], # PC2 解释的方差百分比 
      main="Scores", # 题目
      cex.lab=1.5, # 标签文字的大小
      cex.main=1.5 # 题目文字的大小

plot(loadings[,1:2], # x 和 y 数据
     pch=21, # 点的形态
     cex=1.5, # 点的大小
    # type="n", # 不绘制点数
     axes=FALSE, # 不打印坐标轴
     xlab="", # 删除 x 标签
     ylab=""              # 删除 y 标签
)
pointLabel(loadings[,1:2], #设置标签的地位
           labels=rownames(PCAloadings), # 输入标签
           cex=1.5 # 设置标签的大小
) # pointLabel 将尝试将文本放在点的四周
axis(1, # 显示 x 轴
     cex.axis=1.5, # 设置文本的大小
     lwd=1.5 # 设置轴线的大小
)
axis(2, # 显示 y 轴
     las=2, # 参数设置文本的方向,2 是垂直的
     cex.axis=1.5, # 设置文本的大小
     lwd=1.5 # 设置轴线的大小
)
title(xlab=explain[["PC1"]], # PC1 所解释的方差百分比
      ylab=explain[["PC2"]], # PC2 解释的方差百分比 
    
      cex.lab=1.5, # 标签文字的大小
      cex.main=1.5 # 题目文字的大小
)



点击文末 “浏览原文”

获取全文残缺材料。

本文选自《 R 语言主成分剖析(PCA)葡萄酒可视化:主成分得分散点图和载荷图》。

点击题目查阅往期内容

数据分享 | R 语言用主成分剖析(PCA)PCR 回归进行预测汽车购买信息可视化
R 语言主成分剖析(PCA)葡萄酒可视化:主成分得分散点图和载荷图主成分剖析 PCA 谱合成、奇怪值合成 SVD 预测剖析运动员体现数据和降维可视化用回归和主成分剖析 PCA 回归穿插验证剖析预测城市犯罪率数据
R 语言 k -means 聚类、档次聚类、主成分(PCA)降维及可视化剖析鸢尾花 iris 数据集
R 语言无限混合模型 (FMM,finite mixture model)EM 算法聚类分析间歇泉喷发工夫
R 语言用温度对城市档次聚类、kmean 聚类、主成分剖析和 Voronoi 图可视化
R 语言 k -Shape 工夫序列聚类办法对股票价格工夫序列聚类
R 语言中的 SOM(自组织映射神经网络) 对 NBA 球员聚类分析
Python、R 对小说进行文本开掘和档次聚类可视化剖析案例
R 语言简单网络分析:聚类(社区检测)和可视化
R 语言中的划分聚类模型
基于模型的聚类和 R 语言中的高斯混合模型
r 语言聚类分析:k-means 和档次聚类
SAS 用 K -Means 聚类最优 k 值的选取和剖析
R 语言 k -Shape 工夫序列聚类办法对股票价格工夫序列聚类
基于 LDA 主题模型聚类的商品评论文本开掘
R 语言中实现档次聚类模型
用 R 语言进行网站评论文本开掘聚类
R 语言鸢尾花 iris 数据集的档次聚类分析
R 语言对用电负荷工夫序列数据进行 K -medoids 聚类建模和 GAM 回归
R 语言聚类算法的利用实例
基于模型的聚类和 R 语言中的高斯混合模型

正文完
 0