different conditional probabilities orders between EM runs in parameter learning

The engine.
Post Reply
Bo Hu
Posts: 18
Joined: Tue Aug 02, 2016 4:13 am

different conditional probabilities orders between EM runs in parameter learning

Post by Bo Hu »

Hello,
I generated a couple of data samples using a certain Bayesian network structure and settings for conditional probabilities. Then, with each sample of data, I performed parameter learning and extracted all estimated conditional probabilities. Using the code I attached, I noticed that the order of extracted probabilities seemed to be different across data samples. If this is supposed to be the case, is there any way to fix the order of extracted conditional probabilities?

Here are the loglikelihood and part of conditional probabilities I extracted from three data samples. I highlighted those probabilities that confuse me….
-42110.3 0.138895 0.861105 0.969658 0.030342 0.189728 0.810272 0.061781 0.938219 0.876727 0.123273
-41833.6 0.161924 0.838076 0.927333 0.072667 0.021402 0.978598 0.967278 0.032722 0.079983 0.920018
-42663.9 0.185905 0.814095 0.283792 0.716208 0.16589 0.83411 0.935387 0.064613 0.03022 0.96978

Thank you so much!
Bo

Code: Select all

void staticEM() {
		
		DSL_dataset LT;

		std::string errMsg;
		int parseCode = LT.ReadFile("C:\\Users\\Bo\\Desktop\\C++\\LIN_4.txt", NULL, &errMsg);
		if (parseCode != DSL_OKAY) {
			cout << "Cannot read data file...exiting" << endl;
			cout << "Error code:" << parseCode << endl;
			cout << "Error message:" << errMsg << endl;
			exit(1);
		}

		if (LT.ReadFile("C:\\Users\\Bo\\Desktop\\C++\\LIN_4.txt") != DSL_OKAY) {
			cout << "Cannot read data file...exiting" << endl;
			exit(1);
		}
		DSL_network LIN_4T;
		if (LIN_4T.ReadFile("LIN_4T.xdsl", DSL_XDSL_FORMAT) != DSL_OKAY) {
			cout << "Cannot read network...exiting." << endl;
			exit(1);
		}
		vector<DSL_datasetMatch> matches;
		string err;
		if (LT.MatchNetwork(LIN_4T, matches, err) != DSL_OKAY) {
			cout << "Cannot match network...exiting." << endl;
			cout << err << endl;
			exit(1);
		}

		double loglik;
		DSL_em em;
		if (em.Learn(LT, LIN_4T, matches, &loglik) != DSL_OKAY) {
			cout << "Cannot learn parameters...exiting." << endl;
			exit(1);
		}


		LIN_4T.UpdateBeliefs();

		//ATTRIBUTE CPs
		int A = LIN_4T.FindNode("A");
		const DSL_Dmatrix* mtx_A = LIN_4T.GetNode(A)->Definition()->GetMatrix();
		double P_A_1 = (*mtx_A)[0];
		double P_A_0 = (*mtx_A)[1];

		int B = LIN_4T.FindNode("B");
		const DSL_Dmatrix* mtx_B = LIN_4T.GetNode(B)->Definition()->GetMatrix();
		double P_B_1_A_1 = (*mtx_B)[0];
		double P_B_0_A_1 = (*mtx_B)[1];
		double P_B_1_A_0 = (*mtx_B)[2];
		double P_B_0_A_0 = (*mtx_B)[3];

		int C = LIN_4T.FindNode("C");
		const DSL_Dmatrix* mtx_C = LIN_4T.GetNode(C)->Definition()->GetMatrix();
		double P_C_1_B_1 = (*mtx_C)[0];
		double P_C_0_B_1 = (*mtx_C)[1];
		double P_C_1_B_0 = (*mtx_C)[2];
		double P_C_0_B_0 = (*mtx_C)[3];

		int D = LIN_4T.FindNode("D");
		const DSL_Dmatrix* mtx_D = LIN_4T.GetNode(D)->Definition()->GetMatrix();
		double P_D_1_C_1 = (*mtx_D)[0];
		double P_D_0_C_1 = (*mtx_D)[1];
		double P_D_1_C_0 = (*mtx_D)[2];
		double P_D_0_C_0 = (*mtx_D)[3];

		//ITEM CPs

		int x1 = LIN_4T.FindNode("x1");
		const DSL_Dmatrix* mtx_x1 = LIN_4T.GetNode(x1)->Definition()->GetMatrix();
		double P_x1_1_A_1 = (*mtx_x1)[0];
		double P_x1_0_A_1 = (*mtx_x1)[1];
		double P_x1_1_A_0 = (*mtx_x1)[2];
		double P_x1_0_A_0 = (*mtx_x1)[3];

		int x2 = LIN_4T.FindNode("x2");
		const DSL_Dmatrix* mtx_x2 = LIN_4T.GetNode(x2)->Definition()->GetMatrix();
		double P_x2_1_B_1 = (*mtx_x2)[0];
		double P_x2_0_B_1 = (*mtx_x2)[1];
		double P_x2_1_B_0 = (*mtx_x2)[2];
		double P_x2_0_B_0 = (*mtx_x2)[3];

		int x3 = LIN_4T.FindNode("x3");
		const DSL_Dmatrix* mtx_x3 = LIN_4T.GetNode(x3)->Definition()->GetMatrix();
		double P_x3_1_C_1 = (*mtx_x3)[0];
		double P_x3_0_C_1 = (*mtx_x3)[1];
		double P_x3_1_C_0 = (*mtx_x3)[2];
		double P_x3_0_C_0 = (*mtx_x3)[3];

		int x4 = LIN_4T.FindNode("x4");
		const DSL_Dmatrix* mtx_x4 = LIN_4T.GetNode(x4)->Definition()->GetMatrix();
		double P_x4_1_D_1 = (*mtx_x4)[0];
		double P_x4_0_D_1 = (*mtx_x4)[1];
		double P_x4_1_D_0 = (*mtx_x4)[2];
		double P_x4_0_D_0 = (*mtx_x4)[3];

		int x5 = LIN_4T.FindNode("x5");
		const DSL_Dmatrix* mtx_x5 = LIN_4T.GetNode(x5)->Definition()->GetMatrix();
		double P_x5_1_A_1_B_1 = (*mtx_x5)[0];
		double P_x5_0_A_1_B_1 = (*mtx_x5)[1];
		double P_x5_1_A_1_B_0 = (*mtx_x5)[2];
		double P_x5_0_A_1_B_0 = (*mtx_x5)[3];
		double P_x5_1_A_0_B_1 = (*mtx_x5)[4];
		double P_x5_0_A_0_B_1 = (*mtx_x5)[5];
		double P_x5_1_A_0_B_0 = (*mtx_x5)[6];
		double P_x5_0_A_0_B_0 = (*mtx_x5)[7];

		int x6 = LIN_4T.FindNode("x6");
		const DSL_Dmatrix* mtx_x6 = LIN_4T.GetNode(x6)->Definition()->GetMatrix();
		double P_x6_1_A_1_C_1 = (*mtx_x6)[0];
		double P_x6_0_A_1_C_1 = (*mtx_x6)[1];
		double P_x6_1_A_1_C_0 = (*mtx_x6)[2];
		double P_x6_0_A_1_C_0 = (*mtx_x6)[3];
		double P_x6_1_A_0_C_1 = (*mtx_x6)[4];
		double P_x6_0_A_0_C_1 = (*mtx_x6)[5];
		double P_x6_1_A_0_C_0 = (*mtx_x6)[6];
		double P_x6_0_A_0_C_0 = (*mtx_x6)[7];

		int x7 = LIN_4T.FindNode("x7");
		const DSL_Dmatrix* mtx_x7 = LIN_4T.GetNode(x7)->Definition()->GetMatrix();
		double P_x7_1_A_1_D_1 = (*mtx_x7)[0];
		double P_x7_0_A_1_D_1 = (*mtx_x7)[1];
		double P_x7_1_A_1_D_0 = (*mtx_x7)[2];
		double P_x7_0_A_1_D_0 = (*mtx_x7)[3];
		double P_x7_1_A_0_D_1 = (*mtx_x7)[4];
		double P_x7_0_A_0_D_1 = (*mtx_x7)[5];
		double P_x7_1_A_0_D_0 = (*mtx_x7)[6];
		double P_x7_0_A_0_D_0 = (*mtx_x7)[7];

		int x8 = LIN_4T.FindNode("x8");
		const DSL_Dmatrix* mtx_x8 = LIN_4T.GetNode(x8)->Definition()->GetMatrix();
		double P_x8_1_B_1_C_1 = (*mtx_x8)[0];
		double P_x8_0_B_1_C_1 = (*mtx_x8)[1];
		double P_x8_1_B_1_C_0 = (*mtx_x8)[2];
		double P_x8_0_B_1_C_0 = (*mtx_x8)[3];
		double P_x8_1_B_0_C_1 = (*mtx_x8)[4];
		double P_x8_0_B_0_C_1 = (*mtx_x8)[5];
		double P_x8_1_B_0_C_0 = (*mtx_x8)[6];
		double P_x8_0_B_0_C_0 = (*mtx_x8)[7];

		int x9 = LIN_4T.FindNode("x9");
		const DSL_Dmatrix* mtx_x9 = LIN_4T.GetNode(x9)->Definition()->GetMatrix();
		double P_x9_1_B_1_D_1 = (*mtx_x9)[0];
		double P_x9_0_B_1_D_1 = (*mtx_x9)[1];
		double P_x9_1_B_1_D_0 = (*mtx_x9)[2];
		double P_x9_0_B_1_D_0 = (*mtx_x9)[3];
		double P_x9_1_B_0_D_1 = (*mtx_x9)[4];
		double P_x9_0_B_0_D_1 = (*mtx_x9)[5];
		double P_x9_1_B_0_D_0 = (*mtx_x9)[6];
		double P_x9_0_B_0_D_0 = (*mtx_x9)[7];

		int x10 = LIN_4T.FindNode("x10");
		const DSL_Dmatrix* mtx_x10 = LIN_4T.GetNode(x10)->Definition()->GetMatrix();
		double P_x10_1_C_1_D_1 = (*mtx_x10)[0];
		double P_x10_0_C_1_D_1 = (*mtx_x10)[1];
		double P_x10_1_C_1_D_0 = (*mtx_x10)[2];
		double P_x10_0_C_1_D_0 = (*mtx_x10)[3];
		double P_x10_1_C_0_D_1 = (*mtx_x10)[4];
		double P_x10_0_C_0_D_1 = (*mtx_x10)[5];
		double P_x10_1_C_0_D_0 = (*mtx_x10)[6];
		double P_x10_0_C_0_D_0 = (*mtx_x10)[7];

		int x11 = LIN_4T.FindNode("x11");
		const DSL_Dmatrix* mtx_x11 = LIN_4T.GetNode(x11)->Definition()->GetMatrix();
		double P_x11_1_A_1 = (*mtx_x11)[0];
		double P_x11_0_A_1 = (*mtx_x11)[1];
		double P_x11_1_A_0 = (*mtx_x11)[2];
		double P_x11_0_A_0 = (*mtx_x11)[3];

		int x12 = LIN_4T.FindNode("x12");
		const DSL_Dmatrix* mtx_x12 = LIN_4T.GetNode(x12)->Definition()->GetMatrix();
		double P_x12_1_B_1 = (*mtx_x12)[0];
		double P_x12_0_B_1 = (*mtx_x12)[1];
		double P_x12_1_B_0 = (*mtx_x12)[2];
		double P_x12_0_B_0 = (*mtx_x12)[3];

		int x13 = LIN_4T.FindNode("x13");
		const DSL_Dmatrix* mtx_x13 = LIN_4T.GetNode(x13)->Definition()->GetMatrix();
		double P_x13_1_C_1 = (*mtx_x13)[0];
		double P_x13_0_C_1 = (*mtx_x13)[1];
		double P_x13_1_C_0 = (*mtx_x13)[2];
		double P_x13_0_C_0 = (*mtx_x13)[3];

		int x14 = LIN_4T.FindNode("x14");
		const DSL_Dmatrix* mtx_x14 = LIN_4T.GetNode(x14)->Definition()->GetMatrix();
		double P_x14_1_D_1 = (*mtx_x14)[0];
		double P_x14_0_D_1 = (*mtx_x14)[1];
		double P_x14_1_D_0 = (*mtx_x14)[2];
		double P_x14_0_D_0 = (*mtx_x14)[3];

		int x15 = LIN_4T.FindNode("x15");
		const DSL_Dmatrix* mtx_x15 = LIN_4T.GetNode(x15)->Definition()->GetMatrix();
		double P_x15_1_A_1_B_1 = (*mtx_x15)[0];
		double P_x15_0_A_1_B_1 = (*mtx_x15)[1];
		double P_x15_1_A_1_B_0 = (*mtx_x15)[2];
		double P_x15_0_A_1_B_0 = (*mtx_x15)[3];
		double P_x15_1_A_0_B_1 = (*mtx_x15)[4];
		double P_x15_0_A_0_B_1 = (*mtx_x15)[5];
		double P_x15_1_A_0_B_0 = (*mtx_x15)[6];
		double P_x15_0_A_0_B_0 = (*mtx_x15)[7];

		int x16 = LIN_4T.FindNode("x16");
		const DSL_Dmatrix* mtx_x16 = LIN_4T.GetNode(x16)->Definition()->GetMatrix();
		double P_x16_1_A_1_C_1 = (*mtx_x16)[0];
		double P_x16_0_A_1_C_1 = (*mtx_x16)[1];
		double P_x16_1_A_1_C_0 = (*mtx_x16)[2];
		double P_x16_0_A_1_C_0 = (*mtx_x16)[3];
		double P_x16_1_A_0_C_1 = (*mtx_x16)[4];
		double P_x16_0_A_0_C_1 = (*mtx_x16)[5];
		double P_x16_1_A_0_C_0 = (*mtx_x16)[6];
		double P_x16_0_A_0_C_0 = (*mtx_x16)[7];

		int x17 = LIN_4T.FindNode("x17");
		const DSL_Dmatrix* mtx_x17 = LIN_4T.GetNode(x17)->Definition()->GetMatrix();
		double P_x17_1_A_1_D_1 = (*mtx_x17)[0];
		double P_x17_0_A_1_D_1 = (*mtx_x17)[1];
		double P_x17_1_A_1_D_0 = (*mtx_x17)[2];
		double P_x17_0_A_1_D_0 = (*mtx_x17)[3];
		double P_x17_1_A_0_D_1 = (*mtx_x17)[4];
		double P_x17_0_A_0_D_1 = (*mtx_x17)[5];
		double P_x17_1_A_0_D_0 = (*mtx_x17)[6];
		double P_x17_0_A_0_D_0 = (*mtx_x17)[7];

		int x18 = LIN_4T.FindNode("x18");
		const DSL_Dmatrix* mtx_x18 = LIN_4T.GetNode(x18)->Definition()->GetMatrix();
		double P_x18_1_B_1_C_1 = (*mtx_x18)[0];
		double P_x18_0_B_1_C_1 = (*mtx_x18)[1];
		double P_x18_1_B_1_C_0 = (*mtx_x18)[2];
		double P_x18_0_B_1_C_0 = (*mtx_x18)[3];
		double P_x18_1_B_0_C_1 = (*mtx_x18)[4];
		double P_x18_0_B_0_C_1 = (*mtx_x18)[5];
		double P_x18_1_B_0_C_0 = (*mtx_x18)[6];
		double P_x18_0_B_0_C_0 = (*mtx_x18)[7];

		int x19 = LIN_4T.FindNode("x19");
		const DSL_Dmatrix* mtx_x19 = LIN_4T.GetNode(x19)->Definition()->GetMatrix();
		double P_x19_1_B_1_D_1 = (*mtx_x19)[0];
		double P_x19_0_B_1_D_1 = (*mtx_x19)[1];
		double P_x19_1_B_1_D_0 = (*mtx_x19)[2];
		double P_x19_0_B_1_D_0 = (*mtx_x19)[3];
		double P_x19_1_B_0_D_1 = (*mtx_x19)[4];
		double P_x19_0_B_0_D_1 = (*mtx_x19)[5];
		double P_x19_1_B_0_D_0 = (*mtx_x19)[6];
		double P_x19_0_B_0_D_0 = (*mtx_x19)[7];

		int x20 = LIN_4T.FindNode("x20");
		const DSL_Dmatrix* mtx_x20 = LIN_4T.GetNode(x20)->Definition()->GetMatrix();
		double P_x20_1_C_1_D_1 = (*mtx_x20)[0];
		double P_x20_0_C_1_D_1 = (*mtx_x20)[1];
		double P_x20_1_C_1_D_0 = (*mtx_x20)[2];
		double P_x20_0_C_1_D_0 = (*mtx_x20)[3];
		double P_x20_1_C_0_D_1 = (*mtx_x20)[4];
		double P_x20_0_C_0_D_1 = (*mtx_x20)[5];
		double P_x20_1_C_0_D_0 = (*mtx_x20)[6];
		double P_x20_0_C_0_D_0 = (*mtx_x20)[7];

		int x21 = LIN_4T.FindNode("x21");
		const DSL_Dmatrix* mtx_x21 = LIN_4T.GetNode(x21)->Definition()->GetMatrix();
		double P_x21_1_A_1 = (*mtx_x21)[0];
		double P_x21_0_A_1 = (*mtx_x21)[1];
		double P_x21_1_A_0 = (*mtx_x21)[2];
		double P_x21_0_A_0 = (*mtx_x21)[3];

		int x22 = LIN_4T.FindNode("x22");
		const DSL_Dmatrix* mtx_x22 = LIN_4T.GetNode(x22)->Definition()->GetMatrix();
		double P_x22_1_B_1 = (*mtx_x22)[0];
		double P_x22_0_B_1 = (*mtx_x22)[1];
		double P_x22_1_B_0 = (*mtx_x22)[2];
		double P_x22_0_B_0 = (*mtx_x22)[3];

		int x23 = LIN_4T.FindNode("x23");
		const DSL_Dmatrix* mtx_x23 = LIN_4T.GetNode(x23)->Definition()->GetMatrix();
		double P_x23_1_C_1 = (*mtx_x23)[0];
		double P_x23_0_C_1 = (*mtx_x23)[1];
		double P_x23_1_C_0 = (*mtx_x23)[2];
		double P_x23_0_C_0 = (*mtx_x23)[3];

		int x24 = LIN_4T.FindNode("x24");
		const DSL_Dmatrix* mtx_x24 = LIN_4T.GetNode(x24)->Definition()->GetMatrix();
		double P_x24_1_D_1 = (*mtx_x24)[0];
		double P_x24_0_D_1 = (*mtx_x24)[1];
		double P_x24_1_D_0 = (*mtx_x24)[2];
		double P_x24_0_D_0 = (*mtx_x24)[3];

		int x25 = LIN_4T.FindNode("x25");
		const DSL_Dmatrix* mtx_x25 = LIN_4T.GetNode(x25)->Definition()->GetMatrix();
		double P_x25_1_A_1_B_1 = (*mtx_x25)[0];
		double P_x25_0_A_1_B_1 = (*mtx_x25)[1];
		double P_x25_1_A_1_B_0 = (*mtx_x25)[2];
		double P_x25_0_A_1_B_0 = (*mtx_x25)[3];
		double P_x25_1_A_0_B_1 = (*mtx_x25)[4];
		double P_x25_0_A_0_B_1 = (*mtx_x25)[5];
		double P_x25_1_A_0_B_0 = (*mtx_x25)[6];
		double P_x25_0_A_0_B_0 = (*mtx_x25)[7];

		int x26 = LIN_4T.FindNode("x26");
		const DSL_Dmatrix* mtx_x26 = LIN_4T.GetNode(x26)->Definition()->GetMatrix();
		double P_x26_1_A_1_C_1 = (*mtx_x26)[0];
		double P_x26_0_A_1_C_1 = (*mtx_x26)[1];
		double P_x26_1_A_1_C_0 = (*mtx_x26)[2];
		double P_x26_0_A_1_C_0 = (*mtx_x26)[3];
		double P_x26_1_A_0_C_1 = (*mtx_x26)[4];
		double P_x26_0_A_0_C_1 = (*mtx_x26)[5];
		double P_x26_1_A_0_C_0 = (*mtx_x26)[6];
		double P_x26_0_A_0_C_0 = (*mtx_x26)[7];

		int x27 = LIN_4T.FindNode("x27");
		const DSL_Dmatrix* mtx_x27 = LIN_4T.GetNode(x27)->Definition()->GetMatrix();
		double P_x27_1_A_1_D_1 = (*mtx_x27)[0];
		double P_x27_0_A_1_D_1 = (*mtx_x27)[1];
		double P_x27_1_A_1_D_0 = (*mtx_x27)[2];
		double P_x27_0_A_1_D_0 = (*mtx_x27)[3];
		double P_x27_1_A_0_D_1 = (*mtx_x27)[4];
		double P_x27_0_A_0_D_1 = (*mtx_x27)[5];
		double P_x27_1_A_0_D_0 = (*mtx_x27)[6];
		double P_x27_0_A_0_D_0 = (*mtx_x27)[7];

		int x28 = LIN_4T.FindNode("x28");
		const DSL_Dmatrix* mtx_x28 = LIN_4T.GetNode(x28)->Definition()->GetMatrix();
		double P_x28_1_B_1_C_1 = (*mtx_x28)[0];
		double P_x28_0_B_1_C_1 = (*mtx_x28)[1];
		double P_x28_1_B_1_C_0 = (*mtx_x28)[2];
		double P_x28_0_B_1_C_0 = (*mtx_x28)[3];
		double P_x28_1_B_0_C_1 = (*mtx_x28)[4];
		double P_x28_0_B_0_C_1 = (*mtx_x28)[5];
		double P_x28_1_B_0_C_0 = (*mtx_x28)[6];
		double P_x28_0_B_0_C_0 = (*mtx_x28)[7];

		int x29 = LIN_4T.FindNode("x29");
		const DSL_Dmatrix* mtx_x29 = LIN_4T.GetNode(x29)->Definition()->GetMatrix();
		double P_x29_1_B_1_D_1 = (*mtx_x29)[0];
		double P_x29_0_B_1_D_1 = (*mtx_x29)[1];
		double P_x29_1_B_1_D_0 = (*mtx_x29)[2];
		double P_x29_0_B_1_D_0 = (*mtx_x29)[3];
		double P_x29_1_B_0_D_1 = (*mtx_x29)[4];
		double P_x29_0_B_0_D_1 = (*mtx_x29)[5];
		double P_x29_1_B_0_D_0 = (*mtx_x29)[6];
		double P_x29_0_B_0_D_0 = (*mtx_x29)[7];

		int x30 = LIN_4T.FindNode("x30");
		const DSL_Dmatrix* mtx_x30 = LIN_4T.GetNode(x30)->Definition()->GetMatrix();
		double P_x30_1_C_1_D_1 = (*mtx_x30)[0];
		double P_x30_0_C_1_D_1 = (*mtx_x30)[1];
		double P_x30_1_C_1_D_0 = (*mtx_x30)[2];
		double P_x30_0_C_1_D_0 = (*mtx_x30)[3];
		double P_x30_1_C_0_D_1 = (*mtx_x30)[4];
		double P_x30_0_C_0_D_1 = (*mtx_x30)[5];
		double P_x30_1_C_0_D_0 = (*mtx_x30)[6];
		double P_x30_0_C_0_D_0 = (*mtx_x30)[7];
		double loglikelihood = loglik;

		//cout << loglikelihood;

		//for (int i = 0; i < mtx_B->GetSize(); i++)
		//{
		//	printf("%d %f\n", i, (*mtx_B)[i]);
		//}

		double arr[] = {loglikelihood, P_A_1,P_A_0,
			P_B_1_A_1,P_B_0_A_1,P_B_1_A_0,P_B_0_A_0,
			P_C_1_B_1,P_C_0_B_1,P_C_1_B_0,P_C_0_B_0,
P_D_1_C_1, P_D_0_C_1, P_D_1_C_0, P_D_0_C_0,
P_x1_1_A_1, P_x1_0_A_1, P_x1_1_A_0, P_x1_0_A_0,
P_x2_1_B_1, P_x2_0_B_1, P_x2_1_B_0, P_x2_0_B_0,
P_x3_1_C_1, P_x3_0_C_1, P_x3_1_C_0, P_x3_0_C_0,
P_x4_1_D_1, P_x4_0_D_1, P_x4_1_D_0, P_x4_0_D_0,
P_x5_1_A_1_B_1, P_x5_0_A_1_B_1, P_x5_1_A_1_B_0, P_x5_0_A_1_B_0, P_x5_1_A_0_B_1, P_x5_0_A_0_B_1, P_x5_1_A_0_B_0, P_x5_0_A_0_B_0,
P_x6_1_A_1_C_1, P_x6_0_A_1_C_1, P_x6_1_A_1_C_0, P_x6_0_A_1_C_0, P_x6_1_A_0_C_1, P_x6_0_A_0_C_1, P_x6_1_A_0_C_0, P_x6_0_A_0_C_0,
P_x7_1_A_1_D_1, P_x7_0_A_1_D_1, P_x7_1_A_1_D_0, P_x7_0_A_1_D_0, P_x7_1_A_0_D_1, P_x7_0_A_0_D_1, P_x7_1_A_0_D_0, P_x7_0_A_0_D_0,
P_x8_1_B_1_C_1, P_x8_0_B_1_C_1, P_x8_1_B_1_C_0, P_x8_0_B_1_C_0, P_x8_1_B_0_C_1, P_x8_0_B_0_C_1, P_x8_1_B_0_C_0, P_x8_0_B_0_C_0,
P_x9_1_B_1_D_1, P_x9_0_B_1_D_1, P_x9_1_B_1_D_0, P_x9_0_B_1_D_0, P_x9_1_B_0_D_1, P_x9_0_B_0_D_1, P_x9_1_B_0_D_0, P_x9_0_B_0_D_0,
P_x10_1_C_1_D_1, P_x10_0_C_1_D_1, P_x10_1_C_1_D_0, P_x10_0_C_1_D_0, P_x10_1_C_0_D_1, P_x10_0_C_0_D_1, P_x10_1_C_0_D_0, P_x10_0_C_0_D_0,
P_x11_1_A_1, P_x11_0_A_1, P_x11_1_A_0, P_x11_0_A_0,
P_x12_1_B_1, P_x12_0_B_1, P_x12_1_B_0, P_x12_0_B_0,
P_x13_1_C_1, P_x13_0_C_1, P_x13_1_C_0, P_x13_0_C_0,
P_x14_1_D_1, P_x14_0_D_1, P_x14_1_D_0, P_x14_0_D_0,
P_x15_1_A_1_B_1, P_x15_0_A_1_B_1, P_x15_1_A_1_B_0, P_x15_0_A_1_B_0, P_x15_1_A_0_B_1, P_x15_0_A_0_B_1, P_x15_1_A_0_B_0, P_x15_0_A_0_B_0,
P_x16_1_A_1_C_1, P_x16_0_A_1_C_1, P_x16_1_A_1_C_0, P_x16_0_A_1_C_0, P_x16_1_A_0_C_1, P_x16_0_A_0_C_1, P_x16_1_A_0_C_0, P_x16_0_A_0_C_0,
P_x17_1_A_1_D_1, P_x17_0_A_1_D_1, P_x17_1_A_1_D_0, P_x17_0_A_1_D_0, P_x17_1_A_0_D_1, P_x17_0_A_0_D_1, P_x17_1_A_0_D_0, P_x17_0_A_0_D_0,
P_x18_1_B_1_C_1, P_x18_0_B_1_C_1, P_x18_1_B_1_C_0, P_x18_0_B_1_C_0, P_x18_1_B_0_C_1, P_x18_0_B_0_C_1, P_x18_1_B_0_C_0, P_x18_0_B_0_C_0,
P_x19_1_B_1_D_1, P_x19_0_B_1_D_1, P_x19_1_B_1_D_0, P_x19_0_B_1_D_0, P_x19_1_B_0_D_1, P_x19_0_B_0_D_1, P_x19_1_B_0_D_0, P_x19_0_B_0_D_0,
P_x20_1_C_1_D_1, P_x20_0_C_1_D_1, P_x20_1_C_1_D_0, P_x20_0_C_1_D_0, P_x20_1_C_0_D_1, P_x20_0_C_0_D_1, P_x20_1_C_0_D_0, P_x20_0_C_0_D_0,
P_x21_1_A_1, P_x21_0_A_1, P_x21_1_A_0, P_x21_0_A_0,
P_x22_1_B_1, P_x22_0_B_1, P_x22_1_B_0, P_x22_0_B_0,
P_x23_1_C_1, P_x23_0_C_1, P_x23_1_C_0, P_x23_0_C_0,
P_x24_1_D_1, P_x24_0_D_1, P_x24_1_D_0, P_x24_0_D_0,
P_x25_1_A_1_B_1, P_x25_0_A_1_B_1, P_x25_1_A_1_B_0, P_x25_0_A_1_B_0, P_x25_1_A_0_B_1, P_x25_0_A_0_B_1, P_x25_1_A_0_B_0, P_x25_0_A_0_B_0,
P_x26_1_A_1_C_1, P_x26_0_A_1_C_1, P_x26_1_A_1_C_0, P_x26_0_A_1_C_0, P_x26_1_A_0_C_1, P_x26_0_A_0_C_1, P_x26_1_A_0_C_0, P_x26_0_A_0_C_0,
P_x27_1_A_1_D_1, P_x27_0_A_1_D_1, P_x27_1_A_1_D_0, P_x27_0_A_1_D_0, P_x27_1_A_0_D_1, P_x27_0_A_0_D_1, P_x27_1_A_0_D_0, P_x27_0_A_0_D_0,
P_x28_1_B_1_C_1, P_x28_0_B_1_C_1, P_x28_1_B_1_C_0, P_x28_0_B_1_C_0, P_x28_1_B_0_C_1, P_x28_0_B_0_C_1, P_x28_1_B_0_C_0, P_x28_0_B_0_C_0,
P_x29_1_B_1_D_1, P_x29_0_B_1_D_1, P_x29_1_B_1_D_0, P_x29_0_B_1_D_0, P_x29_1_B_0_D_1, P_x29_0_B_0_D_1, P_x29_1_B_0_D_0, P_x29_0_B_0_D_0,
P_x30_1_C_1_D_1, P_x30_0_C_1_D_1, P_x30_1_C_1_D_0, P_x30_0_C_1_D_0, P_x30_1_C_0_D_1, P_x30_0_C_0_D_1, P_x30_1_C_0_D_0, P_x30_0_C_0_D_0};
shooltz[BayesFusion]
Site Admin
Posts: 1417
Joined: Mon Nov 26, 2007 5:51 pm

Re: different conditional probabilities orders between EM runs in parameter learning

Post by shooltz[BayesFusion] »

You're using default settings for EM, which casue the initial parameters in the network to be randomized based on the pseudorandom generator seeded to value derived from current time. In such case the learned parameters may differ. To ensure your EM run is reproducible, either
- call DSL_em::SetUniformizeParameters(true) and DSL_em::SetRandomizeParameters(false) to start with uniform probabilities in CPTs, or
- fix the random seed by calling DSL_em::SetSeed(some_value).
Bo Hu
Posts: 18
Joined: Tue Aug 02, 2016 4:13 am

Re: different conditional probabilities orders between EM runs in parameter learning

Post by Bo Hu »

Thank you so much! After fixing the random seed, everything looks good.
Post Reply