亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? cnaivebayes.cpp

?? 貝葉斯公式
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
#include "CNaiveBayes.h"
#include "ssps.h"

#include <iostream>
#include <math.h>
#include <fstream>
#include <windows.h>
using namespace std;

extern Segment(int, string *,string ,string *);
//-------------------------------------------------
//CNaiveBayes類的構造函數
//-------------------------------------------------
CNaiveBayes::CNaiveBayes()
{
    m_nClassNum = 0;						//類別總數
	m_psClassName = NULL;
	m_mapClassName2ID.clear();
	m_ppfTrainRes = NULL;
	m_pnTrainNum = NULL;
	m_pfPrC = NULL;
	m_nCorrectResNum =0;
	m_pnResNum = NULL;
	m_pnCorrectResNum = NULL;

}
//-----------------------------------------------------------------------------------------//
//   功能:       CNaiveBayes類的析構函數。
//-----------------------------------------------------------------------------------------//
CNaiveBayes::~CNaiveBayes()
{
	if(m_psClassName != NULL)
	{
		delete[] m_psClassName;
	}
	m_psClassName = NULL;

	m_mapClassName2ID.clear();
	
	if(	m_ppfTrainRes != NULL)
	{
		for(int i=0;i<m_nClassNum;i++)
		{
			delete[] m_ppfTrainRes[i];
			m_ppfTrainRes[i] = NULL;
		}
		delete[] m_ppfTrainRes;
	}
	m_ppfTrainRes = NULL;

	if(m_pnTrainNum != NULL)
	{
		delete[] m_pnTrainNum;
	}
	m_pnTrainNum = NULL;

	if(m_pfPrC != NULL)
	{
		delete[] m_pfPrC;
	}
	m_pfPrC = NULL;

	m_vTestRes.clear();

	if(m_pnResNum != NULL)
	{
		delete[] m_pnResNum;
	}
	m_pnResNum = NULL;

	if(m_pnCorrectResNum != NULL)
	{
		delete[] m_pnCorrectResNum;
	}
	m_pnCorrectResNum = NULL;
}
//-----------------------------------------------------------------------------------------//
//   功能:       讀入訓練文本,訓練分類器
//----------------------------------------------------------------------------------------//
int CNaiveBayes::Train()
{
	//從文件_all_ids.lst中讀取訓練語料的特征項詞頻,訓練特征項的類內先驗概率
 	ifstream tfile("..\\Dic\\DF\\_all_ids.lst");
	string strLine;		//讀入一行為一個字符串
	string::size_type pos=0, prev_pos=0;
	string word;
	int tatal_num = 0;
	string sTemp="";
	int nClassIndex=0;
	while(getline(tfile,strLine,'\n')!=NULL)//讀取行
	{
		//取類名
		string::size_type classname_pos=0;
		pos=0;
		prev_pos=0;
		classname_pos = strLine.find_first_of( ' ',classname_pos );//從字符串開始尋找空格,返回空格所在位置。
		sTemp = strLine.substr( prev_pos, classname_pos - prev_pos );
		//取對應的類標號
		nClassIndex = m_mapClassName2ID[sTemp];		

		string::size_type num_pos;
		//取類別中文章的數量
		num_pos = ++classname_pos;
		num_pos = strLine.find_first_of( ' ',num_pos );
		sTemp = strLine.substr( classname_pos,num_pos-classname_pos );
		m_pnTrainNum[nClassIndex] = atoi(sTemp.c_str());		//每個類別中文章的數量

		pos=++num_pos;
		prev_pos=pos;
		int nWordNum = 0;//類中詞的數量
		while((pos = strLine.find_first_of( ' ', pos ))!=string::npos)
		{
			//取得每個word 的key:weight
			string::size_type key_pos=0, weight_pos=0;
			word = strLine.substr( prev_pos, pos - prev_pos );
			prev_pos = ++pos;
			
			//取得每個word的key,weight存入鏈表elem
			key_pos = word.find_first_of( ':', key_pos );
			string str_key = word.substr( 0 , key_pos );
			string str_weight = word.substr( key_pos+1, string::npos - key_pos );
			int key = atoi(str_key.c_str());
			int weight = atoi(str_weight.c_str());
            m_ppfTrainRes[nClassIndex][key]=weight;
			nWordNum += weight;			
		}
		
		//處理最后一個空格后的word
		word = strLine.substr( prev_pos, pos - prev_pos );
		//cout << word << endl;
		string::size_type key_pos=0;
		key_pos = word.find_first_of( ':', key_pos );
		string str_key = word.substr( 0 , key_pos );
		string str_weight = word.substr( key_pos+1, string::npos - key_pos );
		int key = atoi(str_key.c_str());
		int weight = atoi(str_weight.c_str());
		m_ppfTrainRes[nClassIndex][key]=weight;
		nWordNum += weight;	
		
		char szPrWFile[20];
		sprintf(szPrWFile,"Pr\\PrW in C%d.txt",nClassIndex);
		ofstream Fou;
		Fou.open(szPrWFile,ios::out);
		for(int k=0;k<m_nFeatureNum;k++)
		{
			m_ppfTrainRes[nClassIndex][k]=(m_ppfTrainRes[nClassIndex][k]+1)/(nWordNum+m_nFeatureNum);
			char szTemp[100];
			memset(szTemp,0,100);
			sprintf(szTemp,"%d\t%f\n",k,m_ppfTrainRes[nClassIndex][k]);
			Fou << szTemp;			
		}
		Fou.close();

		tatal_num += m_pnTrainNum[nClassIndex];
	}

	//-------------------------------------------------------------
	//計算每個類的先驗概率PrC
	//-------------------------------------------------------------
	ofstream FouPrc;
	FouPrc.open("Pr\\Prc.txt",ios::out);
	for(int k=0 ; k<m_nClassNum ; k++)
	{
		m_pfPrC[k] = (float)m_pnTrainNum[k]/(float)tatal_num;
		char szPrcTemp[100];//存儲類的先驗概率
		memset(szPrcTemp,0,100);
		sprintf(szPrcTemp,"%d %s %f\n",k,m_psClassName[k].c_str(),m_pfPrC[k]);
		FouPrc << szPrcTemp;
	}
	FouPrc.close();
	return m_nClassNum;
}

