91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 6KB
    文件類(lèi)型: .cpp
    金幣: 1
    下載: 0 次
    發(fā)布日期: 2021-06-02
  • 語(yǔ)言: C/C++
  • 標(biāo)簽:

資源簡(jiǎn)介

基于KNN實(shí)現(xiàn)的手寫(xiě)體數(shù)字識(shí)別C++代碼,輸出結(jié)果有混淆矩陣、召回率、訓(xùn)練準(zhǔn)確率、預(yù)測(cè)數(shù)據(jù)輸出等。

資源截圖

代碼片段和文件信息

#include
#include
#include
#include
#include
#define?path?“E:\\vs207\\train.txt“
#define?path2?“E:\\vs207\\test.txt“
#define?predictFile??“E:\\vs207\\predict.txt“

typedef?const?int?cint;
typedef?const?char?cchar;

/*一個(gè)手寫(xiě)數(shù)字的結(jié)構(gòu)體*/
typedef?struct
{
int?pixel[1024];
int?label;
}Digit;

/*一個(gè)有l(wèi)abel的距離結(jié)構(gòu)體*/
typedef?struct
{
float?distance;
int?label;
}Distance;

/*文件路徑+名稱(chēng)*/

/*每個(gè)數(shù)據(jù)集的數(shù)字個(gè)數(shù)*/
cint???ntrain?=?1130;//943
cint????ntest?=?501;//196
cint?npredict?=?50;

float?calDistance(Digit?digit1?Digit?digit2)
/*求距離*/
{
int?i?squareSum?=?0.0;
for?(i?=?0;?i<1024;?i++)
{
squareSum?+=?pow(digit1.pixel[i]?-?digit2.pixel[i]?2.0);
}
return?sqrtf(squareSum);//平方根
}

int?loadDigit(Digit?*digit?FILE?*fp?int?*labels)
/*讀取digit*/
{
int?index?=?0;
for?(index?=?0;?index<784;?index++)
{
if?(!fscanf(fp?“%d“?&(digit->pixel[index])))
{
printf(“FILE?already?read?finish.\n“);
return?-1;
}
}
fscanf(fp?“%d“?&(digit->label));
*labels?=?digit->label;

return?1;
}

void?exchange(Distance?*in?int?index1?int?index2)
/*交換字符串兩項(xiàng)*/
{
Distance?tmp?=?(Distance)in[index1];
in[index1]?=?in[index2];
in[index2]?=?tmp;
}

void?selectSort(Distance?*in?int?length)
/*選擇排序*/
{
int?i?j?min;
int?N?=?length;
for?(i?=?0;?i {
min?=?i;
for?(j?=?i?+?1;?j {
if?(in[j].distance }
exchange(in?i?min);
}
}

int?prediction(int?K?Digit?in?Digit?*train?int?nt)//K?Dtest[itest]?Dtrain?ntrain?943
/*利用訓(xùn)練數(shù)據(jù)預(yù)測(cè)一個(gè)數(shù)據(jù)digit*/
{
int?i?it;
Distance?distance[1133];
/*求取輸入digit與訓(xùn)練數(shù)據(jù)的距離*/
for?(it?=?0;?it {
distance[it].distance?=?calDistance(in?train[it]);
distance[it].label?=?train[it].label;
}
/*給計(jì)算的距離排序(選擇排序)*/
int?predict?=?0;
int?b0[10]?=?{?0?};

selectSort(distance?nt);
for?(i?=?0;?i {
//predict?+=?distance[i].label;
switch?(distance[i].label)
{
case?0:
b0[0]++;
break;
case?1:
b0[1]++;
break;
case?2:
b0[2]++;
break;
case?3:
b0[3]++;
break;
case?4:
b0[4]++;
break;
case?5:
b0[5]++;
break;
case?6:
b0[6]++;
break;
case?7:
b0[7]++;
break;
case?8:
b0[8]++;
break;
case?9:
b0[9]++;
break;
default:
break;
}
}
int?max?=?0;
for?(int?m?=?0;?m?
if?(b0[m]?>=?max)?{
max?=?b0[m];
predict?=?m;
}
}
return?predict;

}
void?knn_classifiy(int?K)
/*用測(cè)試數(shù)據(jù)集進(jìn)行測(cè)試*/
{
printf(“knn_arithmetic_begin....\n“);
clock_t?startfinish?aa?dd;
int?i;
FILE?*fp;

/*讀入訓(xùn)練數(shù)據(jù)*/
int?trainLabels[ntrain];
int?trainCount[10]?=?{?0?};
Digit?*Dtrain?=?(Digit*)calloc(ntrain??sizeof(Digit));
?? fp?=?fopen(path?“r“);?//讀文件
?? printf(“l(fā)oad?training?digits...\n“);
start?=?clock();
for?(i?=?0;?i {
loadDigit(&Dtrain[i]?fp?&trainLabels[i]);

trainCount[Dtrain[i

評(píng)論

共有 條評(píng)論

相關(guān)資源