PCA 图参数

问题描述

我是 Python 初学者,尝试使用 pandassklearn.preprocessingsklearn.decompositionMatplotlib.pyplot 创建 2 分量 PCA 图。

我的数据框很大,涉及不同种类植物的特征,有很多变量(>100列),我想比较其中一个特征/列(茎长)对植物的影响数据的方差。茎长列由浮子组成,大小从0到75cm左右不等。

我想绘制一个 PCA,比较茎长 > 40 厘米和茎长

我一直在使用以下网站作为 guide for the PCA plot

我已经编写了以下代码

import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt

df = pd.read_csv("plant_data.csv")

x = StandardScaler().fit_transform(x)

plt.style.use("seaborn-darkgrid")

pca = PCA(n_components=2)
principalComponents = pca.fit_transform(x)
principalDf = pd.DataFrame(data = principalComponents,columns = ['principal component 1','principal component 2'])
finalDf = pd.concat([principalDf,df[['stem_length']]],axis = 1)

如何设置参数stem_length >40和stem_length

解决方法

问题链接中的给定数据集称为“虹膜数据集”。考虑到这一点,以及您使用 2 个主成分的工作示例,您现在拥有 finalDF 具有三个特征(或维度或列 - 在 excel 中)。

现在,您需要定义一个功能,可以实现为:

finalDF['stem_length_gt_40'] = finalDF['stem_length'].apply(lambda x: 1 if x > 40 else 0)

该代码创建另一个名为 stem_length_gt_40 的列,其值为 1 if stem_length > 40 else 0

考虑到这一点,现在您或许可以使用 PCA-1 vs. PCA-2 绘制 stem_length_gt_40 并根据 seaborn.scatterplot 对它们进行不同的着色,如下所示:

import seaborn as sns
import matplotlib.pyplot as plt

# plt.style.use("seaborn-darkgrid")

sns.scatterplot(x = 'principal component 1',y = 'principal component 2',data = finalDF,hue = 'stem_length_gt_40')

您可以通过 here 了解更多关于 sns.scatterpolt 的信息。