KNN分類程式(C 版本)

2021-08-03 02:39:22 字數 2792 閱讀 9950

字元的特徵向量放在txt檔案中,從檔案提取特徵向量實現分類

/*

* knn.

輸入:第一行輸入依次為:k(k<=10000),特徵向量的長度l(l<=100),訓練資料行數m(m>k, m<=10000),測試資料行數n(n<=10000)為測試資料行數。

之後是m行訓練資料和n行測試資料。每行中資料使用空格分隔。

輸出:**類別

測試資料:

3 5 16 2

0.19 0.04 0.06 0.22 0.11 a

0.28 0.42 0.38 0.39 0.44 b

0.71 0.61 0.54 0.52 0.54 c

0.98 0.82 0.92 0.98 0.97 d

0.05 0.03 0.15 0.01 0.11 a

0.33 0.29 0.33 0.47 0.27 b

0.72 0.52 0.61 0.71 0.68 c

0.78 0.86 0.91 1.0 0.76 d

0.01 0.17 0.14 0.15 0.2 a

0.44 0.36 0.32 0.32 0.35 b

0.67 0.65 0.57 0.58 0.52 c

0.87 0.92 0.8 0.83 0.77 d

0.01 0.11 0.14 0.12 0.07 a

0.33 0.43 0.43 0.45 0.38 b

0.57 0.54 0.75 0.7 0.64 c

0.9 0.94 0.83 0.96 0.77 d

0.29 0.29 0.42 0.36 0.27

0.56 0.67 0.71 0.66 0.7

輸出:bc*/

#include

#include

#include

#include

#include

#include

using

namespace

std;

struct sample ;

bool cmp(sample a, sample b)

void readtraindata(vector

> &traindata, vector

&trainlabel, int l, int m)

for (int i = 0; i < m; ++i)

traindata.push_back(linedata);

// 讀入訓練資料標註

char label;

infile>>label;

// cin >> label;

// cout}

infile.close(); //關閉檔案輸入流

}void readtestdata(vector

> &testdata,vector

&testlabel, int l, int n)

//讀測試資料

for (int i = 0; i < n; ++i)

testdata.push_back(linedata);

//讀取測試標註

infile>>tlabel;

// cin >> label;

cout

testlabel.push_back(tlabel);

}infile.close(); //關閉檔案輸入流

} double calcdistance(vector

data1, vector

data2)

void knn(vector

> traindata, vector

> testdata,

vector

trainlabel, vector

testlabel,int k, int m, int n)

sort(distances.begin(), distances.end(), cmp);//sort排序

// 選擇前k個樣本的距離,確定前k個點所在類別出現頻率。

map labelmap;

for (int j = 0; j < k; ++j)

// 找到labelmap中值最大的類別

int maxval = 0;

char reslabel;

for (map

::iterator it = labelmap.begin(); it != labelmap.end(); ++it)

if (it->second > maxval)

// 輸出類別。

cout

<< reslabel << endl;//測試

//識別率

x++;//單張字元識別率

if( testlabel[i] == reslabel)

if(x1==6)

//整張字元識別率

if( testlabel[i] == reslabel)

// cout<}

accuracy=d/n;

cout

<<"signal character accuracy is "

<< accuracy << endl;

allaccuracy=allaccuracy*6/n;

cout

<<"the whole picture recognition rate is "

<< allaccuracy << endl;

} int main()

碧秀分類程式 v1 4

碧秀分類程式採用.net4.0 sql2008架構,碧秀分類以簡潔的方式展示發布資訊,前台支援自定義模板,模板語法強大,並且具有很強大的擴充套件性,基本執行環境 net4.0及以上 mssql2005及以上 iis7及以上 install 資料夾為初始程式安裝資料夾,使用完後請自行刪除該資料夾 ap...

C 基於特徵向量的KNN分類演算法

k最近鄰 k nearest neighbor,knn 分類演算法,是乙個理論上比較成熟的方法,也是最簡單的機器學習演算法之一。該方法的思路是 如果乙個樣本在特徵空間中的k個最相似 即特徵空間中最鄰近 的樣本中的大多數屬於某乙個類別,則該樣本也屬於這個類別。knn演算法中,所選擇的鄰居都是已經正確分...

C 基於特徵向量的KNN分類演算法

k最近鄰 k nearest neighbor,knn 分類演算法,是乙個理論上比較成熟的方法,也是最簡單的機器學習演算法之一。該方法的思路是 如果乙個樣本在特徵空間中的k個最相似 即特徵空間中最鄰近 的樣本中的大多數屬於某乙個類別,則該樣本也屬於這個類別。knn演算法中,所選擇的鄰居都是已經正確分...