算法流程如下: Input : Binary training data {xi}i=1I, Hyperparameters {αk}k=1K Output: MAP estimates of parameters θ={λk}k=1K begin for k=1 to Kdoλk=(Nk−1+αk)/(I−K+∑k=1Kαk) end end
學習的代碼如下:
voidMAP_categorical_distribution_parameters(){
vector<int> data;
data =generate_categorical_distribution_data(100000);
std::map<int,double> hist{};for(int i =0; i < data.size(); i++){++hist[data[i]];}
vector<double> alpha_v;//set Drichilet distribution superparametersfor(int i =0; i < hist.size(); i++){
alpha_v.push_back(1.0);}double total_p =0;double down=0;for(int i =0; i < hist.size(); i++){
down += hist.at(i)+ alpha_v[i]-1;}for(int i =0; i < hist.size(); i++){
hist.at(i)=(hist.at(i)+ alpha_v[i]-1)/ down;
total_p += hist.at(i);
std::cout << hist.at(i)<< std::endl;}
cout <<"total_p: "<< total_p << endl;}