推荐 :降维是数据科学家的必由之路

2024-04-28 11:58

本文主要是介绍推荐 :降维是数据科学家的必由之路,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

作者:shanthababu  翻译:王可汗   校对:欧阳锦


本文约2200字,建议阅读10分钟本文为大家介绍了降维的概念及降维技术主成分分析(PCA)在特征工程中的应用。

 

本文作为数据科学博客马拉松的一部分发表。

https://datahack.analyticsvidhya.com/contest/data-science-blogathon-7/

你好!我喜欢分享我作为一个初级数据科学家的有趣经历,我甚至可以说在那时我在这个数据科学领域只是一个初学者。

有个客户来找我们要用机器学习来实现他们的问题,不管以无监督形式还是有监督形式。我本以为这将是一如既往的执行模式和流程,因为根据我小规模实现或训练的经验,我们往往使用25~30个特征。我们用它来预测、分类或聚类数据集,并分享结果。

但这一次,他们提出了成千上万的特征,但我有点惊讶和害怕,开始晕头转向。与此同时,我的高级数据科学家把团队里的每个人都带到了会议室。

 

我的高级数据科学家(Senior Data Scientist ,Sr. DS)创造了新单词,对我们来说,这只不过是降维度灾难的问题,所有的初学者都认为他将解释物理层面的一些东西,因为我们几乎不记得我们培训项目中遇到过这类情况。接下来,他开始在画板上画(见图1)。当我们开始看1-D, 2-D时我们很舒服,但3-D时,我们开始晕头转向。

 

1-D,2-D

 

3-D

Sr. DS继续他的讲座,所有这些示例图片都是显著的特征,我们可以在实时场景中使用它们,许多机器学习问题涉及数以千计的特征,所以我们最终训练这些模型的速度会变得非常慢,以至于不能很好地解决业务问题,并且这时候我们不能冻结模型,这种情况就是所谓的“维度灾难”引起的。然后,我们开始思考一个问题,我们应该如何处理这个“维度灾难”问题。

他深吸了一口气,继续以自己的风格分享自己的经历。他从一个简单的定义开始,如下:

 

维度是什么?

我们可以说,我们的数据集中特征的数量被称为其维数。

什么是降维?

降维是对给定数据集进行(特征)降维的过程。也就是说,如果您的数据集有100列/特性,并将列数减少到了20-25列。简单地说,您是在二维空间中将柱面/球体转换成圆或立方体,如下图所示。

 

3d – 2d转换

他在下面清楚地描绘了模型性能和特征(维度)数量之间的关系。随着特征数量的增加,数据点的数量也成比例地增加。更直接的说法是越多的特征会带来更多的数据样本,所以我们已经表示了所有的特征组合及其值。

 

模型性能Vs特征数量

 

现在房间里的每个人都从一个更高的角度领会到了什么是“维度灾难”。

 

降维的好处

突然,一个团队成员问他能否告诉我们在给定数据集上进行特征降维的好处。我们的前辈并没有停止进一步分享他渊博的知识。他继续如下。如果我们进行降维,会有很多好处。

  • 它有助于消除冗余的特征和噪声误差因素,最终增强给定数据集的可视化。

  • 由于降低了维度,可以表现出优秀的内存管理。

  • 通过从数据集中删除不必要的特征列表来选择正确的特征,从而提高模型的性能。

  • 当然,更少的维度(强制性的维度列表)需要更少的计算效率,更快地训练模型,提高模型的准确性。

  • 大大降低了整个模型及其性能的复杂性和过拟合。

是的!这是一个令人敬畏的,鲁棒的和动态的“降维”。现在,我可以将降维的优点总结如下图所示。希望对你也有帮助。

 

降维的好处

当然,下一步是什么!我们接下来探讨有哪些技术可以用于降维。

 

降维技术

我们的Sr. DS对数据科学领域中任何可能的技术非常感兴趣,他继续他的解释。降维的方法被笼统地分为两种,如前面提到,考虑选择最佳拟合特征或删除给定高维数数据集中不太重要的特征。些高级技术通常被称为特征选择特征提取,基本上,这是特征工程的一部分。他把这些点讲得很清楚。

 

特征工程家族中的降维定位

他带领我们进一步深入概念,理解在高维数据集上应用“降维”的重点。一旦我们看到下图,我们就可以将特征工程和降维联系起来。看看这个图,我们Sr. DS的降维的精髓就在里面!

 

