资源简介
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个文件信息
- 上一篇:图书管理系统C++数据结构
- 下一篇:MFC与SQL Server
评论
共有 条评论