xxxx18一60岁hd中国/日韩女同互慰一区二区/西西人体扒开双腿无遮挡/日韩欧美黄色一级片 - 色护士精品影院www

  • 大小: 6KB
    文件類型: .cpp
    金幣: 1
    下載: 0 次
    發布日期: 2021-06-02
  • 語言: C/C++
  • 標簽:

資源簡介

基于KNN實現的手寫體數字識別C++代碼,輸出結果有混淆矩陣、召回率、訓練準確率、預測數據輸出等。

資源截圖

代碼片段和文件信息

#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;

/*一個手寫數字的結構體*/
typedef?struct
{
int?pixel[1024];
int?label;
}Digit;

/*一個有label的距離結構體*/
typedef?struct
{
float?distance;
int?label;
}Distance;

/*文件路徑+名稱*/

/*每個數據集的數字個數*/
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)
/*交換字符串兩項*/
{
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
/*利用訓練數據預測一個數據digit*/
{
int?i?it;
Distance?distance[1133];
/*求取輸入digit與訓練數據的距離*/
for?(it?=?0;?it {
distance[it].distance?=?calDistance(in?train[it]);
distance[it].label?=?train[it].label;
}
/*給計算的距離排序(選擇排序)*/
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)
/*用測試數據集進行測試*/
{
printf(“knn_arithmetic_begin....\n“);
clock_t?startfinish?aa?dd;
int?i;
FILE?*fp;

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

trainCount[Dtrain[i

評論

共有 條評論

相關資源