每个人都想知道如何通过简单的编码来使用Python库来使用这些降维技术。我们的Sr. DS要求我拿来彩色笔和板擦。

Sr. DS拿起新的蓝笔,开始用一个简单的例子来解释PCA,如下所示,在此之前,他解释了什么是降维PCA。

主成分分析(PCA):主成分分析是一种对给定数据集进行降维的技术,在信息损失可忽略的情况下,增加了可解释性。这里变量的数量在减少,因此进一步的分析更简单。它把一组相关的变量转换成一组不相关的变量。用于机器学习预测建模。他建议我们通过特征向量,特征值分析。

 

他取了熟悉的wine.csv来快速分析。

 # Import all the necessary packages
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import confusion_matrix
from sklearn.metrics import accuracy_score
from sklearn import metrics
%matplotlib inline
import matplotlib.pyplot as plt
%matplotlib inline
wq_dataset = pd.read_csv('winequality.csv')

对于给定数据集的数据分析

wq_dataset.head(5)

 

wq_dataset.describe()

 

wq_dataset.isnull().any()

 

在给定的数据集中没有空值,很好,我们很幸运。

 

找出每个特征的相关性

correlations = wq_dataset.corr()['quality'].drop('quality')
print(correlations)

 

 

使用热力图进行相关性表示

sns.heatmap(wq_dataset.corr())
plt.show()

x = wq_dataset[features]
y = wq_dataset['quality']
[‘fixed acidity’, ‘volatile acidity’, ‘citric acid’, ‘chlorides’, ‘total sulfur dioxide’, ‘density’, ‘sulphates’, ‘alcohol’]

#使用train_test_split创建训练和测试集

x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=3)

训练和测试集形状

print('Traning data shape:', x_train.shape)
print('Testing data shape:', x_test.shape)Traning data shape: (1199, 8)
Testing data shape: (400, 8)

PCA降维实现(2列)

from sklearn.decomposition import PCA
pca_wins = PCA(n_components=2)
principalComponents_wins = pca_wins.fit_transform(x)

命名为第1主成分,第2主成分

pcs_wins_df = pd.DataFrame(data = principalComponents_wins, columns = ['principal component 1', 'principal component 2'])

新的主成分及其值。

pcs_wins_df.head()

 

当我们看到上面两个新的列名和值时,我们都感到惊讶,我们问‘fixed acidity’, ‘volatile acidity, ‘citric acid’, ‘chlorides’, ‘total sulfur dioxide’, ‘density’, ‘sulphates’, ‘alcohol’等列会发生什么变化。Sr. DS说所有的都没有了,在应用了PCA对给定数据进行降维后,我们现在只有两列特征值,然后我们将实现很少的模型,这将是正常的方式。

 

他提到了一个关键词“每一个主成分的变化量

 

这是由主成分解释的方差的分数是主成分的方差和总方差之间的比率

print('Explained variation per principal component: {}'.format(pca_wins.explained_variance_ratio_))
Explained variation per principal component: [0.99615166 0.00278501]

 

随后,他演示了以下模型

  • 逻辑回归

  • 随机森林

  • KNN

  • 朴素贝叶斯

这些模型的精度更好,每个模型之间的差异很小,但他提到这是为了实现PCA。房间里的每个人都觉得我们完成了一次很棒的挑战。他建议我们动手尝试其他的降维技术。

 

好了,朋友们!感谢您的时间,希望我能在这里以正确的方式讲述我在降维技术方面的学习经验,我相信这将有助于在机器学习问题陈述中继续处理复杂数据集的旅程。加油!

原文标题:

Dimensionality Reduction a Descry for Data Scientist

原文链接:

https://www.analyticsvidhya.com/blog/2021/04/dimensionality-reduction-a-descry-for-data-scientist/

译者简介:王可汗,清华大学机械工程系直博生在读。曾经有着物理专业的知识背景,研究生期间对数据科学产生浓厚兴趣,对机器学习AI充满好奇。期待着在科研道路上,人工智能与机械工程、计算物理碰撞出别样的火花。希望结交朋友分享更多数据科学的故事,用数据科学的思维看待世界。

END

版权声明:本号内容部分来自互联网,转载请注明原文链接和作者,如有侵权或出处有误请和我们联系。


合作请加QQ:365242293  

数据分析(ID : ecshujufenxi )互联网科技与数据圈自己的微信,也是WeMedia自媒体联盟成员之一,WeMedia联盟覆盖5000万人群。

