PCA - Matplotlib Scatter

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Marvin93
User
Beiträge: 38
Registriert: Samstag 4. Mai 2019, 15:16

Hallo alle zusammen,

ich habe ein Datenset für Machine Learning und habe etwas mit einer PCA herumexperimentiert. Das Datenset besteht aus drei Klassen und 27 Dimensionen. Ich habe das jetzt mal mit der PCA auf 2 Dimensionen komprimiert und folgendes Ergebnis:
Bild

Erst habe ich mich gefreut, weil das ja genau meinen drei Klassen entsprechen könnte. Ich hätte niemals mit so einem guten Ergebnis gerechnet habe. Wenn ich jedoch die Farben einblende, zeigt sich folgendes:
Bild

Irgendwie kommt mir das alles etwas merkwürdig vor. Wenn ich es auf drei Dimensionen reduziere erhalte ich genau das gleiche Ergebnis. Mehr Dimensionen kann ich ja leider nicht wirklich plotten. Wobei die Varianzsteigerung ja sowieso mit jeder Dimension abnimmt. Hat jemand eine Idee woran das liegen könnte, dass sich das Datenset so deutlich auf drei Gruppen aufteilt, dann aber doch völlig durchmischt ist? Oder habe ich irgendeinen Fehler im Code?

Code: Alles auswählen

import pandas as pd
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler, MaxAbsScaler, RobustScaler, Normalizer, QuantileTransformer, PowerTransformer, MinMaxScaler
from mpl_toolkits.mplot3d import Axes3D
import numpy as np


Dataset = pd.read_csv("...", header=0)
feature_spalten = ['...]
x = Dataset[feature_spalten]
y = Dataset.Classifier
sc = StandardScaler()
x = sc.fit_transform(x)

p = PCA()
p.fit(x)

x_transformed = p.transform(x)

plt.figure()
plt.scatter(x_transformed[:, 0], x_transformed[:, 1])

plt.figure()
for label in y.unique():
    x_transformed_filtered = x_transformed[y == label, :]
    plt.scatter(x_transformed_filtered[:, 0], x_transformed_filtered[:, 1], label=label, s = 25)
plt.legend()

plt.show()
Antworten