如何绘制独立组件并计算属于它们的点?

2024-05-16 09:11:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图找到我的数据集的独立组件,绘制它们,然后用每个组件的点绘制2个子图

我正在与scikit learn合作,并创建了一个数据集。然后我在上面使用FastICA(),得到了一个包含我的组件的混合矩阵。 但现在我不知道如何继续。我想也许我可以用线性回归来解决它,但我需要两条线。所以我想选择我的组件的最大和最小点,并在它们之间拟合线,但也没有线索! 如果我能找到这些线,我就能计算到每个点的欧几里德距离,这样我就能知道哪个点属于哪个分量。 但当我试图设计它们时,它们看起来就错了

# example data set
n_samples = 1000

# random n-class classification problem
X, Y = make_classification(n_samples=n_samples, n_features=2, n_redundant=0, n_informative=2,
                             n_clusters_per_class=1, n_classes=2, random_state=42)

fig = plt.figure(figsize=(7,7))

plt.scatter(X[:, 0], X[:, 1], c = 'red', s=30, edgecolor='k')

plt.title("Synthetic Data Set")
plt.show()

ica = FastICA(random_state=3)

X_ica = ica.fit_transform(X) # Reconstruct signals
X_ica /= X_ica.std() # Compute the standard deviation

A = ica.mixing_
print(A)
plt.figure(figsize=(7,7))

def plot_samples(X, axis):
    plt.scatter(X[:, 0], X[:, 1], c = 'orange', s=30, edgecolor='k')
    axis /= axis.std()
    x_axis, y_axis = axis
    # Trick to get legend to work
    plt.plot(linewidth=2, color='red')
    plt.quiver(2, 0, x_axis, y_axis, zorder=11, width=0.01, scale=5, color='red')

    plt.xlim(-4, 4)
    plt.ylim(-4, 4)
    plt.xlabel('x')
    plt.ylabel('y')


plot_samples(X / np.std(X), A / A.std())
plt.plot()
plt.title('Observations with ICA')

plt.show()

我预计独立分量实际上会经历最大和第二大的方差,但正如你所看到的,如果你绘制它,它们是扭曲的


Tags: 数据plot绘制组件pltrandomredclass