数据科学中的降维技术

在作为初级数据科学家的工作经历中,可以说当时在这个数据科学领域还是一个新手。有一次,一位客户来找,希望为他们的问题陈述实施机器学习,无论是无监督还是监督的形式。以为这将是一个常规的执行和处理过程,因为根据在小规模实施或培训期间的经验,通常有25-30个特征,会围绕这些特征进行操作,预测、分类或聚类数据集并分享结果。但这次他们带来了成千上万的特征,有点惊讶和害怕实施,头开始像任何事情一样旋转。与此同时,高级数据科学家把团队的每个人都带进了会议室。

高级数据科学家(Sr. DS)向介绍了一个新词,那就是“降维”(Dimensionality Reduction),或者说“维度的诅咒”(Curse Of Dimensionality)。所有新手都以为他要解释一些物理上的东西,有点记得在培训项目中遇到过这个术语。然后他开始在黑板上画图(参考图1)。当开始看1-D、2-D时,感到很舒服,但3-D及以上头开始旋转。

Sr. DS继续他的讲座,所有这些样本图片只是值得注意的特征,可以围绕这些特征进行操作,在实时场景中,许多机器学习(ML)问题涉及成千上万的特征,所以最终训练的模型变得极其缓慢,不会为商业问题提供好的解决方案,无法冻结模型,这种情况就是所谓的“维度的诅咒”。然后都开始问如何处理这个问题。

他深吸了一口气,继续以他自己的风格分享他的经验。他从简单的定义开始。什么是维度?可以说数据集中的特征数量被称为其维度。什么是降维?降维是减少给定数据集的维度(特征)的过程。假设数据集有一百列/特征,将列数减少到20-25。简单地说,就是将圆柱/球体转换为二维空间中的圆,或者将立方体转换为平面,如下所示。

他清楚地画出了模型性能和特征数量(维度)之间的关系。随着特征数量的增加,数据点的数量也成比例增加。直接的陈述是,更多的特征会带来更多的数据样本,所以代表了所有特征及其值的组合。

现在房间里的每个人都对“维度的诅咒”有了很高的感觉。降维的好处。突然,一个团队成员问是否可以告诉在给定数据集中进行降维的好处。Sr. DS没有停止分享他广泛的知识。他继续如下。如果进行降维,会有很多好处。它有助于去除特征中的冗余和噪声误差因素,最终增强给定数据集的可视化。由于降维,出色的内存管理活动得以展现。通过从数据集中移除不必要的特征列表来选择正确的特征,从而提高模型的性能。当然,较少的维度(必须的维度列表)需要较少的计算效率,并以提高的模型准确性更快地训练模型。显著降低整体模型及其性能的复杂性和过拟合。

是的!这是一个令人敬畏的景象,鲁棒性和动态的“降维”。现在可以可视化整体好处,如下所示。希望它也能帮助:)降维的好处。接下来,当然是!跳到下一个主要问题,降维技术有哪些。降维-技术。Sr. DS非常感兴趣,继续解释数据科学领域可能的技术,大致分为两类,如前所述,考虑选择最佳适应特征或移除给定高维数据集中较不重要的特征。这些高级技术通常被称为特征选择特征提取,基本上是特征工程的一部分。他完美地连接了点。

在特征工程家族中定位降维。他带进一步深入概念,以理解应用于高维数据集的“降维”的大局。一旦看到下图,就能将特征工程和降维联系起来。看看这个图,Sr. DS在其中的降维的本质!每个人都对如何使用Python库应用所有这些感兴趣,Sr. DS让带来彩色标记和粉笔。

Sr. DS拿起新的蓝色标记,开始用一个简单的例子解释PCA,在此之前,他解释了PCA对降维是什么。主成分分析(PCA):PCA是一种降维技术,通过增加可解释性而不损失信息来减少给定数据集的变量。在这里,变量的数量在减少,所以它使进一步的分析更简单。它将一组相关的变量转换为一组不相关的变量。用于机器学习预测建模。他建议阅读特征向量、特征值。他熟悉wines.csv,用于他的快速分析。

# 导入所有必要的包 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') EDA on a given data set 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 implementation for Dimensionality reduction (with 2 columns) 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()

所有人都对上述两列新列名和值感到惊讶,问“固定酸度”、“挥发性酸度”、“柠檬酸”、“氯化物”、“总二氧化硫”、“密度”、“硫酸盐”、“酒精”列发生了什么。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
  • 朴素贝叶斯
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485