J'essaie de comprendre la technique qui sous-tend l'utilisation d'un modèle PCA pour renvoyer les valeurs prédites de vos variables d'entrée d'origine, avec le paramètre
J'ai lu que, pour revenir de l'espace PCA à l'espace X, vous devez calculer:
Prédits = scores * charges '
Chaque fois que je regarde dans la formule pour la sortie "enregistrer les prévisions", cette équation linéaire est-elle représentative du concept ci-dessus?
Merci
PS Je sais que PCA n'est pas destiné à la modélisation prédictive, je l'utilise finalement pour la détection des erreurs avec les sorties T2 et SPE de Hotelling. Mon SPE (erreur de prédiction au carré) dépendrait de cette sortie prédite.
On dirait que la plate-forme PCA ne vous donne pas directement accès à la matrice de scores. Mais le code ci-dessous peut aider à donner une certaine assurance que les formules de prédiction sont comme elles devraient être. Il génère des données gaussiennes multivariées aléatoires pour trois variables. En utilisant trois composantes principales (c'est-à-dire sans réduction de dimensionnalité), les prédictions sont les mêmes que les données d'origine.
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])
)
);