java knn文本分类算法_菜鸟进阶: C++实现KNN文本分类算法

作者:finallyliuyu(转载请注明原作者和出处)

(代码暂不发布源码下载版,以后会发布)

KNN文本分类算法又称为(k nearest neighhor)。它是一种基于事例的学习方法,也称懒惰式学习方法。

它的大概思路是:对于某个待分类的样本点,在训练集中找离它最近的k个样本点,并观察这k个样本点所属类别。看这k个样本点中,那个类别出现的次数多,则将这类别标签赋予该待分类的样本点。

通过上面的描述,可以看出KNN算法在算法实现上是很简单的,并不十分困难。 给出代码之前,先给出实验条件。

1。语料库格式:

语料库存放在MSSQLSERVER2000的数据库的表单中,表单格式如下:

bd837fe52f81fd6dbd756280d8f83980.png

(fig 1)

2。如何获得该形式的语料库?

你可以从搜狗lab下载2008年的数据,并且用我的程序对这批数据进行处理,抽取出新闻。处理程序见《菜鸟学习C++练笔之整理搜狗2008版语料库--获取分类语料库》或者去下载我上传到博客园的语料资源见《献给热衷于自然语言处理的业余爱好者的中文新闻分类语料库之二》

3。分割出训练语料库与测试语料库(训练语料库和测试语料库也是MSSQL表单,格式同fig1)。关于MSSQLSERVER的一些表复制的技巧见:《MSSQL语句备份》 下面开始给出C++代码:

建立VSM模型(考虑到效率问题对训练样本集合与测试样本集采用不同的函数建立VSM模型)

1。对训练集建立VSM模型。 *****************以下函数辅助完成聚类功能*********************************************************************8**********************/

/************************************************************************/

/* 建立文档向量模型 */

/************************************************************************/

map > Preprocess::VSMConstruction(map>> &mymap)

{

clock_t start,finish;

double totaltime;

start=clock();

int corpus_N=endIndex-beginIndex+1;

map> vsmMatrix;

vector myKeys=GetFinalKeyWords();

vector >maxTFandDF=GetfinalKeysMaxTFDF(mymap);

for(int i=beginIndex;i<=endIndex;i++)

{

vector >tempVSM;

vectortempVSM2;

for(vector::size_type j=0;j

{

//vector >::iterator findit=find_if(mymap[myKeys[j]].begin(),mymap[myKeys[j]].end(),PredTFclass(i));

double TF=(double)count_if(mymap[myKeys[j]].begin(),mymap[myKeys[j]].end(),PredTFclass(i));

TF=0.5+(double)TF/(maxTFandDF[j].first);

TF*=log((double)corpus_N/maxTFandDF[j].second);

tempVSM.push_back(make_pair(j,TF));

}

if(!tempVSM.empty())

{

tempVSM=NormalizationVSM(tempVSM);

//

for(vector >

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值