【视频】主成分分析PCA降维方法和R语言分析葡萄酒可视化实例|数据分享

简介: 【视频】主成分分析PCA降维方法和R语言分析葡萄酒可视化实例|数据分享

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


降维技术之一是主成分分析 (PCA) 算法,该算法将可能相关变量的一组观察值转换为一组线性不相关变量。在本文中,我们将讨论如何通过使用 R编程语言使用主成分分析来减少数据维度分析葡萄酒数据查看文末了解数据获取方式

主成分分析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 # 标题文字的大小
)

相关文章
|
3月前
|
数据采集 机器学习/深度学习 数据可视化
R语言从数据到决策:R语言在商业分析中的实践
【9月更文挑战第1天】R语言在商业分析中的应用广泛而深入,从数据收集、预处理、分析到预测模型构建和决策支持,R语言都提供了强大的工具和功能。通过学习和掌握R语言在商业分析中的实践应用,我们可以更好地利用数据驱动企业决策,提升企业的竞争力和盈利能力。未来,随着大数据和人工智能技术的不断发展,R语言在商业分析领域的应用将更加广泛和深入,为企业带来更多的机遇和挑战。
|
2月前
|
数据挖掘 C语言 C++
R语言是一种强大的统计分析工具,提供了丰富的函数和包用于时间序列分析。
【10月更文挑战第21天】时间序列分析是一种重要的数据分析方法,广泛应用于经济学、金融学、气象学、生态学等领域。R语言是一种强大的统计分析工具,提供了丰富的函数和包用于时间序列分析。本文将介绍使用R语言进行时间序列分析的基本概念、方法和实例,帮助读者掌握R语言在时间序列分析中的应用。
58 3
|
3月前
|
数据采集 数据可视化 数据挖掘
R语言在金融数据分析中的深度应用:探索数据背后的市场智慧
【9月更文挑战第1天】R语言在金融数据分析中展现出了强大的功能和广泛的应用前景。通过丰富的数据处理函数、强大的统计分析功能和优秀的可视化效果,R语言能够帮助金融机构深入挖掘数据价值,洞察市场动态。未来,随着金融数据的不断积累和技术的不断进步,R语言在金融数据分析中的应用将更加广泛和深入。
|
7月前
|
数据可视化 数据挖掘 API
【R语言实战】聚类分析及可视化
【R语言实战】聚类分析及可视化
|
7月前
|
机器学习/深度学习 数据可视化
R语言逻辑回归logistic模型ROC曲线可视化分析2例:麻醉剂用量影响、汽车购买行为2
R语言逻辑回归logistic模型ROC曲线可视化分析2例:麻醉剂用量影响、汽车购买行为
|
4月前
|
机器学习/深度学习 数据采集 数据可视化
R语言在数据科学中的应用实例:探索与预测分析
【8月更文挑战第31天】通过上述实例,我们展示了R语言在数据科学中的强大应用。从数据准备、探索、预处理到建模与预测,R语言提供了完整的解决方案和丰富的工具集。当然,数据科学远不止于此,随着技术的不断发展和业务需求的不断变化,我们需要不断学习和探索新的方法和工具,以更好地应对挑战,挖掘数据的潜在价值。 未来,随着大数据和人工智能技术的普及,R语言在数据科学领域的应用将更加广泛和深入。我们期待看到更多创新的应用实例,为各行各业的发展注入新的动力。
|
4月前
|
数据采集 存储 数据可视化
R语言时间序列分析:处理与建模时间序列数据的深度探索
【8月更文挑战第31天】R语言作为一款功能强大的数据分析工具,为处理时间序列数据提供了丰富的函数和包。从数据读取、预处理、建模到可视化,R语言都提供了灵活且强大的解决方案。然而,时间序列数据的处理和分析是一个复杂的过程,需要结合具体的应用场景和需求来选择合适的方法和模型。希望本文能为读者在R语言中进行时间序列分析提供一些有益的参考和启示。
|
4月前
|
资源调度 数据挖掘
R语言回归分析:线性回归模型的构建与评估
【8月更文挑战第31天】线性回归模型是统计分析中一种重要且实用的工具,能够帮助我们理解和预测自变量与因变量之间的线性关系。在R语言中,我们可以轻松地构建和评估线性回归模型,从而对数据背后的关系进行深入的探索和分析。
|
4月前
|
机器学习/深度学习 数据采集
R语言逻辑回归、GAM、LDA、KNN、PCA主成分分类分析预测房价及交叉验证
上述介绍仅为简要概述,每个模型在实施时都需要仔细调整与优化。为了实现高度精确的预测,模型选择与调参是至关重要的步骤,并且交叉验证是提升模型稳健性的有效途径。在真实世界的房价预测问题中,可能还需要结合地域经济、市场趋势等宏观因素进行综合分析。
91 3
|
7月前
|
数据采集 数据可视化
利用R语言进行因子分析实战(数据+代码+可视化+详细分析)
利用R语言进行因子分析实战(数据+代码+可视化+详细分析)