Я пытаюсь найти независимые компоненты моего набора данных, построить их, а затем создать 2 вспомогательных участка с точками для каждого компонента.
Я работаю с scikit-learn и создалнабор данных.Затем я использовал FastICA () и получил матрицу микширования с моими компонентами.Но сейчас я не знаю, как продолжить.Я думал, что, возможно, я мог бы решить это с помощью линейной регрессии, но мне нужно 2 строки.Поэтому я подумал о том, чтобы выбрать максимальную и минимальную точки моих компонентов и установить линии между ними, но также и не знал!Если бы я мог найти эти линии, я мог бы вычислить евклидово расстояние до каждой точки, поэтому я бы знал, какая точка принадлежит какому-либо компоненту.Но когда я пытаюсь построить их, они выглядят просто неправильно.
# 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()
Я ожидаю, что независимые компоненты действительно пройдут самые большие и вторые по величине отклонения, но как вы можете видеть, если выСюжет, они искажены.