我一直在做一些几何数据分析(GDA),例如主成分分析(PCA)。我想要绘制一个相关圆...这些看起来有点像这样:
基本上,它允许测量变量的特征值/特征向量与数据集的主要成分(维度)相关的范围。
任何人都知道是否有一个 python 包来绘制这样的数据可视化?
答案 0 :(得分:2)
我同意很遗憾没有在某些主流软件包中使用它,例如sklearn。
这是一个自制的实现: https://github.com/mazieres/analysis/blob/master/analysis.py#L19-34
答案 1 :(得分:1)
以下是使用sklearn和虹膜数据集的简单示例。包括前两个维度的因子图和一个碎石图:
from sklearn.decomposition import PCA
import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt
df = sns.load_dataset('iris')
n_components = 4
# Do the PCA.
pca = PCA(n_components=n_components)
reduced = pca.fit_transform(df[['sepal_length', 'sepal_width',
'petal_length', 'petal_width']])
# Append the principle components for each entry to the dataframe
for i in range(0, n_components):
df['PC' + str(i + 1)] = reduced[:, i]
display(df.head())
# Do a scree plot
ind = np.arange(0, n_components)
(fig, ax) = plt.subplots(figsize=(8, 6))
sns.pointplot(x=ind, y=pca.explained_variance_ratio_)
ax.set_title('Scree plot')
ax.set_xticks(ind)
ax.set_xticklabels(ind)
ax.set_xlabel('Component Number')
ax.set_ylabel('Explained Variance')
plt.show()
# Show the points in terms of the first two PCs
g = sns.lmplot('PC1',
'PC2',
hue='species',data=df,
fit_reg=False,
scatter=True,
size=7)
plt.show()
# Plot a variable factor map for the first two dimensions.
(fig, ax) = plt.subplots(figsize=(12, 12))
for i in range(0, len(pca.components_)):
ax.arrow(0,
0, # Start the arrow at the origin
pca.components_[0, i], #0 for PC1
pca.components_[1, i], #1 for PC2
head_width=0.1,
head_length=0.1)
plt.text(pca.components_[0, i] + 0.05,
pca.components_[1, i] + 0.05,
df.columns.values[i])
an = np.linspace(0, 2 * np.pi, 100)
plt.plot(np.cos(an), np.sin(an)) # Add a unit circle for scale
plt.axis('equal')
ax.set_title('Variable factor map')
plt.show()
将此扩展到更多PC,在所有组件都很小的情况下处理缩放,并避免使用最小贡献绘制因子,这是一个很好的练习。