拓端tecdat|R语言高维数据的主成分pca、 t-SNE算法降维与可视化分析案例报告
原文链接:http://tecdat.cn/?p=6592
原文出处:拓端数据部落公众号
降低维度有两个主要用例:数据探索和机器学习。它对于数据探索很有用,因为维数减少到几个维度(例如2或3维)允许可视化样本。然后可以使用这种可视化来从数据获得见解(例如,检测聚类并识别异常值)。对于机器学习,降维是有用的,因为在拟合过程中使用较少的特征时,模型通常会更好地概括。
在这篇文章中,我们将研究降维技术:
- 主成分分析(PCA):最流行的降维方法
- 核PCA:PCA的一种变体,允许非线性
- t-SNE t分布随机邻域嵌入:非线性降维技术
这些方法之间的关键区别在于PCA输出旋转矩阵,可以应用于任何其他矩阵以转换数据。
加载数据集
我们可以通过以下方式加载数据集:
df <- read.csv(textConnection(f), header=T)
# 选择变量
features <- c("Body", "Sweetness", "Smoky","Medicinal", "Tobacco", "Honey","Spicy", "Winey", "Nutty","Malty", "Fruity", "Floral")
feat.df <- df[, c("Distillery", features)]
关于结果的假设
在我们开始减少数据的维度之前,我们应该考虑数据。
由于来自邻近酿酒厂的威士忌使用类似的蒸馏技术和资源,他们的威士忌也有相似之处。
为了验证这一假设,我们将测试来自不同地区的酿酒厂之间威士忌特征的平均表达是否不同。为此,我们将进行MANOVA测试:
## Df Pillai approx F num Df den Df Pr(>F)
## Region 5 1.2582 2.0455 60 365 3.352e-05 ***
## Residuals 80
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
检验统计量在5%水平上是显着的,因此我们可以拒绝零假设(区域对特征没有影响)。
酿酒厂的地理位置
由于区域对威士忌起着重要作用,我们将通过绘制其纬度和经度来探索数据集中的酿酒厂所在的位置。以下苏格兰威士忌地区存在:
PCA
使用PCA可视化威士忌数据集:
在第二个图中,我们将绘制酿酒厂的标签,以便我们可以更详细地解释类别。
总的来说,主成分似乎反映了以下特征:
- PC1表示味道的强度:如烟熏味,药用味(如Laphroaig或Lagavulin)与温和味道(如Auchentoshan或Aberlour)
- PC2表示味道的复杂性:即味道特征(例如Glenfiddich或Auchentoshan)与更具特色的味道特征(例如Glendronach或Macallan)
## Cluster Campbeltown Highlands Islands Islay Lowlands Speyside
## 1 1 2 17 2 2 0 19
## 2 2 0 8 2 1 3 22
## 3 3 0 2 2 4 0 0
对类别的合理解释如下:
- 群集1: 复合威士忌,主要来自Highlands / Speyside
- 群集2: 均衡的威士忌,主要来自斯佩塞德和高地
- 群集3: 烟熏威士忌,主要来自艾莱岛
可视化有两个有趣的观察结果:
- Oban和Clynelish是唯一一个类似于艾莱岛酿酒厂口味的高地酿酒厂。
- Highland和Speyside威士忌主要在一个方面不同。在一个极端是平滑,均衡的威士忌,如Glenfiddich。在另一个极端是具有更有特色的味道,如麦卡伦。
这包含了我们对PCA的可视化研究。我们将在本文末尾研究使用PCA进行预测。
核PCA
内核PCA(KPCA)是PCA的扩展,它利用了内核函数,这些函数在支持向量机上是众所周知的。通过将数据映射到再现内核Hilbert空间,即使它们不是线性可分的,也可以分离数据。
在R中使用KPCA
要执行KPCA,我们使用包中的kpca
函数kernlab
。
使用此核,可以按如下方式减少维数:
检索到新维度后,我们现在可以在转换后的空间中可视化数据:
就可视化而言,结果比我们使用常规PCR获得的结果稍微粗糙一些。尽管如此,来自艾莱岛的威士忌分离得很好,我们可以看到斯佩塞特威士忌的集群,而高地威士忌则分布较广。
T-SNE
t-SNE已成为一种非常流行的数据可视化方法。
使用t-SNE可视化数据
在这里,我们将威士忌数据集的维度降低到两个维度:
与PCA相比,簇的分离更加清晰,特别是对于簇1和簇2。
对于t-SNE,我们必须进行解释:
- V1表示味道复杂性。这里的异常值是右侧的烟熏艾莱威士忌(例如Lagavulin)和左侧复杂的高地威士忌(例如麦卡伦)。
- V2表示烟熏/药用味道。
使用PCA进行监督学习
PCA是独立完成的,这一点至关重要。因此,需要遵循以下方法:
- 在测试数据集上执行PCA并在转换后的数据上训练模型。
- 将训练数据中的学习PCA变换应用于测试数据集,并评估模型在变换数据上的性能。
为此,我们将使用ķ最近邻模型。此外,因为所有的变量是在特征空间[0,4]。我们必须优化k,因此我们还预留了用于确定此参数的验证集。
PCA转换
首先,我们编写一些函数来验证预测的性能。
get.accuracy <- <strong>function</strong>(preds, labels) {correct.idx <- which(preds == labels)accuracy <- length(correct.idx) / length(labels)return (accuracy)
}
在下面的代码中,我们将对训练数据执行PCA并研究解释的方差以选择合适的维数
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]
## N_dim 1 2 3 4 5 6 7 8 9 10 11 12
## Cum_Var 22 41 52 63 72 79 85 90 94 97 99 100
由于有足够百分比的方差用3维可以解释,我们将使用该值来设置训练,测试和验证数据集。
现在我们已经将训练,验证和测试集转换为PCA空间,我们可以使用k最近邻居。
## [1] "PCA+KNN accuracy for k = 9 is: 0.571"
让我们研究一下使用PCA的模型是否优于基于原始数据的模型:
## [1] "KNN accuracy for k = 7 is: 0.524"
# 威士忌特色的方差
print(diag(var(data)))
## Body Sweetness Smoky Medicinal Tobacco Honey Spicy
## 0.8656635 0.5145007 0.7458276 0.9801642 0.1039672 0.7279070 0.6157319
## Winey Nutty Malty Fruity Floral
## 0.8700410 0.6752394 0.3957592 0.6075239 0.7310534
现在我们只能根据他们的口味确定苏格兰威士忌的六个区域,但问题是我们是否仍能获得更好的表现。我们知道很难预测数据集中代表性不足的苏格兰地区。那么,如果我们局限于更少的地区,会发生什么?
- 岛威士忌与艾莱岛威士忌组合在一起
- Lowland / Campbeltown威士忌与Highland威士忌组合在一起
通过这种方式,问题减少到三个区域:Island / Islay威士忌,Highland / Lowland / Campbeltown威士忌和Speyside威士忌。再次进行分析:
## [1] "PCA+KNN accuracy for k = 13 is: 0.619"
我们可以得出61.9%的准确度,我们可以得出结论,将我们样品较少的威士忌区域分组确实是值得的。
KPCA用于监督学习
应用KPCA进行预测并不像应用PCA那样简单。在PCA中,特征向量是在输入空间中计算的,但在KPCA中,特征向量来自核希尔伯特空间。因此,当我们不知道所使用的显式映射函数ϕ,不可能简单地转换新数据点。
# 注意:这会高估实际效果
accuracy <- get.accuracy(preds.kpca, df$Region[samp.test])
摘要
我们看到了如何使用PCA,KPCA和t-SNE来降低数据集的维数。PCA是一种适用于可视化和监督学习的方法。KPCA是一种非线性降维技术。t-SNE是一种最新的非线性方法,擅长可视化数据,但缺乏PCA的可解释性和稳健性。
这可能表明以下两点之一:
- 尝试新的的威士忌仍有很大的潜力。
- 有很多种味道的组合是可能的,并且很好地结合在一起。
我倾向于选择第二种选择。为什么?在PCA图中,右下角是没有样本所在的最大区域。看着靠近这个区域的威士忌,我们发现那些是y轴上的Macallan和x轴上的Lagavulin。麦卡伦以其复杂的口味而闻名,Lagavulin以其烟熏味而闻名。
位于二维PCA空间右下方的威士忌将同时具有两种特性:它既复杂又烟熏。我猜这种具有两种特性的威士忌对于口感来说太好了。
非常感谢您阅读本文,有任何问题请在下面留言!
参考文献
1.matlab偏最小二乘回归(PLSR)和主成分回归(PCR)
2.R语言高维数据的主成分pca、 t-SNE算法降维与可视化分析
3.主成分分析(PCA)基本原理及分析实例
4.基于R语言实现LASSO回归分析
5.使用LASSO回归预测股票收益数据分析
6.r语言中对lasso回归,ridge岭回归和elastic-net模型
7.r语言中的偏最小二乘回归pls-da数据分析
8.r语言中的偏最小二乘pls回归算法
9.R语言线性判别分析(LDA),二次判别分析(QDA)和正则判别分析(RDA)
拓端tecdat|R语言高维数据的主成分pca、 t-SNE算法降维与可视化分析案例报告相关推荐
- 主成分分析旋转矩阵MATLAB实现,R语言高维数据的主成分pca、t-SNE算法降维与可视化分析案例报告...
维度降低有两个主要用例:数据探索和机器学习.它对于数据探索很有用,因为维数减少到几个维度(例如2或3维)允许可视化样本.然后可以使用这种可视化来从数据获得见解(例如,检测聚类并识别异常值).对于机器学 ...
- R语言辅导高维数据的主成分pca、 t-SNE算法降维与可视化分析案例报告
降低维度有两个主要用例:数据探索和机器学习.它对于数据探索很有用,因为维数减少到几个维度(例如2或3维)允许可视化样本.然后可以使用这种可视化来从数据获得见解(例如,检测聚类并识别异常值).对于机器学 ...
- R语言高维数据的pca、 t-SNE算法降维与可视化分析案例报告
维度降低有两个主要用例:数据探索和机器学习.它对于数据探索很有用,因为维数减少到几个维度(例如2或3维)允许可视化样本.然后可以使用这种可视化来从数据获得见解(例如,检测聚类并识别异常值).对于机器学 ...
- 拓端tecdat|R语言逻辑回归(Logistic回归)模型分类预测病人冠心病风险
最近我们被客户要求撰写关于冠心病风险的研究报告,包括一些图形和统计输出. 相关视频:R语言逻辑回归(Logistic回归)模型分类预测病人冠心病风险 逻辑回归Logistic模型原理和R语言分类预测冠 ...
- 拓端tecdat|R语言用LOESS(局部加权回归)季节趋势分解(STL)进行时间序列异常检测
最近我们被客户要求撰写关于LOESS(局部加权回归)的研究报告,包括一些图形和统计输出. 这篇文章描述了一种对涉及季节性和趋势成分的时间序列的中点进行建模的方法.我们将对一种叫做STL的算法进行研究, ...
- 拓端tecdat|R语言向量误差修正模型 (VECMs)分析长期利率和通胀率影响关系
最近我们被客户要求撰写关于向量误差修正模型的研究报告,包括一些图形和统计输出. 向量自回归模型估计的先决条件之一是被分析的时间序列是平稳的.但是,经济理论认为,经济变量之间在水平上存在着均衡关系,可以 ...
- 拓端tecdat|R语言线性回归和时间序列分析北京房价影响因素可视化案例
最近我们被客户要求撰写关于北京房价影响因素的研究报告,包括一些图形和统计输出. 目的 房价有关的数据可能反映了中国近年来的变化: 人们得到更多的资源(薪水),期望有更好的房子 人口众多 独生子女政策: ...
- 数据分享|R语言用主成分PCA、 逻辑回归、决策树、随机森林分析心脏病数据并高维可视化...
全文链接:http://tecdat.cn/?p=22262 在讨论分类时,我们经常分析二维数据(一个自变量,一个因变量)(点击文末"阅读原文"获取完整代码数据). 但在实际生活中 ...
- 数据分享|R语言主成分PCA、因子分析、聚类对地区经济研究分析重庆市经济指标...
原文链接:http://tecdat.cn/?p=27515 建立重庆市经济指标发展体系,以重庆市一小时经济圈作为样本,运用因子分析方法进行实证分析,在借鉴了相关评价理论和评价方法的基础上,本文提取 ...
- 拓端tecdat荣获2022年度51CTO博主之星
相信技术,传递价值,这是51CTO每一个技术创作者的动力与信念,2022 年度,拓端tecdat 作为新锐的数据分析咨询公司,在51CTO平台上,不断的输出优质的技术文章,分享前沿创新技术,输出最佳生 ...
最新文章
- VMware虚拟机文件夹中各文件作用详解
- LeetCode:144_Binary Tree Preorder Traversal | 二叉树的前序遍历 | Medium
- 管理层如何做好目标管理?战略目标拆解是核心!
- bootstrap ui
- 树莓派远程连接的三种方式总结
- Tomcat WebappClassLoader 类加载机制源码分析
- Java线程面试题 Top 53
- 批处理的高吞吐率和高延迟的解释
- 计算机组成原理第四版蒋本珊课件_2020北理计算机考研813回忆(刚考完新鲜出炉)...
- 三星s3android wear,三星galaxy wearable下载
- 时间序列分析(3)| ARMA模型的拟合
- MATLAB dsolve 函数求解偏微分方程一例
- DO280介绍红帽OPENSHIFT容器平台--管理OpenShift与课外补充
- POJ 3684 Physics Experiment(弹性碰撞)
- 字符替换 英文字符串单词个数统计 python123题解
- 前端工程师的价值体现在哪里?
- 如何坚持完成自己的目标和计划?
- 汉堡按钮html写法,ProtoPie 详解 — 汉堡按钮制作
- 2020-2021中国区块链企业发展白皮书.pdf.
- 银河麒麟操作系统开发_银河初级开发者指南