算法-大家帮忙看看我这段代码逻辑是不是有问题?

问题描述

大家帮忙看看我这段代码逻辑是不是有问题?

#include "stdafx.h"
#include "KNN.h"
#include
#include
#include
#include
//设置K值
void KNN::setK()
{
// cout << "请输入K:";
// cin >> K;
}

//读入训练集数据,100组数据,108维,10类
bool KNN::ReadTraining(char *filename)
{
ifstream fin;
fin.open(filename,ios::in);

if( fin.fail() )
{
cerr << "File open error1." << endl;
return false;
}

for(int i=0; i
{
Traindata m_tmp;
for(int j=0; j
{
double dm_tmp;
fin >> dm_tmp;
m_tmp.first.push_back(dm_tmp);
}
// int nm_tmp;

if(i<10)
m_tmp.second = 0;
else if(i<20)
m_tmp.second = 1;
else if(i<30)
m_tmp.second = 2;
else if(i<40)
m_tmp.second = 3;
else if(i<50)
m_tmp.second = 4;
else if(i<60)
m_tmp.second = 5;
else if(i<70)
m_tmp.second = 6;
else if(i<80)
m_tmp.second = 7;
else if(i<90)
m_tmp.second = 8;
else if(i<100)
m_tmp.second = 9;

training_data.push_back( m_tmp );

}
return true;

}

//读入测试集数据,8组6维数据
bool KNN::ReadTest(char *filename)
{
ifstream fin(filename);
if( fin.fail() )
{
cerr << "File open error." << endl;
return false;
}

for(int i=0; i
{
vector m_tmp;
test_data.push_back(m_tmp);
for(int j=0; j
{
double dm_tmp;
fin >> dm_tmp;
test_data[i].push_back( dm_tmp );
}
}
return true;
}

double KNN:: computeEuclidDistance(vector&a, vector &b)
{
double distance = 0.0;
for(int i=0; i<108; i++)
{
distance += ( a[i]-b[i] ) * ( a[i]-b[i] );
}
return distance;
}

//KNN分类函数
int KNN::classify(vector & testData)
{
vector< Dis > distances;
//计算testData到训练集每个点的欧几里得距离
for(int i=0; i<test_data.size(); i++)
{
Dis m_tmp;
m_tmp.first = computeEuclidDistance(testData, training_data[i].first);
//记录分类号
m_tmp.second = training_data[i].second;
distances.push_back(m_tmp);
}

//对计算出的欧几里得距离排序,从小到大
sort(distances.begin(),distances.end());

//对于前K个,即距离最近的k个点,返回包含点数最多的分类号,即该点的分类
vector poll( 10, 0 );
for(i=0; i<5; i++)//K=5
{
int vot = distances[i].second;
poll[vot] ++;
}
int res = -1;
int vots = -1;
for(i=1; i<=10; i++)
{
if(vots < poll[i])
{
vots = poll[i];
res = i;
}
}

CString str,str1;
for(i=0;i<8;i++)
{
// if(poll[i]=8)
str.Format("%d ",poll[i]);

    str1+=str;
}

::MessageBox(NULL,str1,"识别结果",NULL);
 return res;

}
//打印测试集判断结果
void KNN::PrintTestResult(char *filename)
{
ofstream fout(filename);

for(int i=0; i<test_data.size(); i++)
{
    int clsf = classify(test_data[i]);
    for(int j=0; j<test_data[i].size(); j++)
    {
        fout << test_data[i][j] << "t";
    }

    fout << clsf << endl;
}
fout.close();
cout << "结果数据保存在文件out1.txt中,请查看。n" ;

}

解决方案

http://blog.csdn.net/xlm289348/article/details/8876353
对比着看看,你一说逻辑错误,我就必须在了解算法基础看,不容易短时间看出

解决方案二:

新手,来凑热闹,只看不说话

解决方案三:

不错,写得挺好。恭喜

时间: 2024-10-31 17:13:22

算法-大家帮忙看看我这段代码逻辑是不是有问题?的相关文章

帮忙看下这段代码,为啥那个afafafa没有打印出来?

问题描述 帮忙看下这段代码,为啥那个afafafa没有打印出来? public class Demoe { public void f() { System.out.println("Throwing MyException from f()"); } public static void main(String[] args) { Demoe aa = null; try { aa.f(); throw new NullPointerException("afafafa&q

语言-新手求帮忙看下这段代码的数据溢出问题,没有C币理解下(我是在CodeBlock10.05下运行的)

问题描述 新手求帮忙看下这段代码的数据溢出问题,没有C币理解下(我是在CodeBlock10.05下运行的) #include #include #include unsigned int Ex_secret[30]={11,4,120,75,170,204,90,59,78,49,//用0~255的数表示8位2进制,一共240位 148,248,190,137,0,9,17,91,174,105,45,124,177,205,57,97,194,155,120,36}; unsigned in

java后台逻辑问题-求大神帮忙解释下这段代码。

问题描述 求大神帮忙解释下这段代码. 这是一个从表添加页面的代码.currentx是当前页数.我想问下 st st1 st2 st3是什么意思,就是split(:):这个方法我不是很清楚什么意思,还有下面的!ss.equals("t") t是什么. 传参什么的我晓得. @RequestMapping("/addProcess.do") public String addProcessMaintenance(String currentx, String ids, S

redirect-求大神帮忙解释下面这段代码,尤其是问号后边的,谢谢啦

问题描述 求大神帮忙解释下面这段代码,尤其是问号后边的,谢谢啦 求大神帮忙解释下面这段代码,尤其是问号后边的,谢谢啦 <result type="redirect" name="success">/Module/QuZhengGuiZe/List.action?pageLink=${pager.pageLinkUrl}</result> 解决方案 返回结果为success url地址重定向( type="redirect"

在指定的时间段清除定时器,大家帮忙看一下这段代码有什么问题?

问题描述 在指定的时间段清除定时器,大家帮忙看一下这段代码有什么问题? <script type='text/javascript'> var date_time = new Date(); var current_time = date_time.getHours() + ":" + date_time.getMinutes() + ":" + date_time.getSeconds(); if (current_time >= '7:20:0

ashx出现错误,帮忙看下这段代码并发的时候有没有问题

问题描述 try{answer=int.Parse(context.Request.Params["answer"].ToString());}catch{answer=0;}try{if(HttpContext.Current.Request.ServerVariables["HTTP_VIA"]!=null){ip=HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR&quo

求助高手帮忙讲解一下这段代码

问题描述 publicstaticstringcertifyReturnArray(stringdecryptString){stringtext4;try{stringtext1="DcmsTank";decryptString=decryptString.Substring(10);byte[]buffer1=Encoding.UTF8.GetBytes(text1);byte[]buffer2=DcmsAuth.Keys;byte[]buffer3=Convert.FromBas

帮忙看一下这段代码,WINCE下开发

问题描述 写了如下一小段程序,在wince下开发,用模拟器,运行的时候,提示SQLiteerror:nosuchtabletb_isbncj....望各位高手帮忙看一下usingSystem;usingSystem.Linq;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Text;usingSystem.Windows.Form

高手帮忙看下,这段代码有什么问题...谢谢

问题描述 以下是一个实现GridView表格嵌套的代码......我用AccessDataSource连接Access数据库时运行正常,换成SqlDataSource后运行报错,错误提示也莫名其妙:"第一行:'?'附近有错误"---TEST2.ASPX代码<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="TEST2.aspx.cs"Inherits="TES