樸素貝葉斯演算法 C 實現 拉普拉斯平滑 演算法優化

2021-07-23 23:10:20 字數 4599 閱讀 6931

分類:

#include 

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

struct train_data

};vector

train_text; //每個完整的訓練文字

vector

all_words; //所有不同的單詞 ,縱軸

vector

all_trains; //所有訓練文字,橫軸

int right_sum; //**正確的個數

//nb adding part

struct each_word

};//構建詞帶

struct emotion

};emotion each_emotion[7];

//nb adding part

// youhua part

double add[7] = ;

//youhua part

void reading_file(void );

void class_calculating();

bool cmp(const emotion & , const emotion & );

int main()

void reading_file()

train.close();

stringstream s;

int index;

int emotion_value;

string emotion;

string word;

for (int i = 0; i < train_text.size(); i ++)

else

continue;

}if (flag)

bool flag1 = true;

for (int i = 0; i < all_words.size(); i ++)

else

continue;

}if (flag1)

all_words.push_back(word);

}s.clear();

}}void class_calculating()

p = strtok(null, " ");

while (p != null)

// else

// continue;

// }

// if (flag)

bool flag1 = true;

for (int i = 0; i < all_words.size(); i ++)

else

continue;

}if (flag1)

all_words.push_back(temp);

p = strtok(null, " ");

}for (int i = 1; i <= 7; i ++)

else

continue;

}if (flag)

}each_emotion[i].probability = pro * (1.0 / (abs(each_emotion[i].times - train_text.size())));

}sort(each_emotion + 1, each_emotion + 7, cmp);

cout

<< each_emotion[6].emotion2 << endl;

if (each_emotion[6].emotion2 == test_train.emotion)

}cout

<< "正確個數: "

<< right_sum << endl;

// for (int i = 1; i < 7 ; i ++)

// cout << each_emotion[i].times << endl;

}bool cmp(const emotion &a, const emotion & b)

回歸:

#include 

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

struct ct

};struct train_data

};vector

train_text; //每個完整的訓練文字

vector

all_words; //所有不同的單詞 ,縱軸

vector

all_trains; //所有訓練文字,橫軸

int right_sum; //**正確的個數

void reading_file(void );

void get_tf(void );

void regre_calculating(void );

int main()

void reading_file()

else

continue;

}if (flag1)

all_words.push_back(word);

//統計每個訓練文字中的單詞

bool flag2 = true;

for (int i = 0; i < new_train.word.size(); i ++)

else

continue;

}if (flag2)

p2 = strtok(null, " ");

}char *p3 = strtok(d, ",");

p3 = strtok(null, ",");

p3 = strtok(null, ",");

stringstream ss;

double fre;

while (p3 != null)

all_trains.push_back(new_train);

}}void get_tf()

}if (flag)

all_trains[i].tf.push_back(0);}}

}void regre_calculating()

}if (flag)

p2 = strtok(null, " ");

}map

m;for (int i = 0; i < test_train.word.size(); i ++)

map fre;

fre[1] = 0; fre[2] = 0; fre[3] = 0;

fre[4] = 0; fre[5] = 0; fre[6] = 0;

for (int i = 0; i < all_trains.size(); i ++)

}if (flag)

v.push_back((1.0 + test_train.word[j].num) / (test_train.sum + all_words.size()));

}for (int t = 0; t < v.size(); t ++)

fre[1] += temp_fre * all_trains[i].fre_set[0];

fre[2] += temp_fre * all_trains[i].fre_set[1];

fre[3] += temp_fre * all_trains[i].fre_set[2];

fre[4] += temp_fre * all_trains[i].fre_set[3];

fre[5] += temp_fre * all_trains[i].fre_set[4];

fre[6] += temp_fre * all_trains[i].fre_set[5];

}double all_fre = fre[1] + fre[2] + fre[3] + fre[4] + fre[5] + fre[6];

out << fre[1] / all_fre << '\t'

<< fre[2] / all_fre << '\t'

<< fre[3] / all_fre << '\t'

<< fre[4] / all_fre << '\t'

<< fre[5] / all_fre << '\t'

<< fre[6] / all_fre << endl;

}}

貝葉斯推斷之拉普拉斯近似

p w t,x frac 分母 p t x 是與引數 w 無關,可視為常量。定義函式 g 如下 g w x,t,sigma 2 p t x,w p w sigma 2 因此,g 與 p w t,x 之比為常數。上文介紹了點估計法求解 p w t,x 本文介紹拉普拉斯近似法求解 p w t,x 由於沒...

拉普拉斯融合演算法

無意看到了拉普拉斯的影象融合演算法,瀏覽了幾篇部落格,終於弄懂了其中的原理,現在作乙個記錄,方便以後理解使用。演算法流程 1.分別計算待融合的兩幅影象的拉普拉斯金字塔 2.計算得到兩幅影象最頂層的高斯金字塔 這一步包含在第一步當中,因為在求拉普拉斯金字塔前要先得到影象的高斯金字塔 3.生成每一級的掩...

拉普拉斯邊緣檢測 邊緣檢測演算法1 拉普拉斯運算元

拉普拉斯運算元,是學影象處理最先學習的,是乙個二階差分演算法。一階差分運算元,就是 相鄰畫素相減。二階差分運算元,就是 在 一階差分運算元上,繼續做相鄰畫素相減。三階差分運算元,就是在 二階差分上,繼續差分 所以,比較容易理解。opencv裡面,提供了乙個 laplace api 由api描述,該實...