问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

了解 PCA 并导入数据集

创作时间:
作者:
@小白创作中心

了解 PCA 并导入数据集

引用
1
来源
1.
https://learn.microsoft.com/zh-cn/training/modules/principal-component-analysis-food-composition/2-pca-theory-download-data

主成分分析(PCA)是一种常用的降维技术,通过减少数据集的维度来简化分析过程。本文将从理论到实践,详细介绍PCA的核心概念,并通过一个实际数据集(美国农业部国家营养标准参考数据库)来演示PCA的应用过程。

理论上的 PCA

减少必须处理的维度数的一种方法是减少分析中考虑的特征数。 PCA 提供了另一种方法:通过将特征空间投影到低维空间中来减少我们必须处理的维度数。 我们可以这样做,因为在大多数现实问题中,数据点并不是在所有维度上均匀分布的。 虽然有些特征可能几乎是恒定的,但其他特征却是高度相关。 高度相关的数据点位于低维子空间附近。

在下图中,数据点并未分布在整个平面上,而是大致呈椭圆形聚集。 由于群集(或任何群集)大致是椭圆形的,因此在数学上,它可以通过以下两个值进行描述:它的主(长)轴和次(短)轴。 这些轴构成了群集的主要成分。

我们可以围绕此群集构建一个全新的特征空间,它由两个特征向量定义:$c_{1}$ 和 $c_{2}$。 特征向量是定义指向这一新特征空间的线性转换的矢量。

更好的是,我们不必考虑这一新空间的所有维度。 直观地说,我们可以看到大多数点位于或靠近贯穿 $c_{1}$ 的直线上。 如果将群集从两个维度向下投影到单一维度,我们就可以在简化分析的同时捕获关于此数据集的大部分信息。 只考虑一小部分的确定性特征向量,而从数据集中提取大部分信息 - 这种能力构成了 PCA 的核心。

导入模块和数据集

必须先清理并准备好数据,才能对其执行 PCA,因此 Pandas 是必不可少的。 你还需要 NumPy、一些 scikit-learn 和 pyplot。

若要添加这些库,请运行此代码:

import pandas as pd
import numpy as np
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
import matplotlib.pyplot as plt
%matplotlib inline

要在此处使用的数据集就是你在上一个模块中准备的、从美国农业部国家营养标准参考数据库中提取的同一数据集。

请记住将编码设置为 latin1:

df = pd.read_csv('Data/USDA-nndb-combined.csv', encoding='latin1')

可通过对 DataFrame 使用 info() 方法来检查列数和行数:

df.info()

输出为:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 8989 entries, 0 to 8988
Data columns (total 54 columns):
 #   Column             Non-Null Count  Dtype  
---  ------             --------------  -----  
 0   NDB_No             8989 non-null   int64  
 1   FoodGroup          8618 non-null   object 
 2   Shrt_Desc          8790 non-null   object 
 3   Water_(g)          8789 non-null   float64
 4   Energ_Kcal         8790 non-null   float64
 5   Protein_(g)        8790 non-null   float64
 6   Lipid_Tot_(g)      8790 non-null   float64
 7   Ash_(g)            8465 non-null   float64
 8   Carbohydrt_(g)     8790 non-null   float64
 9   Fiber_TD_(g)       8196 non-null   float64
 10  Sugar_Tot_(g)      6958 non-null   float64
 11  Calcium_(mg)       8442 non-null   float64
 12  Iron_(mg)          8646 non-null   float64
 13  Magnesium_(mg)     8051 non-null   float64
 14  Phosphorus_(mg)    8211 non-null   float64
 15  Potassium_(mg)     8364 non-null   float64
 16  Sodium_(mg)        8707 non-null   float64
 17  Zinc_(mg)          8084 non-null   float64
 18  Copper_mg)         7533 non-null   float64
 19  Manganese_(mg)     6630 non-null   float64
 20  Selenium_(µg)     7090 non-null   float64
 21  Vit_C_(mg)         7972 non-null   float64
 22  Thiamin_(mg)       8156 non-null   float64
 23  Riboflavin_(mg)    8174 non-null   float64
 24  Niacin_(mg)        8153 non-null   float64
 25  Panto_Acid_mg)     6548 non-null   float64
 26  Vit_B6_(mg)        7885 non-null   float64
 27  Folate_Tot_(µg)   7529 non-null   float64
 28  Folic_Acid_(µg)   6751 non-null   float64
 29  Food_Folate_(µg)  7022 non-null   float64
 30  Folate_DFE_(µg)   6733 non-null   float64
 31  Choline_Tot_ (mg)  4774 non-null   float64
 32  Vit_B12_(µg)      7597 non-null   float64
 33  Vit_A_IU           8079 non-null   float64
 34  Vit_A_RAE          7255 non-null   float64
 35  Retinol_(µg)      6984 non-null   float64
 36  Alpha_Carot_(µg)  5532 non-null   float64
 37  Beta_Carot_(µg)   5628 non-null   float64
 38  Beta_Crypt_(µg)   5520 non-null   float64
 39  Lycopene_(µg)     5498 non-null   float64
 40  Lut+Zea_ (µg)     5475 non-null   float64
 41  Vit_E_(mg)         5901 non-null   float64
 42  Vit_D_µg          5528 non-null   float64
 43  Vit_D_IU           5579 non-null   float64
 44  Vit_K_(µg)        5227 non-null   float64
 45  FA_Sat_(g)         8441 non-null   float64
 46  FA_Mono_(g)        8124 non-null   float64
 47  FA_Poly_(g)        8125 non-null   float64
 48  Cholestrl_(mg)     8380 non-null   float64
 49  GmWt_1             8490 non-null   float64
 50  GmWt_Desc1         8491 non-null   object 
 51  GmWt_2             4825 non-null   float64
 52  GmWt_Desc2         4825 non-null   object 
 53  Refuse_Pct         8740 non-null   float64
dtypes: float64(49), int64(1), object(4)
memory usage: 3.7+ MB

亲自试一试

你能想出一个更简洁的方法来检查 DataFrame 中的行数和列数吗?

使用 DataFrame 的一个属性。

下面是可能的解决方案:

df.count(axis='columns')

输出为:

0       54
1       54
2       54
3       54
4       54
        ..
8984    49
8985    50
8986    53
8987    48
8988    49
Length: 8989, dtype: int64
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号