亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C++基于特征向量的KNN分類算法

2020-05-23 13:21:44
字體:
來源:轉載
供稿:網友

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

#include "stdafx.h"#include <iostream>#include <fstream>#include <sstream>#include <string>#include <vector>#include <set>#include <map>#include <cmath> using namespace std; //樣本特征結構體struct sample{ string type; vector<double> features;}; //讀取訓練樣本train.txt,訓練樣本格式:類型名+特征向量void readTrain(vector<sample>& train, const string& file){ ifstream fin(file.c_str()); //file是存儲希望讀寫的文件名的string對象,fin是讀的流 if(!fin) { cerr<<"Unable to open the input file: "<<file<<endl; exit(1); }  string line;  double d=0.0; while(getline(fin,line)) //fin是讀入流,getline從輸入流fin讀入一行到line { istringstream stream(line); //bind to stream to the line we read sample ts; stream>>ts.type; while(stream>>d) //read a word from line {  ts.features.push_back(d); //在trains.features的末尾添加一個值為d的元素 } train.push_back(ts); //在train的末尾添加一個值為ts的元素 } fin.close();} //讀取測試樣本test.txt,每行都是一個特征向量void readTest(vector<sample>& test, const string& file){ ifstream fin(file.c_str()); if(!fin) { cerr<<"Unable to open the input file: "<<file<<endl; exit(1); }  string line; double d=0.0; while(getline(fin,line)) { istringstream stream(line); //bind to stream to the line we read sample ts; while(stream>>d) {  ts.features.push_back(d); } test.push_back(ts); } fin.close();} //輸出結果,為每一個向量賦予一個類型,寫入result.txt中void writeResult(const vector<sample>& test, const string& file){ ofstream fout(file.c_str()); if(!fout) { cerr<<"Unable to write the input file: "<<endl; exit(1); }  for(vector<sample>::size_type i=0;i!=test.size();++i) { fout << test[i].type << '/t'; for(vector<double>::size_type j=0;j!=test[j].features.size();++j) {  fout<<test[i].features[j]<<' '; } fout<<endl; }} //KNN算法的實現void knnProcess(vector<sample>& test, const vector<sample>& train, const vector<vector<double> >& dm, unsigned int k){ for (vector<sample>::size_type i = 0; i != test.size(); ++i) { multimap<double, string> dts; //保存與測試樣本i距離最近的k個點  for (vector<double>::size_type j = 0; j != dm[i].size(); ++j) {  if (dts.size() < k) //把前面k個插入dts中  {  dts.insert(make_pair(dm[i][j], train[j].type)); //插入時會自動排序,按dts中的double排序,最小的排在最后  }  else  {  multimap<double, string>::iterator it = dts.end();  --it;   if (dm[i][j] < it->first) //把當前測試樣本i到當前訓練樣本之間的歐氏距離與dts中最小距離比較,若更小就更新dts  {   dts.erase(it);   dts.insert(make_pair(dm[i][j], train[j].type));  }  } } map<string, double> tds; string type = ""; double weight = 0.0; //下面for循環主要是求出與測試樣本i最鄰近的k個樣本點中大多數屬于的類別,即將其作為測試樣本點i的類別 for (multimap<double, string>::const_iterator cit = dts.begin(); cit != dts.end(); ++cit) {  // 不考慮權重的情況,在 k 個樣例中只要出現就加 1  // ++tds[cit->second];   // 這里是考慮距離與權重的關系,距離越大權重越小  tds[cit->second] += 1.0 / cit->first;  if (tds[cit->second] > weight)  {  weight = tds[cit->second];  type = cit->second; //保存一下類別  } } test[i].type = type; }} // 計算歐氏距離double euclideanDistance(const vector<double>& v1, const vector<double>& v2){ if(v1.size() != v2.size()) { cerr<<"Unable to get a distance! "<<endl; }  else { double distance = 0.0;  for (vector<double>::size_type i = 0; i != v1.size(); ++i) {  distance += (v1[i] - v2[i]) * (v1[i] - v2[i]); } return sqrt(distance); }} /*初始化距離矩陣,該矩陣是根據訓練樣本和測試樣本而得,矩陣的行數為測試樣本的數目,列數為訓練樣本的數目,每一行為一個測試樣本到各個訓練樣本之間的歐式距離組成的數組*/void initDistanceMatrix(vector<vector<double> >& dm, const vector<sample>& train, const vector<sample>& test){ for (vector<sample>::size_type i = 0; i != test.size(); ++i) { vector<double> vd; for (vector<sample>::size_type j = 0; j != train.size(); ++j) {  vd.push_back(euclideanDistance(test[i].features, train[j].features)); } dm.push_back(vd); }} //封裝void xfxKnn(const string& file1, const string& file2, const string& file3, int k){ vector<sample> train,test; readTrain(train, file1.c_str()); readTest(test, file2.c_str()); vector< vector<double> > dm; initDistanceMatrix(dm, train, test); knnProcess(test, train, dm, k); writeResult(test, file3.c_str());} // 測試int main(){ xfxKnn("train.txt", "test.txt", "result.txt", 5); return 0;}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕久久精品| 国产精品美女呻吟| 国产美女91呻吟求| 成人日韩在线电影| 日韩激情av在线免费观看| 久久香蕉国产线看观看av| 欧美激情网站在线观看| 欧美高清一级大片| 成人久久精品视频| 欧美老女人在线视频| 欧美一性一乱一交一视频| 亚洲色图校园春色| 欧美日韩不卡合集视频| 国产一区红桃视频| 国产精品久久久久久久久久| 亚洲天堂av图片| 成人97在线观看视频| 成人动漫网站在线观看| 久久亚洲精品一区| 欧美精品成人在线| 国模精品视频一区二区三区| 91精品国产91久久久久| 久久久久久久久电影| 欧美大片欧美激情性色a∨久久| 国产精品扒开腿做爽爽爽视频| 日韩亚洲第一页| 亚洲成人精品视频| 久久久精品视频在线观看| 欧美大人香蕉在线| 国产美女久久精品香蕉69| 久久激情视频免费观看| 国产精品99久久99久久久二8| 亚洲美女在线视频| 欧美大片免费观看在线观看网站推荐| 国产精品丝袜久久久久久高清| 97视频com| 久久香蕉频线观| 欧美日韩激情网| 中文字幕亚洲第一| 97精品国产aⅴ7777| 午夜精品久久久99热福利| 欧美午夜丰满在线18影院| 国产精品亚洲аv天堂网| 91po在线观看91精品国产性色| 中文字幕精品www乱入免费视频| 日韩免费中文字幕| 中文字幕欧美亚洲| 国产精品丝袜白浆摸在线| 亚洲欧美日韩精品| 成人xvideos免费视频| 国产一区二区激情| 91网站免费看| www.精品av.com| 欧美日韩在线视频一区二区| 国产亚洲精品高潮| 国产精品国语对白| 精品色蜜蜜精品视频在线观看| 国产精品无码专区在线观看| 国产+成+人+亚洲欧洲| 亚洲人成网站999久久久综合| 日韩欧美精品免费在线| 日韩一区二区在线视频| 久久久精品一区二区| 久久久久久久国产精品| 欧美极度另类性三渗透| 成人免费在线视频网址| 亚洲自拍小视频免费观看| 欧美激情视频一区二区| 亚洲va久久久噜噜噜久久天堂| 2019国产精品自在线拍国产不卡| 国产精品成av人在线视午夜片| 亚洲国产精彩中文乱码av在线播放| 国内精品久久久久久| 97精品视频在线观看| 91精品国产一区| 这里只有视频精品| 精品福利免费观看| 国产精品视频地址| 日韩成人av一区| 色综合久久久888| 亚洲精品网站在线播放gif| 国产精品久久久久久久久久| 中文字幕精品视频| 91美女高潮出水| 国产精品欧美日韩| 国内精品久久久久久久久| 91精品在线观| 久久久视频精品| 欧美视频中文字幕在线| 成人疯狂猛交xxx| 国产日本欧美一区二区三区在线| 欧美最猛黑人xxxx黑人猛叫黄| 亚洲天堂男人天堂女人天堂| 亚州精品天堂中文字幕| 久久99精品国产99久久6尤物| 国产在线拍揄自揄视频不卡99| 亚洲第一精品久久忘忧草社区| 日韩不卡中文字幕| 亚洲一区二区三区成人在线视频精品| 亚洲国产欧美在线成人app| 国产精品久久久久久久久久新婚| 精品国产31久久久久久| 91久久久久久久久| 亚洲欧美第一页| 97**国产露脸精品国产| 亚洲人成网站999久久久综合| 97成人在线视频| 日韩在线视频免费观看高清中文| 亚洲福利在线观看| 久久久久久久电影一区| 成人黄在线观看| 亚洲欧美国产精品va在线观看| 92看片淫黄大片欧美看国产片| 色偷偷av一区二区三区乱| 国产欧美久久一区二区| 日本亚洲欧洲色α| 欧美激情久久久| 日本久久久久亚洲中字幕| 亚洲欧美国产精品久久久久久久| 国产亚洲精品久久久久久牛牛| 精品中文字幕乱| 精品国偷自产在线| 欧美日韩ab片| 黑人巨大精品欧美一区二区三区| 欧美成人免费全部观看天天性色| 668精品在线视频| 成人免费看片视频| 欧美性高潮在线| 亚洲国产高清高潮精品美女| 韩国精品美女www爽爽爽视频| 亚洲免费高清视频| 97碰碰碰免费色视频| 91国产中文字幕| 亚洲欧美日韩视频一区| 国产噜噜噜噜噜久久久久久久久| 欧美理论在线观看| 久青草国产97香蕉在线视频| 国产成人精品视频在线| 欧美性感美女h网站在线观看免费| 久久久精品欧美| 亚洲国产成人久久| 国内精品一区二区三区| 久久久免费高清电视剧观看| 久久久久久九九九| 亚洲精品国产综合久久| 国产精品久久国产精品99gif| 亚洲va久久久噜噜噜| 一本一本久久a久久精品牛牛影视| 国产精品久久99久久| 亚洲精品国产品国语在线| 国产精品电影在线观看| 伊人久久五月天| 欧美人与性动交a欧美精品| 亚洲人成在线播放| 日韩一二三在线视频播| 欧美成年人视频网站欧美| 久久久久久久久久婷婷| 欧美成在线观看| 国产性猛交xxxx免费看久久| 51久久精品夜色国产麻豆| 精品日韩中文字幕| 亚洲精品福利在线| 国产在线精品成人一区二区三区| 亚洲日本成人女熟在线观看|