Ich versuche, die Technik hinter einem PCA-Modell zu verstehen, um vorhergesagte Werte Ihrer ursprünglichen Eingabevariablen mit dem
Ich habe das gelesen. Um vom PCA-Raum zum X-Raum zurückzukehren, müssen Sie Folgendes berechnen:
Vorhersagen = Noten * Ladungen '
Ist diese lineare Gleichung immer dann repräsentativ für das obige Konzept, wenn ich in die Formel für die Ausgabe "Save Predicted" schaue?
Vielen Dank
PS Ich weiß, dass PCA nicht für die prädiktive Modellierung gedacht ist. Ich verwende es letztendlich zur Fehlererkennung mit Hotellings T2- und SPE-Ausgang. Mein SPE-Fehler (quadratischer Vorhersagefehler) hängt von dieser vorhergesagten Ausgabe ab.
Sieht aus, als hätten Sie mit der PCA-Plattform keinen direkten Zugriff auf die Score-Matrix. Der folgende Code kann jedoch dazu beitragen, dass die Vorhersageformeln so sind, wie sie sein sollten. Es generiert zufällige multivariate Gauß'sche Daten für drei Variablen. Wenn drei Hauptkomponenten verwendet werden (d. H. Ohne Verringerung der Dimensionalität), entsprechen die Vorhersagen den ursprünglichen Daten.
Names Default To Here( 1 );
// Function to generate n independant samples from a multivariate Gaussian
// m is the row vector of means
// v is the (square) variance-covariance matrix
// (Dimensions of m and v have to conform)
randomMultiGaussian = Function( {m, v, n},
{Default Local},
nDim = N Row( m );
If( (N Row( v ) != nDim) | (N Col( v ) != nDim),
Beep();
Print( "ERROR in randomMultiGaussian" );
Throw();
);
// Simulate random values . . .
t = Cholesky( v );
d = J( n, nDim, Random Normal() ) * t`;
// Build mean values columnwise . . .
mu = [];
For( i = 1, i <= nDim, i++,
mu ||= J( n, 1, m[i] )
);
// . . . and add the mean to get the final result
d = mu + d;
);
// Make some data
nPts = 100;
m = [0, 0, 0];
v = [1.0 0.2 0.8, 0.2 1.0 0.5, 0.8 0.5 1.0];
dMat = randomMultiGaussian(m, v, nPts);
dt = AsTable(dMat, << Column Names({"x1", "x2", "x3"}));
dt << setName("Sample from Multvariate Gaussian");
// Use PCA
pca = dt << Principal Components(Y( Eval(dt << getColumnNames) ));
// Save predictions
pca << savePredicteds(1); // Predictions with 1 PC
pca << savePredicteds(2); // Predictions with 2 PCs
pca << savePredicteds(3); // Predictions with 3 PCs
// See how the predicted x1 value varies with the number of PCs
dt << Graph Builder(
Show Control Panel( 0 ),
Variables(
X( :x1 ),
Y( :Predicted x1 3 ),
Y( :Predicted x1 2 ),
Y( :Predicted x1 )
)
);
// For 3 PCs compare the predicted values with the original data values
Print(
Maximum(
Maximum(Column(dt, "x1")[1::nPts] - Column(dt, "Predicted x1 3")[1::nPts]),
Maximum(Column(dt, "x2")[1::nPts] - Column(dt, "Predicted x2 3")[1::nPts]),
Maximum(Column(dt, "x3")[1::nPts] - Column(dt, "Predicted x3 3")[1::nPts])
)
);