这篇关于推荐 :降维是数据科学家的必由之路的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/943203

相关文章

MySQL数据目录迁移的完整过程

《MySQL数据目录迁移的完整过程》文章详细介绍了将MySQL数据目录迁移到新硬盘的整个过程,包括新硬盘挂载、创建新的数据目录、迁移数据(推荐使用两遍rsync方案)、修改MySQL配置文件和重启验证... 目录1,新硬盘挂载(如果有的话)2,创建新的 mysql 数据目录3,迁移 MySQL 数据(推荐两

Python数据验证神器Pydantic库的使用和实践中的避坑指南

《Python数据验证神器Pydantic库的使用和实践中的避坑指南》Pydantic是一个用于数据验证和设置的库,可以显著简化API接口开发,文章通过一个实际案例,展示了Pydantic如何在生产环... 目录1️⃣ 崩溃时刻:当你的API接口又双叒崩了!2️⃣ 神兵天降:3行代码解决验证难题3️⃣ 深度

MySQL快速复制一张表的四种核心方法(包括表结构和数据)

《MySQL快速复制一张表的四种核心方法(包括表结构和数据)》本文详细介绍了四种复制MySQL表(结构+数据)的方法,并对每种方法进行了对比分析,适用于不同场景和数据量的复制需求,特别是针对超大表(1... 目录一、mysql 复制表(结构+数据)的 4 种核心方法(面试结构化回答)方法 1:CREATE

详解C++ 存储二进制数据容器的几种方法

《详解C++存储二进制数据容器的几种方法》本文主要介绍了详解C++存储二进制数据容器,包括std::vector、std::array、std::string、std::bitset和std::ve... 目录1.std::vector<uint8_t>(最常用)特点:适用场景:示例:2.std::arra

SpringBoot整合Kafka启动失败的常见错误问题总结(推荐)

《SpringBoot整合Kafka启动失败的常见错误问题总结(推荐)》本文总结了SpringBoot项目整合Kafka启动失败的常见错误,包括Kafka服务器连接问题、序列化配置错误、依赖配置问题、... 目录一、Kafka服务器连接问题1. Kafka服务器无法连接2. 开发环境与生产环境网络不通二、序

MySQL中的DELETE删除数据及注意事项

《MySQL中的DELETE删除数据及注意事项》MySQL的DELETE语句是数据库操作中不可或缺的一部分,通过合理使用索引、批量删除、避免全表删除、使用TRUNCATE、使用ORDERBY和LIMI... 目录1. 基本语法单表删除2. 高级用法使用子查询删除删除多表3. 性能优化策略使用索引批量删除避免

MySQL 数据库进阶之SQL 数据操作与子查询操作大全

《MySQL数据库进阶之SQL数据操作与子查询操作大全》本文详细介绍了SQL中的子查询、数据添加(INSERT)、数据修改(UPDATE)和数据删除(DELETE、TRUNCATE、DROP)操作... 目录一、子查询:嵌套在查询中的查询1.1 子查询的基本语法1.2 子查询的实战示例二、数据添加:INSE

Linux服务器数据盘移除并重新挂载的全过程

《Linux服务器数据盘移除并重新挂载的全过程》:本文主要介绍在Linux服务器上移除并重新挂载数据盘的整个过程,分为三大步:卸载文件系统、分离磁盘和重新挂载,每一步都有详细的步骤和注意事项,确保... 目录引言第一步:卸载文件系统第二步:分离磁盘第三步:重新挂载引言在 linux 服务器上移除并重新挂p

使用MyBatis TypeHandler实现数据加密与解密的具体方案

《使用MyBatisTypeHandler实现数据加密与解密的具体方案》在我们日常的开发工作中,经常会遇到一些敏感数据需要存储,比如用户的手机号、身份证号、银行卡号等,为了保障数据安全,我们通常会对... 目录1. 核心概念:什么是 TypeHandler?2. 实战场景3. 代码实现步骤步骤 1:定义 E

使用C#导出Excel数据并保存多种格式的完整示例

《使用C#导出Excel数据并保存多种格式的完整示例》在现代企业信息化管理中,Excel已经成为最常用的数据存储和分析工具,从员工信息表、销售数据报表到财务分析表,几乎所有部门都离不开Excel,本文... 目录引言1. 安装 Spire.XLS2. 创建工作簿和填充数据3. 保存为不同格式4. 效果展示5