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

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

C++單刷《機器學習實戰》——k-近鄰算法

2019-11-06 07:13:50
字體:
來源:轉載
供稿:網友

    數學系研二渣碩一枚,最早接觸機器學習還是在研究生一年級的模式識別課程上,發現大部分機器學習的書籍都是采用Python語言,當然Python在數據分析和矩陣計算方面確實會有很大的優勢,對于缺乏編程基礎又想要快速入門的同學,Python確實是首選。而從本系列開始,我將主要用C++將《機器學習實戰》這本書刷一遍,旨在加深對算法理解的同時提高編程能力,也希望能夠為想入坑機器學習,同時又熱愛C++的人提供一些參考。

    每一篇的開始會有一個簡單的算法描述,不會將原書的Python的代碼照搬過來,想了解具體的可以參考《機器學習實戰》原著,CSDN上也有電子版可供下載。

        現學現賣,希望我能夠堅持得下去。

算法概述:kNN算法采用測量不同特征值之間的距離方法進行分類。kNN算法在能夠工作之前需要先獲取大量樣本數據進行訓練,每一個樣本數據事先都存在標簽。輸入沒有標簽的數據后,將新數據的每個特征與樣本集中的特征進行比較,然后提取樣本集中最相似數據的分類標簽。一般來說,我們只選擇樣本數據集中前k個最相似的數據標簽,這就是kNN算法中k的出處,通常k是不大于20的整數。最后,我們選擇k個最相似數據中出現次數最多的分類,作為新數據的分類。

 

現在我們嘗試一個簡單的范例,對二維坐標系中的點進行分類,定義一個4×2二維數組group代表坐標系中4個點的坐標,相應的標簽labels為一個字符串數組,labels索引對應group中每一行的索引。

 

double group[4][2] = { { 1.0, 1.1 }, { 1.0, 1.0 }, { 0, 0 }, { 0, 0.1 } };

string labels[4] = { "A", "A", "B", "B" };

 

在C++中,將樣本集定義為一個結構體似乎是更為合理的選擇,不過原書中都是矩陣計算,為描述方便,還是采用類似矩陣的數組。

在獲得樣本集后,需要采用kNN對無標簽的數據進行分類,具體步驟如下:

(1)計算樣本集中的點與當前點的距離;

(2)按照距離遞增次序排序;

(3)選取與當前點距離最小k個點;

(4)確定前k個點所在類別的出現頻率;

(5)返回前k個點出現頻率最高的類別作為當前點的分類。

     相應的代碼清單如下:

string classify(double* inX,double* dataSet,string labels[],int k,int size,int dataSetSize)

//kNN分類算法

//inX:未分類的輸入數據,dataSet:樣本集,labels:標簽,k:k值,size:數據的特征數量,dataSetSize:樣本集數量 

{

double sum = 0;

double* diff_array = new double[size];

double* diff_all = new double[dataSetSize];

int* sorted_index = new int[dataSetSize];

string label;

map<string, int> label_count;

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

//計算當前點與各樣本點的歐式距離,并存入數組diff_array

{

sum = 0;

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

{

diff_array[j] = *(inX + j) - *(dataSet + i*size + j);

sum += (diff_array[j] * diff_array[j]);

}

diff_all[i] = sqrt(sum);

}

//排序,并返回排序后的原數組索引

sortIndex(diff_all, sorted_index, dataSetSize);

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

//計算前k個索引對應標簽的出現次數,存入關聯容器label_count

{

label = labels[sorted_index[i]];

++label_count[label];

}

 

//找出出現次數最多的標簽,返回

auto map_it = label_count.begin();

label = map_it->first;

int max_count = map_it->second;

for (; map_it != label_count.end(); map_it++)

{

if (max_count < map_it->second)

{

max_count = map_it->second;

label = map_it->first;

}

}

 

delete diff_array;

delete diff_all;

delete sorted_index;

 

return label;

}

以上程序使用歐氏距離公式,計算兩個點xA和xB之間的距離:

 

