从文本分类问题中的特征词选择算法追踪如何将数学知识,数学理论迁移到实际工程中去
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特征词选择算法
附:《卡方特征词选择算法》
《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特征词选择算法
相关文章推荐
- 文本分类入门-特征选择算法之开方检验
- 技术积累--常用的文本分类的特征选择算法
- 文本分类入门特征选择算法之开方检验
- 短文本/Query分类算法特征选择
- 文本分类入门:特征选择算法之开方检验、信息增益;特征选择与特征权重计算的区别
- 文本分类特征词选择算法科普(前言and一)
- 特征词选择算法对文本分类准确率的影响(二)
- 文本分类中的特征词选择算法系列科普(前言AND 一)
- 特征词选择算法对文本分类准确率的影响(三)
- 借助weka实现的分类器进行针对文本分类问题的特征词选择实验(实验代码备份)
- 特征词选择算法对文本分类准确率的影响(四)
- 特征词选择算法对文本分类准确率的影响(五)
- 短文本/Query分类算法特征选择
- 特征词选择算法对文本分类准确率的影响(前言)
- 文本分类入门(十)特征选择算法之开方检验
- 文本分类入门(十)特征选择算法之开方检验
- 在编程的世界中,如何高效地学习理论知识,应用理论知识来解决实际生产中的问题
- 数学之美 系列十八 - 矩阵运算和文本处理中的分类问题
- C/C++面试之算法系列--如何利用数学思想解1/2/5组合问题
- [转载]数学之美 系列十八 - 矩阵运算和文本处理中的分类问题