Ich verwende das PCA-Modul von sklearn. Ich verwende den folgenden Code, um die Analyse einzurichten.Python sklearn PCA.explained_variance_ratio_ ergibt nicht 1
from sklearn.decomposition import PCA
pca = PCA(n_components=9)
p = pca.fit([row[:-1] for row in norm])
norm
hier ist mein normalisierte Datensatz mit einer eindeutigen Kennung in der letzten Spalte, weshalb ich es in der letzten Zeile bin zu entfernen. Es gibt 9 Funktionen in diesem Datensatz, so würde ich mit 9 Komponenten erwarten, dass es keine unerklärte Varianz geben würde. Als ich p.explained_variance_.cumsum()
aber nennen, die ich erhalten:
[ 0.06589563 0.08608778 0.09578116 0.10150195 0.10703567 0.11036608
0.11241904 0.11422285 0.11591605]
Bin ich etwas über PCA Missverständnis? Ich habe dieses Modul vorher ohne Problem verwendet, aber es ist eine Weile her. Richte ich das falsch aus? Ich habe meine Daten von irgendwelchen identifizierenden Informationen entfernt, um sie hier zu veröffentlichen. Unten ist eine Teilmenge der Daten, die das Problem zu reproduzieren scheinen. Hier
[0.3888888888888889, 0.3888888888888889, 0.3888888888888889, 0.436943311456892, 0.7905900031193156, 0.5020468092219706, 0.8389717734280283, 0.7604923090797432, 0.8206054422776056, '0']
[0.3888888888888889, 0.3888888888888889, 0.2222222222222222, 0.4457200178477334, 0.8114779465247448, 0.506899600792241, 0.8368566485573798, 0.760617288778523, 0.8195489478905984, '1']
[0.2777777777777778, 0.2777777777777778, 0.05555555555555555, 0.4426231291814084, 0.7883413226205706, 0.5037172133121759, 0.8370362549229062, 0.7599752704033258, 0.8184218722901648, '2']
[0.1111111111111111, 0.1111111111111111, 0.16666666666666666, 0.4651807845446571, 0.7983379003654792, 0.5250604537887904, 0.8463875215362144, 0.7533582308429306, 0.8241548325954007, '3']
[0.5000000000000001, 0.5000000000000001, 0.3333333333333333, 0.4457200178477334, 0.7878040593905666, 0.506899600792241, 0.8368566485573798, 0.7605016058324149, 0.8195489478905984, '4']
[0.3888888888888889, 0.3888888888888889, 0.2222222222222222, 0.44943322185630036, 0.7843622888520198, 0.5055757644148106, 0.8351253941103399, 0.7604171267769607, 0.8185442945328569, '5']
[0.3888888888888889, 0.3888888888888889, 0.3333333333333333, 0.4424914587425397, 0.7877430312713435, 0.5029950110274568, 0.836692391332608, 0.760611529525946, 0.8198150075184326, '6']
[0.3333333333333333, 0.05555555555555555, 0.7777777777777778, 0.4389415113841421, 0.7878040593905666, 0.506899600792241, 0.8368566485573798, 0.7605016058324149, 0.8195489478905984, '7']
[0.4444444444444444, 0.4444444444444444, 0.4444444444444444, 0.42770705188736874, 0.7976039510596705, 0.5057230657076256, 0.8368566485573798, 0.7605016058324149, 0.8195489478905984, '8']
[0.2222222222222222, 0.2777777777777778, 0.5000000000000001, 0.43182322765312314, 0.7971732873351607, 0.5072390458086798, 0.84541364942531, 0.7613416598875292, 0.8239037851005895, '9']
Die Frage passt hier besser als in der CV-Community. Ich frage mich, was der Zweck von 'p = pca.fit ([row [: - 1] für Zeile in der Norm])' ist. – Toni
Ich postete dort auch, entschied schließlich, dass dies der bessere Ort war, weil die Wurzel des Problems, denke ich, mehr mit meinem Code als mit der Theorie ist – bendl
Ja, kein Problem. Ich bin nicht groß auf Formulare und wusste nicht, wo ich meine Antwort posten sollte. Wahrscheinlich sollten Sie in Erwägung ziehen, Ihren Beitrag in beiden Communities zu löschen. Ich sehe, dass Sie einen Teil des Datensatzes gepostet haben, aber ich hatte keine Chance, damit zu spielen. – Toni