• 大小: 1.83MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-09-15
  • 语言: C/C++
  • 标签: KNN分类  

资源简介

KNN分类算法的C++实现,采用交叉验证测试在公共数据集上的准确率。希望对大家有帮助,如果发现程序中的问题请给我留言,相互借鉴,共同进步。

资源截图

代码片段和文件信息

// CrossValidation.cpp: implementation of the CCrossValidation class.
//
//////////////////////////////////////////////////////////////////////

#include “CrossValidation.h“

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CCrossValidation::CCrossValidation(int sampleSize  int k_fold const std::vector &classSize): m_classSize( classSize )
{
m_sampleSize = sampleSize;
m_kfold = k_fold;

int classIndex = 0;
int sampleCount = 0;
std::vector group;
group.reserve( sampleSize / classSize.size() );
m_classMap.reserve( sampleSize );

m_sampleID.reserve( sampleSize );
for( int i = 0; i < sampleSize; i++ )
m_sampleID.push_back( i );

m_cvGroup.resize( k_fold );

for( int sampleIndex = 0; sampleIndex < sampleSize; sampleIndex++ )
{
if( sampleCount < m_classSize.at( classIndex ) )
{
sampleCount++;
group.push_back( sampleIndex );
}
else
{
m_classMap.push_back( group );
group.clear();

classIndex++;
sampleCount = 0;
sampleIndex--;
}
}
m_classMap.push_back( group );

}

CCrossValidation::~CCrossValidation()
{

}

void CCrossValidation::GenerateCVGroup()
{
int unevenTime = 0; //记录当前类样本若是交叉验证分组个数不一样时,是第几次出现分组不一样的情况

//通过轮盘组对每类样本进行按比例随机交叉验证分组
for( int classIndex = 0; classIndex < (int)m_classSize.size(); classIndex++ )
{
//计算当前类样本平均分组大小
int meanGroupSize = m_classSize.at( classIndex ) / m_kfold;
int unevenGroupCount = m_classSize.at( classIndex ) - meanGroupSize * m_kfold;
if( unevenGroupCount > 0 )
unevenTime++;

//计算当前类样本分到交叉验证分组中各组的样本个数
std::vector groupSize;
groupSize.reserve( m_kfold );
for( int groupIndex = 0; groupIndex < m_kfold; groupIndex++ )
{
if( unevenTime % 2 == 0 )
{
if( groupIndex < unevenGroupCount )
groupSize.push_back( meanGroupSize + 1 );
else
groupSize.push_back( meanGroupSize );
}
else
{
if( groupIndex < m_kfold - unevenGroupCount )
groupSize.push_back( meanGroupSize );
else
groupSize.push_back( meanGroupSize + 1 );
}
}

//计算原始样本分到各组的概率
std::vector probability;
probability.reserve( m_kfold );
for( groupIndex = 0; groupIndex < m_kfold; groupIndex++ )
probability.push_back( groupSize[ groupIndex ] * 1.0 / m_classSize.at( classIndex ) );

//计算轮盘组概率
std::vector roundProb;
roundProb.reserve( m_kfold );
double probSum = 0;
for( groupIndex = 0; groupIndex < m_kfold - 1; groupIndex ++ )
{
probSum += probability.at( groupIndex );
roundProb.push_back( probSum );
}
roundProb.push_back( 1.0 );

//将当前类样本进行交叉验证分组
for( int sampleIndex = 0; sampleIndex < m_classSize.at( classIndex ); sampleIndex++ )
{
//随机分组
double randProb = rand() * 1.0 / RAND_MAX;
for( groupIndex = 0; groupIndex < m_kfold; groupIndex++ )
{

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2016-04-15 16:06  KNN\
     文件        4756  2016-04-05 19:11  KNN\CrossValidation.cpp
     文件        1287  2016-04-05 19:10  KNN\CrossValidation.h
     目录           0  2016-04-15 16:06  KNN\Debug\
     文件      126490  2016-04-05 21:01  KNN\Debug\CrossValidation.obj
     文件           0  2016-04-05 21:01  KNN\Debug\CrossValidation.sbr
     文件      697344  2016-04-15 16:06  KNN\Debug\KNN.bsc
     文件      647236  2016-04-15 16:06  KNN\Debug\KNN.exe
     文件      923444  2016-04-15 16:06  KNN\Debug\KNN.ilk
     文件       71644  2016-04-15 16:05  KNN\Debug\KNN.obj
     文件     2598676  2016-04-15 16:06  KNN\Debug\KNN.pch
     文件     1532928  2016-04-15 16:06  KNN\Debug\KNN.pdb
     文件           0  2016-04-15 16:06  KNN\Debug\KNN.sbr
     文件      256044  2016-04-15 16:06  KNN\Debug\Main.obj
     文件           0  2016-04-15 16:06  KNN\Debug\Main.sbr
     文件      266940  2016-04-14 09:57  KNN\Debug\MI.obj
     文件      270653  2016-04-14 09:57  KNN\Debug\MI.sbr
     文件      251747  2016-04-15 16:06  KNN\Debug\ReadData.obj
     文件           0  2016-04-15 16:06  KNN\Debug\ReadData.sbr
     文件      132096  2016-04-15 16:06  KNN\Debug\vc60.idb
     文件      184320  2016-04-15 16:06  KNN\Debug\vc60.pdb
     文件        5447  2016-04-15 16:05  KNN\KNN.cpp
     文件        4635  2016-04-15 16:06  KNN\KNN.dsp
     文件         514  2016-04-05 19:00  KNN\KNN.dsw
     文件        1707  2016-04-14 09:36  KNN\KNN.h
     文件      107520  2016-04-15 16:06  KNN\KNN.ncb
     文件       49664  2016-04-15 16:06  KNN\KNN.opt
     文件        1662  2016-04-15 16:06  KNN\KNN.plg
     文件        3290  2016-04-15 16:06  KNN\Main.cpp
     文件       18575  2016-04-14 10:20  KNN\MI.cpp
     文件        1971  2016-04-14 10:20  KNN\MI.h
............此处省略5个文件信息

评论

共有 条评论