/*樸素貝葉斯演算法思想: 舉個例子,假如某天是否要出去打網球,有兩種選擇:是和否,即最後分成兩個類別。但是受3個因素的影響,分別是天氣、溫度和是否有風。天氣有3個值:晴、多雲和有雨。溫度有3個值:高,正常和低。是否有風有兩個值:是和否。假如樣本a是,樣本b是,還有其他的樣本,可以得到樣本的某些先驗概率,即已經知道了是否打網球的結果某因素出現的概率。然後利用到貝葉斯公式的一些轉換(數學的知識不在這裡推),計算後驗概率,即知道因素的情況,估計打網球與不打網球各自的概率。
*/#include#include
#include
#include
#include
using
namespace
std;
vector
split(const
string& src,const
string& delimiter); /*
*分離字串*
*/void rejudge(); /*
*重新判斷原輸入資料的類別*
*/vector
string> > vect; /*
*二維容器*
*/map
category; /*
*存放類別*
*/map
pro_map; /*
*各種概率的map容器*
*/int
main()
else
string
temp_string;
vector
::size_type temp_size1=vect.size()-1; /*
*總行數*
*/vector
::size_type temp_size2=vect[0].size();/*
*總列數*
*/for(int i=0;i1;i++)
for(st_x=1;st_x1;st_x++)
else
temp_string.erase();}}
string
::size_type st;
cout
<<"
統計過程如下:
"
}cout
<<"
計算概率過程如下:
"
cout
}rejudge();
}cout
}vector
split(const
string& src,const
string&delimiter)
if(last_st!=src.size())
return
vect;
}void
rejudge()
}temp_map[it->first]=temp_pro;
}string
temp_string2;
temp_pro=0
; cout
<<"
後驗概率:";
for(map::iterator it2=temp_map.begin();it2!=temp_map.end();it2++)
}cout
<<"
歸類:"
<0][vect[0].size()-1]<<"="
}}
樸素貝葉斯演算法
首先樸素貝葉斯分類演算法利用貝葉斯定理來 乙個未知類別的樣本屬於各個類別的可能性,選擇可能性最大的乙個類別作為該樣本的最終類別。對於計算而言,需要記住乙個公式。p c x p x c p c p x 類似於概率論條件概率公式。其中x代表含義為最終類別,例如 yes?no。c為屬性。使用樸素貝葉斯演算...
樸素貝葉斯演算法
計算貝葉斯定理中每乙個組成部分的概率,我們必須構造乙個頻率表 因此,如果電子郵件含有單詞viagra,那麼該電子郵件是垃圾郵件的概率為80 所以,任何含有單詞viagra的訊息都需要被過濾掉。當有額外更多的特徵時,此概念的使用 利用貝葉斯公式,我們可得到如下概率 分母可以先忽略它,垃圾郵件的總似然為...
樸素貝葉斯演算法
對於樸素貝葉斯演算法,我的理解就是 使用已知的概率和結果,來 事情的條件。舉乙個例子就是,我們通過統計得到了不同年齡段喜歡吃冰激凌的比例,比如各採訪了500個青少年 中年人和老年人,得到有450個青少年 300個中年人和50個老年人喜歡吃冰激凌。我們還通過統計,知道了在社會中假設小孩子佔20 中年人...