//-----------------------------------------------------------------------------------------//
//   功能:       初始化測試結果
//----------------------------------------------------------------------------------------//
bool CNaiveBayes::InitTestRes()
{
	m_pnResNum = new int[m_nClassNum];
	memset(m_pnResNum,0,m_nClassNum*sizeof(int));

	m_pnCorrectResNum = new int[m_nClassNum];
	memset(m_pnCorrectResNum,0,m_nClassNum*sizeof(int));
	return true;
}

//----------------------------------------------------------------------------------------//
//	功能:		  對測試文本進行分類
//   參數:       無
//  (入口)
//	string sTestFile	待測試文本的文件名
//	bool bFlag=false	是否已知該測試文本的所屬類別,是true,否false
//	int nClassID=0		測試文本所屬類別的ID號,從0開始編號(與m_mapClassName2ID中的ID號保持一致)
//  (出口)      無
//    返回:      測試文本數量
//----------------------------------------------------------------------------------------//
int CNaiveBayes::Test(string sTestFile,bool bFlag,int nClassID)
{
	m_vTestRes.clear();
	m_nCorrectResNum = 0;
	string strLine;		//讀入一行為一個字符串
	
	double *pro=new double[m_nClassNum];//存儲各特征項取log后的和	
	memset(pro,0,m_nClassNum*sizeof(double));

	string::size_type pos=0, prev_pos=0;
	string word;
	//讀取文件內容	
	ifstream tfile1(sTestFile.c_str());	
	//每次處理一個測試文本
	while(getline(tfile1,strLine,'\n')!=NULL)
	{		
		string::size_type wordnum_pos=0;
		wordnum_pos = strLine.find_first_of( ' ',wordnum_pos );
		
		//每篇文章的詞數nWordNum		
		string sWordNum = strLine.substr( 0,wordnum_pos );
		int nWordNum = atoi( sWordNum.c_str() );
		
		pos=++wordnum_pos;
		prev_pos=pos;
		while((pos = strLine.find_first_of( ' ', pos ))!=string::npos)
		{
			//取得每個word 的key:weight
			string::size_type key_pos=0, weight_pos=0;
			word = strLine.substr( prev_pos, pos - prev_pos );
			prev_pos = ++pos;
			
			//取得每個word的key并計算在類中的先驗概率
			key_pos = word.find_first_of( ':', key_pos );
			string str_key = word.substr( 0 , key_pos );
			int key = atoi(str_key.c_str());
			
			for(int i=0;i<m_nClassNum;i++)
			{	
				pro[i]=pro[i]+log(m_ppfTrainRes[i][key]);
			}
			
		}
		
		//處理最后一個空格后的word
		word = strLine.substr( prev_pos, pos - prev_pos );
		string::size_type key_pos=0;
		key_pos = word.find_first_of( ':', key_pos );
		string str_key = word.substr( 0 , key_pos );
		int key = atoi(str_key.c_str());
		
		
		for(int i=0;i<m_nClassNum;i++)
		{	
			pro[i]=pro[i]+log(m_ppfTrainRes[i][key])+log(m_pfPrC[i]);
		}
		
		//對測試文本進行分類
		
		double t;
		t = pro[0];
		int max_pro_num = 0;
		
		for(int s = 1 ; s < m_nClassNum ; s++ )
		{
			double k = pro[s];
			if( t < k && k != 0 && t != 0 )
				
			{
				max_pro_num = s;
				t = k;	//cout << "t=" << t << "k=" << k << endl;
			}
		}
		
		//打開C[max_pro_num].txt,記錄下該文檔的絕對路徑
		
		m_vTestRes.push_back(max_pro_num);
		if (bFlag)
		{
			m_pnResNum[max_pro_num]++;
			if (max_pro_num==nClassID) 
			{
				m_nCorrectResNum++;
				m_pnCorrectResNum[nClassID]++;
			}
		}
	}	
	return m_vTestRes.size();		//返回文章數量
}

