/*******M step, maximazize log-likelihood*/ void Plsa::M_step(MatrixXd &data) { MatrixXd X; for (int i=0;i<K;i++) { Pw_z.col(i)=(Pz_wd[i].cwiseProduct(data)).rowwise().sum();//suma de filas[vector(1XN)] Pd_z.col(i)=(Pz_wd[i].cwiseProduct(data)).colwise().sum();//suma de columnas[vector(1XN)] } //normalize RowVectorXd Temp; RowVectorXd C; VectorXd E; VectorXd T; Temp=RowVectorXd::Ones(K); T=VectorXd::Ones(K); // vector of K with ones P_z=Pd_z.colwise().sum(); cout<<P_z; C=Pd_z.colwise().sum(); //suma de columnas[vector(1XN)] Temp=Temp.cwiseQuotient(C); Pd_z=Pd_z*(Temp.asDiagonal()); C=Pw_z.colwise().sum(); // Temp=Temp.cwiseQuotient(C); Pw_z=Pw_z*(Temp.asDiagonal()); E=P_z.rowwise().sum(); P_z=P_z.cwiseProduct(T.cwiseQuotient(E)); }
void Plsa::Normalize(MatrixXd &Mat) { RowVectorXd Temp; Temp=RowVectorXd::Ones(K); Temp=Temp.cwiseQuotient(Mat.colwise().sum()); Mat=Mat*Temp.asDiagonal(); }