您的位置:首页 > 其它

从文本分类问题中的特征词选择算法追踪如何将数学知识,数学理论迁移到实际工程中去

2010-10-04 09:53 701 查看
博文转载请注明作者和出处(作者:finallyliuyu :出处博客园)

附:《卡方特征词选择算法》

  《DF特征词选择算法》

一.数学背景

将数学知识、数学理论以及数学思想迁移到实际工程问题中,经常会促进工程问题的圆满解决。

可是如何将数学知识引入工程问题中呢?首先需要有“数学思维”例如理解数学公式所刻画的内涵;其次需要有“建模”能力:从不同的视角来看待同一个问题,最后抽象出的数学模型也可能会差别很大。比如有的数学模型有现成的解决方案可用,然而有的数学模型没有现成的解决方案可用;或者有的模型比其他模型能更好地刻画和表示实际问题。如果把在头脑中搜索适合待解决实际问题的数学工具定义为“数学思维”,把将实际问题抽象成数学模型的能力定义为"”数学建模”的话,只有这两种能力配合“默契”才能更好地解决实际问题。或许我们从文本分类问题中的各种特征词选择方法能够看到些端倪。

首先先来看一些公式的含义

信息增益特征词选择算法

/************************************************************************/
/* 信息增益特征词选择算法 */
/************************************************************************/
void Preprocess::InformationGainFeatureSelection(vector<string > classLabels,DICTIONARY& mymap,CONTINGENCY& contingencyTable,int N,char * address)
{
clock_t start,finish;
double totaltime;
int totalTraingingCorpus=endIndex-beginIndex+1;//训练语料库总共的文章数目
set<string>finalKeywords;//存放最终遴选出的特征词
vector<pair<string,double>>IGInfo;
start=clock();
for(vector<string>::iterator it=classLabels.begin();it!=classLabels.end();it++)
{
//训练语料库中某个类别的文章数目
int N_subClassCnt=getCategorizationNum(*it,"TrainingCorpus");
//threshold决定每个类别遴选多少个特征词
int threshold=N_subClassCnt*N/totalTraingingCorpus;
IGInfo=InformationGainFeatureSelectionForPerclass(mymap,contingencyTable,*it);
for(vector<pair<string,double> >::size_type j=0;j<threshold;j++)
{
finalKeywords.insert(IGInfo[j].first);

}
IGInfo.clear();

}

ofstream outfile(address);
int finalKeyWordsCount=finalKeywords.size();
for (set<string>::iterator it=finalKeywords.begin();it!=finalKeywords.end();it++)
{
outfile<<*it<<endl;

}
outfile.close();
cout<<"最后共选择特征词"<<finalKeyWordsCount<<endl;
finish=clock();
totaltime=(double)(finish-start)/CLOCKS_PER_SEC;
cout<<"遴选特征词共有了"<<totaltime<<endl;

}

附: DF特征词选择算法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: