日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

人工智能算法--KNN算法(C++实现)

發布時間:2025/4/16 c/c++ 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 人工智能算法--KNN算法(C++实现) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

# 上面的圖片是在網上隨手翻到的-很符合主題-侵權刪 #

蹭熱度ing
Knn算法,用于分類。
通過得到邏輯上的相近程度實現判斷,K值的大小體現的是一個容錯的過程。
提高預測準確度的方法:
調整K值,找到更好的K值(別太大,也別太小)
數據的預處理(有大佬說過,數據的預處理會比算法本身更重要)
邏輯距離的選擇(歐氏距離,閔式距離,切比雪夫距離….)
分類,就是一種選擇的過程。將事件抽象為狀態點。根據狀態點之間的距離,進行度量。(如果不懂我在講什么,建議把‘動態規劃’的算法自己再研究深一點)


下面放上自己用c++做的Knn算法(采用歐氏距離,k值選取為1(并不是一個好的選擇,但是我真的很不想自己手工去打那么多的數據集emmmmm)(rand函數可以參數隨機數,要是自己沒事干了,可以去用那個玩一下))


下面那個算法,還是不那么好的,要是可以的話,可以多選大點的K值,然后再做一個概率的統計。再列一個表。(但C++玩這個確實沒意思)
main函數是隨手寫的一個測試函數,感覺還能湊活著用。
這是用Python寫的KNN算法,會方便很多!點擊即可看


代碼如下:

#include <iostream> using namespace std;#include <cmath> #include <cstring> char classsify_KNN(int* INX, int **DataSet, int DataSetlen, char *label, int k) // 限定數據規模 {int *b = new int[DataSetlen];//設置INX是5列的,DataSet也是 for (int i = 0; i < DataSetlen; ++i) {double sum = 0;for (int j = 0; j < 5; ++j) {sum += (DataSet[i][j] - INX[j])* (DataSet[i][j] - INX[j]);}b[i] = sqrt(sum); }//=== 接下來用改寫選擇排序進行減枝,降低時間復雜度 for (int time = 0; time < k; ++time){int num_index = time;for (int j = time + 1; j < DataSetlen; ++j){if (b[j] < b[num_index]){num_index = j;}}if (time != num_index){int tn = b[num_index];char tc = label[num_index];b[num_index] = b[time];label[num_index] = label[time];b[time] = tn;label[time] = tc;}} char* sc = new char[k];int* sc_num = new int[k];memset(sc_num, 0, sizeof(sc_num));memset(sc,'0',sizeof(sc));int len = 0;for (int i = 0; i < k; ++i){bool p = true;for (int j = 0; j < len; ++j){if (sc[j] == label[i]){sc_num[j] ++;p = false;}}if (p) {sc[len] = label[i];sc_num[len++] = 1;}}char ans;int time = 0;for (int i = 0; i < k; ++i) {if (time < sc_num[i]){ans = sc[i];time = sc_num[i];}}cout << "time = "<< time<< endl;delete []b;delete []sc;delete []sc_num;return ans; }int main(){int INX[] = {1,2,3,4,5};int **DataSet = new int* [3];for (int i = 0;i < 3;++i){DataSet[i] = new int[5];for (int j = 0; j < 5; ++j){DataSet[i][j] = (2 * j + 1 - 3* i) % 9; //這個隨便寫的一個數據集 }} char label[] = {'A', 'B', 'C'};cout << classsify_KNN(INX, DataSet,3,label, 1)<< endl; //釋放空間for (int i = 0;i < 3;++i) {delete [] (DataSet[i]);DataSet[i] = NULL;} delete[] DataSet; } 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的人工智能算法--KNN算法(C++实现)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。