//-----------------------------------------------------------------------------------------//
//   功能:       將分類結果輸出。
//----------------------------------------------------------------------------------------//
void CNaiveBayes::OutputRes(int nClassID,int nDocNum)
{
	cout << "類別 : " << m_psClassName[nClassID] << endl;
	cout << "總文檔數: " << nDocNum << endl;
	cout << "劃分為該類的文檔數 = " << m_pnResNum[nClassID] << endl;
	cout << "正確歸檔數 = " << m_pnCorrectResNum[nClassID] << endl;
	double percent = (float)m_pnCorrectResNum[nClassID]/(float)m_pnResNum[nClassID]; 
	cout << "準確率: " << percent*100 << "%" << endl;
	double recall = (float)m_pnCorrectResNum[nClassID]/(float)nDocNum; 
	cout << "召回率: " << recall*100 << "%" << endl;
}

//-----------------------------------------------------------------------------------------//
//   功能:       對一個文件夾內的文檔進行測試。
//   參數:       
//  (入口)
//	string sTestFilesPath	待測試文件夾
//----------------------------------------------------------------------------------------//
void CNaiveBayes::TestFiles(string sTestFilesPath)
{
   

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩精品国产欧美| 91片在线免费观看| 成人黄色综合网站| 91麻豆精品国产91久久久资源速度| 精品国产青草久久久久福利| 亚洲精品伦理在线| 久久成人av少妇免费| 欧美网站一区二区| 国产精品麻豆视频| 国内不卡的二区三区中文字幕| 91丨porny丨在线| 久久精品一区二区三区av| 亚洲成人久久影院| 成人黄动漫网站免费app| 日韩精品在线一区二区| 一卡二卡三卡日韩欧美| 国产91精品一区二区麻豆网站 | 日韩高清不卡在线| 99精品黄色片免费大全| 国产欧美一区二区在线观看| 日本中文字幕一区二区有限公司| 91极品视觉盛宴| **欧美大码日韩| 成人黄色综合网站| 国产精品每日更新在线播放网址| 国产乱色国产精品免费视频| 欧美一区二区视频免费观看| 亚洲第一av色| 欧美日韩国产片| 日韩精品成人一区二区在线| 欧美午夜精品久久久久久孕妇| 综合色天天鬼久久鬼色| av一本久道久久综合久久鬼色| 欧美激情在线观看视频免费| 国产成人免费xxxxxxxx| 国产色综合一区| 国产91精品入口| 国产精品美女久久久久av爽李琼| 国产成人日日夜夜| 国产精品天干天干在线综合| 成人免费电影视频| 自拍av一区二区三区| 色综合久久久久综合体| 亚洲午夜在线电影| 欧美精品久久一区二区三区| 日韩电影免费在线| 精品国产青草久久久久福利| 国产一区激情在线| 中文字幕亚洲电影| 欧洲在线/亚洲| 日本中文一区二区三区| 精品国产一区二区精华| 成人午夜视频免费看| 亚洲精选在线视频| 欧美一级爆毛片| 国产精品白丝av| 亚洲你懂的在线视频| 欧美日韩国产一级| 国内不卡的二区三区中文字幕| 中文字幕成人av| 欧美日韩免费一区二区三区视频 | 日韩在线卡一卡二| 精品成人一区二区| av一二三不卡影片| 日韩高清在线观看| 国产精品乱码人人做人人爱| 欧洲一区二区av| 久久激情五月激情| 亚洲色图欧洲色图婷婷| 欧美一卡二卡在线| 99久久免费精品| 久久精品国产免费| 中文字幕一区av| 欧美一区二区精品久久911| 国产99精品在线观看| 性感美女极品91精品| 欧美激情一区二区三区四区| 欧美日韩一区三区| 国产成人亚洲精品狼色在线| 亚洲va国产va欧美va观看| 国产午夜精品福利| 69堂精品视频| 99久久久免费精品国产一区二区| 裸体在线国模精品偷拍| 亚洲免费观看视频| 国产女主播一区| 日韩午夜av一区| 精品视频一区二区不卡| 成人av一区二区三区| 久久国产剧场电影| 亚洲va国产天堂va久久en| 中文字幕一区二区三区不卡| 欧美sm美女调教| 欧美丰满一区二区免费视频 | 亚洲国产精品成人综合| 欧美一区二区三区视频免费播放| 99久久久国产精品| 国产成人免费xxxxxxxx| 国内精品在线播放| 日本怡春院一区二区| 亚洲地区一二三色| 亚洲狠狠丁香婷婷综合久久久| 国产亚洲欧洲997久久综合| 91精品婷婷国产综合久久竹菊| 在线看不卡av| 欧美在线免费观看亚洲| 色综合中文字幕| 91麻豆高清视频| 97成人超碰视| 色网综合在线观看| 色婷婷综合五月| 99re视频这里只有精品| 成年人午夜久久久| 本田岬高潮一区二区三区| 国产成人精品网址| 丁香一区二区三区| 成人黄色综合网站| 色综合天天做天天爱| 色综合一个色综合亚洲| 在线精品视频一区二区三四| 在线看国产一区| 7777精品伊人久久久大香线蕉| 欧美剧情电影在线观看完整版免费励志电影| 91豆麻精品91久久久久久| 在线亚洲高清视频| 91精品国产91久久久久久一区二区 | 欧美日韩精品一区二区三区蜜桃| 91行情网站电视在线观看高清版| 色菇凉天天综合网| 欧美日韩一区高清| 欧美刺激午夜性久久久久久久 | 91国产精品成人| 欧美日韩中文国产| 日韩视频免费观看高清完整版在线观看 | 丝袜美腿高跟呻吟高潮一区| 污片在线观看一区二区| 久久精品国产精品亚洲精品| 国产ts人妖一区二区| 91在线无精精品入口| 在线免费视频一区二区| 日韩三级av在线播放| 国产欧美日韩亚州综合 | 国产精品久久久久一区二区三区| 国产精品麻豆视频| 亚洲一区在线观看视频| 蜜芽一区二区三区| 成人激情开心网| 欧美日韩色一区| 欧美激情综合五月色丁香| 亚洲精品欧美综合四区| 久久精品国产久精国产| 99精品热视频| 日韩欧美中文一区| 亚洲色图一区二区三区| 麻豆久久一区二区| 色综合天天天天做夜夜夜夜做| 7878成人国产在线观看| 中文字幕欧美区| 日韩精品1区2区3区| 成人黄色免费短视频| 欧美二区三区的天堂| 国产亚洲欧洲997久久综合| 亚洲在线观看免费| 国产aⅴ综合色| 91精品欧美久久久久久动漫| 18成人在线观看| 狠狠色伊人亚洲综合成人| 日本国产一区二区| 中文字幕欧美国产| 久久精品国产精品亚洲红杏| 欧美亚洲精品一区| 国产精品高清亚洲| 国产成人日日夜夜| 日韩欧美资源站| 午夜精品一区在线观看| 成年人国产精品| 国产视频一区二区在线观看| 日韩影院精彩在线| 欧美在线观看18| 成人欧美一区二区三区| 国产大陆亚洲精品国产| 日韩美女在线视频| 日韩成人免费在线| 精品视频在线免费看| 依依成人精品视频| www.一区二区| 国产精品二三区| 成人免费视频视频在线观看免费 | 精品福利在线导航| 日本大胆欧美人术艺术动态| 欧美在线不卡一区| 亚洲国产视频网站| 色系网站成人免费| 亚洲免费电影在线| 91麻豆精东视频| 亚洲综合一区在线| 在线观看网站黄不卡| 亚洲影视资源网| 在线看日韩精品电影| 亚洲高清免费一级二级三级|