模式識別 貝葉斯分類器的C 實現

2021-08-01 15:46:49 字數 1724 閱讀 5498

#include

#include

#include

#include

using

namespace

std;

const

int maxn=1000;

const

double pi=3.1415926;

ifstream cin1("female.txt");

ifstream cin2("male.txt");

ifstream cin3("test2.txt");

ofstream cout1("result.txt");

struct human

;human female[maxn];

human male[maxn];

int female_num;

int male_num;

double p_female;

double p_male;

struct normal

;normal female_normal;

normal male_normal;

/*讀入檔案資料

*/void in()

while(cin2>>male[male_num+1].height>>male[male_num+1].weight)

}void init()

/*讀入樣本數量個樣本,並求出該樣本的二維正態分佈

*/void normalization(struct human *human,int human_num,struct normal &human_normal)

mu1/=human_num;

mu2/=human_num;

for(int i=1;i<=human_num;i++)

delta1/=human_num;

delta2/=human_num;

delta1=sqrt(delta1);

delta2=sqrt(delta2);

for(int i=1;i<=human_num;i++)

rho/=human_num;

rho-=mu1*mu2;

rho/=(delta1*delta2);

human_normal.mu1=mu1;

human_normal.mu2=mu2;

human_normal.delta1=delta1;

human_normal.delta2=delta2;

human_normal.rho=rho;

cout

<" "

<" "

<" "

<" "

在分布為normal的條件下特徵為(x1,x2)的條件概率

*/double p(struct normal &normal,double x1,double x2)

/*歸為normal的後驗概率

t為0表示female,1表示male

*/double posterior_probability1(double x1,double x2,bool t)

/*判斷是哪個類別,返回0表示female,1表示male

*/bool classify(double x1,double x2)

/*得到錯誤率並將錯誤率輸出到result.txt中

*/void find_error_rate()

模式識別 貝葉斯分類器的訓練

貝葉斯分類決策規則 依據計算得到的後驗概率對樣本進行歸類 條件 先驗概率和類條件概率已知。因此只要知道 p w j p w j p wj 和p x wj p x w j p x wj 就可以設計出貝葉斯分類器,而p w j p w j p wj 和p x wj p x w j p x wj 並不能預...

模式識別分類

摘自 模式識別導論 齊敏,李大健,郝重陽,清華大學出版社,2009.按照理論分類 統計模式識別 是定量描述的識別方法。以模式集在特徵空間中分布的類概率密度函式為基礎,對總體特徵進行研究,包括判別函式法和聚類分析法。是模式分類的經典型和基礎性技術,歷史最長,目前仍是模式識別的主要理論。句法模式識別 也...

模式識別(三)非線性分類器

遇到像圖1中所示的樣本分類,線性方法是無法發揮作用的。因為塔是線性不可分的,這時候必須採用非線性方法。多層感知器包含乙個以上隱層和乙個輸出層,隱層將輸入對映到乙個超立方體頂點,輸出層完成線性分類。通過隱層不斷對映,最終可以將樣本對映為線性可分。隱層中每個神經元相當於乙個超平面,超平面將樣本點對映到超...