为什么我们需要将数据的转置传递给 sklearn StandardScaler()?
Why do we need to pass the transpose of a data into sklearn StandardScaler()?
我有一组数据,每一行代表一个基因,每一列代表一个样本。
我想先归一化,再进行PCA。我在网上搜索了一下,发现我们需要将数据帧的转置传递给 sklearn.preprocessing.StandardScaler() 函数。
这是我的代码:
scale_df = sklearn.preprocessing.StandardScaler().fit_transform(df.iloc[:, 1:col].T)
pca = sklearn.decomposition.PCA()
pca_data = pca.fit_transform(scale_df.T)
这是我不确定的部分。首先,为什么我们需要将数据的转置传递给 StandardScaler()?第二,我们把数据的transpose传进去之后,得到的scaled data frame还是转置的,会不会影响我们PCA的结果?我们是否应该在将其传递给 PCA 之前将其转回正常状态?
scikit-learn 库遵循一种约定,即行代表观察单位(人、产品、国家等),列代表不同的特征(身高、体重、金钱等)。由于你的数据在每一列中都有一个样本(我认为这是观察单位),你需要转置你的数据以采用约定。
您不需要转置缩放后的数据,因为 StandardScalar 和 PCA(以及大多数 scikit-learn 类)都遵循相同的约定(以行为单位)。
我有一组数据,每一行代表一个基因,每一列代表一个样本。
我想先归一化,再进行PCA。我在网上搜索了一下,发现我们需要将数据帧的转置传递给 sklearn.preprocessing.StandardScaler() 函数。
这是我的代码:
scale_df = sklearn.preprocessing.StandardScaler().fit_transform(df.iloc[:, 1:col].T)
pca = sklearn.decomposition.PCA()
pca_data = pca.fit_transform(scale_df.T)
这是我不确定的部分。首先,为什么我们需要将数据的转置传递给 StandardScaler()?第二,我们把数据的transpose传进去之后,得到的scaled data frame还是转置的,会不会影响我们PCA的结果?我们是否应该在将其传递给 PCA 之前将其转回正常状态?
scikit-learn 库遵循一种约定,即行代表观察单位(人、产品、国家等),列代表不同的特征(身高、体重、金钱等)。由于你的数据在每一列中都有一个样本(我认为这是观察单位),你需要转置你的数据以采用约定。
您不需要转置缩放后的数据,因为 StandardScalar 和 PCA(以及大多数 scikit-learn 类)都遵循相同的约定(以行为单位)。