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

时间:2019-07-01 21:30:35

标签: python matplotlib scikit-learn

我正在尝试查找数据集中的独立组件,将它们绘制出来,然后对每个组件的点进行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()

我希望独立分量实际上会经历最大和第二大方差,但是正如您所看到的那样,它们会失真。

0 个答案:

没有答案