計算當前點與所有樣本點的距離后,將距離由小到大進行排序,找到最近的k個點,然后返回k個點中出現頻率最高的標簽,這是基本思路。

在對距離進行排序并按原數組的索引返回的時候出現了一些小麻煩,在python中只要一個命令就能解決的問題,我不知道在C++中是否有同樣方便好用的排序函數,不過以提高編程能力為目標,我本人倒不介意重復造車輪子的過程,排序代碼如下:

void sortIndex(double* data, int* sorted_index2, int n)

//排序,并返回排序后的原數組索引

//data:原始數組,sorted_index2:排序后的原數組索引,n:數組大小

{

int index = 0;

int* sorted_index = new int[n];

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

{

index = 0;

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

{

if (data[i] > data[j])

index++;

else if (data[i] == data[j] && i > j)

index++;

}

sorted_index[i] = index;

}

 

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

{

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

{

if (i == sorted_index[j])

sorted_index2[i] = j;

}

}

 

delete sorted_index;

}

 

代碼完成后,在main函數中進行調用測試:

int main()

{

string result;

string line;

double point[2];

cout << "Please input the coodinate of the pixel" << endl;

while (getline(cin, line))

{

istringstream record(line);

record >> point[0];

record >> point[1];

result = classify(point, &group[0][0], labels, 3, 2, 4);

cout << "The result is: " << result << endl;

cout << "Please input the coodinate of the pixel" << endl;

}

return 0;

}

運行結果:

 

 

使用kNN算法改進約會網站的配對效果

海倫在使用約會網站尋找約會對象的過程中,經過總結可以把交往過的人分為三種類型:

不喜歡的人

魅力一般的人

極具魅力的人

海倫希望我們的算法可以幫助她將匹配對象分到確切的分類中,為此她收集了一批約會對象的用戶數據,每一個約會對象包含3個特征:每年的飛行里程數

游戲所耗時間百分比

每周消費的冰淇淋公升數

每一條樣本數據都已經做好了標簽,樣本數據如下:

 

為了應用已經實現的kNN算法幫助海倫進行分類,我們先要讀取文本數據并轉化為程序所需要的類型。然后應用以上的classify函數進行分類。

數據文件里共有1000條數據,選取前100條數據為測試集對算法進行測試,發現當k=3時,錯誤率為5%

 

利用全體數據作為樣本集對當個數據進行分類:

    

查看完整代碼:

