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

2022-10-04 00:06:26 字數 1757 閱讀 5578

k最近鄰(k-nearest neighbor,knn)分類演算法,是乙個理論上比較成熟的方法,也是最簡單的機器學習演算法之一。該方法的思路是:如果乙個樣本在特徵空間中的k個最相似(即特徵空間中最鄰近)的樣本中的大多數屬於某乙個類別,則該樣本也屬於這個類別。knn演算法中,所選擇的鄰居都是已經正確分類的物件。該方法在定類決策上只依據最鄰近的乙個或者幾個樣本的類別來決定待分樣本所屬的類別。 knn方法雖然從原理上也依賴於極限定理,但在類別決策時,只與極少量的相鄰樣本有關。由於knn方法主要靠周圍有限的鄰近的樣本,而不是靠判別類域的方法來確定所屬類別的,因此對於類域的交叉或重疊較多的待分樣本集來說,knn方法較其他方法更為適合。

#include "stdafx.h"

#include

#include

#include

#include

#include

#include

#include

#include

using namespace std;

//樣本特徵結構體

struct sample;

//讀取訓練樣本train.txt,訓練樣本格式:型別名+特徵向量

void readtrain(vector& train, const string& file)

train.push_back(ts); //在train的末尾新增乙個值為ts的元素

} fin.close();}

//讀取測試樣本test.txt,每行都是乙個特徵向量

void readtest(vector& test, const string& file)

test.push_back(ts);

} fin.close();}

//輸出結果,為每乙個向量賦予乙個型別,寫入result.txt中

void writeresult(const vector& test, const string& file)

else

}} map tds;

string type = "";

double weight = 0.0;

//下面for迴圈主要是求出與測試樣本i最鄰近的k個樣本點中大多數屬於的類別,即將其作為測試樣本點i的類別

for (multimap::const_iterator cit = dts.begin(); cit != dts.end(); ++cit) }

test[i].type = type; }}

// 計算歐氏距離

double euclideandistance(const vector& v1, const vector& v2)

return sqrt(distance); }}

/*初始化距離矩陣,該矩陣是根據訓練樣本和測試樣本程式設計客棧而得,

矩陣的行數為測試樣本的數目,列數為訓練樣本的數目,

每一行為乙個測試樣本到各個訓練樣本之間的歐式距離組成的陣列*/

void initdistancematrix(vector程式設計客棧e> >& dm, const vector& train, const vector& test)

dm.push_back(vd); }}

//封裝

void xfxknn(const string& file1, const string& file2, const string& file3, int k)

// 測試

int main()

本文標題: c++基於特徵向量的knn分類演算法

本文位址:

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

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

python使用knn實現特徵向量分類

這是乙個使用knn把特徵向量進行分類的demo。knn演算法的思想簡單說就是 看輸入的sample點周圍的k個點都屬於哪個類,哪個類的點最多,就把sample歸為哪個類。也就是說,訓練集是一些已經被手動打好標籤的資料,knn會根據你打好的標籤來挖掘同類物件的相似點,從而推算sample的標籤。knn...

基於python的kNN分類演算法

knn演算法的核心思想是如果乙個樣本在特徵空間中的k個最相鄰的樣本中的大多數屬於某乙個類別,則該樣本也屬於這個類別,並具有這個類別上樣本的特性。該方法在確定分類決策上只依據最鄰近的乙個或者幾個樣本的類別來決定待分樣本所屬的類別。knn方法在類別決策時,只與極少量的相鄰樣本有關。由於knn方法主要靠周...