- Under the function "myLDApredict", "dv" means "D", which represents the standard deviations for all predictors.
- Under the function "myLDApredict", "dv1" represents the class prior.
- Under the function "DiagonalDiscriminant", "dv" means "Mu", which represents the k-by-p matrix with class means for k classes and p predictors.
- Under the function "DiagonalDiscriminant", "dv1" means "invD", which represents the inverse values of predictor standard deviations (computed after centering by class means). It is calculated by the inverse of the standard deviations "D".
What is the meaning of the variables in the C generated code of a Linear Discriminant Analysis model trained in MATLAB?
2 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
handyman
le 5 Oct 2023
Réponse apportée : MathWorks Support Team
le 20 Juin 2024
I have exported an LDA classifier to C code (5 classes, 8 features, diagonal) and as far as I can tell there are four vectors/matrices in the generated C code that contain the classifier coefficients:
in the "myclassifiername_predict" function:
C code:
void myclassifiername_predict(const double X[8], cell_wrap_0 label[1],double score[5])
{
static const double dv[8] = {22.242777113313874, 10091.972043688236,
18.120065167575063, 1.6703515441084688E+6,
24.467860977243351, 10578.886659888578,
19.515843697095619, 1.9037831242647208E+6};
static const double dv1[5] = {0.19444444444444445, 0.19791666666666666,
0.20254629629629631, 0.18865740740740741,
0.21643518518518517};
// rest of function body...
}
void DiagonalDiscriminant(const double X[8], double mah[5])
{
static const double dv[40] = {
92.058756510416757, 428.55436769005888, 99.445223214285761,
121.16319976993877, 28.000396891711258, 12736.000000000013,
81355.60233918138, 19612.525714285723, 16993.374233128856,
3436.1497326203244, 143.11044456845252, 72.791255482456208,
144.52926339285719, 196.37662960122714, 29.916151403743349,
5.2292266666666726E+6, 3.3097596257309979E+6, 7.8175085714285746E+6,
7.0232076564417249E+6, 894724.10695187247, 480.39411272321479,
26.045367324561425, 53.19522321428574, 239.98229006901863,
20.971883355614992, 80371.8095238096, 2976.1871345029267,
8478.720000000003, 52414.036809816, 2602.4385026737991,
325.64160156250028, 34.383543494152079, 84.338125000000034,
72.35264091257676, 33.127548462566885, 1.6916089904761918E+7,
1.5491024093567266E+6, 3.7583959771428583E+6, 4.3856852024539923E+6,
1.6065081497326223E+6};
static const double dv1[8] = {0.044958414810596169, 9.9088661331104676E-5,
0.0551874394905295, 5.9867637056829179E-7,
0.040869939588510124, 9.4527905643572937E-5,
0.051240418580971815, 5.2526991507303129E-7};
// rest of function body...
}
When I look at the LDA classifier object in Matlab, I can see that
- dv (in the predict function) is "d" in the compact Matlab classifier object
- dv1 (in the predict function) is "classWeights" in the compact Matlab classifier object ("Prior" in the non-compact model)
- dv (in the "DiagonalDiscrimant" function) is "mu" in the compact Matlab classifier object (5x8 Matrix)
What I can't figure out is where dv1 (in the "DiagonalDiscrimant" function) comes from?
The compact classifier object still has the 1x8 vector s and 8x8 matrix v, dv1 might be derived from that?
compactStruct.Impl.s =
1.4238
1.1705
1.0736
1.0486
0.9416
0.7696
0.6899
0.6289
compactStruct.Impl.v =
-0.3052 0.4804 -0.4588 -0.0729 -0.0968 0.4692 -0.4536 0.1580
-0.2068 0.4571 -0.1782 -0.5754 0.2103 -0.4734 0.3155 -0.1324
-0.4628 0.2472 0.1387 0.4526 -0.0425 0.2732 0.5113 -0.4034
-0.2834 0.3263 0.5855 0.2610 0.2132 -0.3524 -0.4367 0.2047
-0.4229 -0.4231 -0.3445 0.1189 -0.0292 -0.3675 -0.3760 -0.4816
-0.2237 -0.0354 0.3379 -0.3487 -0.8434 -0.0306 -0.0262 -0.0052
-0.5272 -0.3569 -0.1467 0.0226 0.0751 -0.0506 0.2940 0.6914
-0.2506 -0.2915 0.3759 -0.5043 0.4258 0.4673 -0.1189 -0.2069
The original (non-compact) model doesn't have dv1 either.
0 commentaires
Réponse acceptée
MathWorks Support Team
le 4 Jan 2024
The meanings of these variables are:
0 commentaires
Plus de réponses (1)
Bill Chou
le 6 Oct 2023
Hi Handyman,
I checked with our development team and they would need to know a bit more about your code to answer your question.
Can you contact technical support and reference this MATLAB Answers post? We can then work to help answer your question that way.
Thank you,
Bill Chou
Voir également
Catégories
En savoir plus sur Discriminant Analysis dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!