http://blog.csdn.net/u014080185/article/details/60467308

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久精品这里热有精品| 亚洲欧洲在线视频| 欧美猛少妇色xxxxx| 日本一区二区在线免费播放| 中文字幕日韩在线观看| 91精品国产乱码久久久久久蜜臀| 日韩av电影中文字幕| 国产精品视频一区二区三区四| 日韩中文字幕在线精品| 精品中文字幕在线| 欧美激情一区二区三区高清视频| 久久精品在线播放| 精品综合久久久久久97| 久久成人国产精品| 国产一区二区三区在线| 亚洲第一区在线| 国产欧美日韩专区发布| 全亚洲最色的网站在线观看| 日韩视频免费观看| 91久久在线观看| 亚洲一级一级97网| 91性高湖久久久久久久久_久久99| 日韩av日韩在线观看| 亚洲曰本av电影| 国产成人精品视频| 日韩国产在线播放| 日韩中文字幕国产精品| 秋霞av国产精品一区| 最近中文字幕2019免费| 91免费高清视频| 国产玖玖精品视频| 菠萝蜜影院一区二区免费| 欧美激情精品久久久久久蜜臀| 九九热最新视频//这里只有精品| 久久久久久中文| 日韩国产在线播放| 欧美激情va永久在线播放| 奇米成人av国产一区二区三区| 日本精品在线视频| 中文字幕亚洲一区| 亚洲最新中文字幕| 2019中文字幕免费视频| 欧美日韩精品在线观看| 日本电影亚洲天堂| 国产欧美一区二区白浆黑人| 国产一区二区日韩精品欧美精品| 欧美老女人www| 欧美日韩成人黄色| 97国产精品视频人人做人人爱| 日韩一区在线视频| 国产精品观看在线亚洲人成网| 久久香蕉国产线看观看网| 亚洲精品日韩欧美| 激情成人中文字幕| 国产精品夜间视频香蕉| 26uuu另类亚洲欧美日本一| 久久精品亚洲一区| 亚洲天堂开心观看| 亚洲一区二区三区在线视频| 浅井舞香一区二区| 中文字幕精品国产| 亚洲护士老师的毛茸茸最新章节| 日本久久久a级免费| 亚洲日韩欧美视频一区| 自拍偷拍亚洲区| 亚洲社区在线观看| 国产伦精品一区二区三区精品视频| 91tv亚洲精品香蕉国产一区7ujn| 大胆人体色综合| 国产精品大片wwwwww| 日韩中文字幕在线视频播放| 国产日韩欧美另类| 欧美大肥婆大肥bbbbb| 国产精品久久久久久久久久久不卡| 亚洲第一区中文字幕| 在线电影av不卡网址| 亚洲a级在线播放观看| 成人午夜激情免费视频| 精品视频—区二区三区免费| 97精品视频在线| 午夜精品理论片| 在线播放国产一区中文字幕剧情欧美| 成人春色激情网| 欧美日韩国产麻豆| 日韩欧美第一页| 久久久久久久久久久国产| 欧美黑人视频一区| 亚洲黄色av女优在线观看| 日韩经典中文字幕在线观看| 久久久久亚洲精品国产| 欧美精品电影在线| 亚洲天天在线日亚洲洲精| 亚洲精品免费在线视频| 亚洲女同精品视频| 久久久视频在线| 精品久久久久国产| 91久久夜色精品国产网站| 国产一区二区欧美日韩| 国产偷亚洲偷欧美偷精品| 亚洲国产美女精品久久久久∴| 久久久精品电影| 欧美日韩在线视频观看| 日韩欧美在线一区| 黄色成人在线免费| 奇米成人av国产一区二区三区| 色偷偷91综合久久噜噜| 成人天堂噜噜噜| 国产日韩精品一区二区| 2021国产精品视频| 亚洲free嫩bbb| 亚洲国产精品专区久久| 国产精品啪视频| 精品精品国产国产自在线| 日本精品视频网站| 日韩在线免费高清视频| 亚洲欧洲视频在线| 日韩免费中文字幕| 欧美成人亚洲成人| 久久久噜噜噜久久久| 精品国产依人香蕉在线精品| 欧美一级大胆视频| 98精品国产高清在线xxxx天堂| 国产精品久久电影观看| 久久久精品电影| 成人国产精品av| 97视频在线播放| 成人午夜激情免费视频| 视频一区视频二区国产精品| 亚洲国产精品中文| 久久久精品一区二区| 欧美日韩国产一区中文午夜| 国产精品永久在线| 日韩综合视频在线观看| 欧美亚洲另类激情另类| 国产综合香蕉五月婷在线| 欧美国产日韩一区| 97在线观看视频| 中文字幕欧美精品在线| 91在线免费观看网站| 亚洲va久久久噜噜噜久久天堂| 欧美丰满少妇xxxxx| 国模精品系列视频| 亚洲性线免费观看视频成熟| 国产精品久久久久久av福利软件| 亚洲的天堂在线中文字幕| 精品久久中文字幕久久av| 另类专区欧美制服同性| 亚洲香蕉伊综合在人在线视看| 97香蕉久久超级碰碰高清版| www.亚洲成人| 欧美精品九九久久| 91福利视频在线观看| 国产精品毛片a∨一区二区三区|国| 成人乱人伦精品视频在线观看| 欧美性猛交xxxx富婆弯腰| 久久久免费av| 久久精品一区中文字幕| 亚洲精品国产精品久久清纯直播| 欧美精品做受xxx性少妇| www.欧美三级电影.com| 国产精品三级美女白浆呻吟| 国产精品亚洲欧美导航| 国产日韩精品一区二区| 亚洲国产欧美一区二区丝袜黑人|