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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > 循环神经网络 >内容正文

循环神经网络

机器学习 KD树_递归搜索(matlab实现)

發布時間:2024/4/18 循环神经网络 69 豆豆
生活随笔 收集整理的這篇文章主要介紹了 机器学习 KD树_递归搜索(matlab实现) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 思路
  • 效果
  • 代碼
    • mian
    • Kd_Tree_Create
    • recursive
    • Kd_Tree_Search

思路

第二個版本:鏈接

KD樹基本思路:
建立KD樹(Kd_Tree_Create)
遞歸搜索:回溯搜索的起點(Kd_Tree_Search)
回溯搜索:收斂到全局最近點(暫未實現)

效果

僅用遞歸搜索效果如下:

代碼

mian

clear all; clc; %% 數據導入 Dataset=csvread("iris_dataset.csv"); rows=150; columns=5;%% 數據分割 Train_set=Dataset(1:120,:); Test_set=Dataset(121:150,:);%% kd樹生成 %1:columns列為屬性和類別, columns+1列節點存活狀態 global Kd_Tree; Kd_Tree_Create(Train_set);%% 遞歸搜索 測試 global stack_point; size_Kd_Tree=size(Kd_Tree); scores=0; for i=1:30test_x=Test_set(i,1:columns-1);Kd_Tree_Search(1,size_Kd_Tree(1),columns-1,1,test_x);if (Kd_Tree(stack_point(1),columns)==Test_set(i,columns))scores=scores+1;endstack_point=[]; end disp("遞歸搜索準確率:"+scores/30);%% 遞歸 & 回溯搜索 測試

Kd_Tree_Create

function [] = Kd_Tree_Create(Dataset) %二叉樹數據結構在c語言中容易表示,可在matlab中卻不那么容易 %但是c語言需要自己造輪子(sortrows()用c得寫死我), matlab有現成的, 所以思考一下如何在matlab中表示二叉樹呢 %參考大堆小堆利用數組表示二叉樹, 從而避開指針構建kdtree(哇噢, 感覺自己就是個小機靈鬼誒) %給每個節點添加下標以實現父子訪問 %提示:節點下標為i, 左孩子下標為2*i,左孩子下標為2*i+1 %因為kdtree不是完全二叉樹, 所以需要增加狀態信息欄表示某節點是否為空 %好了, 開整吧%Dataset共有rows行數據,1:columns-1列為屬性,columns列為類別 size_Dataset=size(Dataset); recursive(Dataset,1,1,size_Dataset(1),size_Dataset(2)-1); end

recursive

function [] = recursive(Dataset,pos,x_i,rows,columns) %Dataset:需要二分的數據集 %rows:需分類的個體數 %columns:用于分類的屬性數 %pos:Kd_Tree插入位置 %x_i:排序依據 global Kd_Tree; if(rows>1)%排序Dataset=sortrows(Dataset,mod(x_i-1,columns)+1);%二分Divi_Index=fix(rows/2);Kd_Tree(pos,1:columns+1)=Dataset(Divi_Index+1,:);Kd_Tree(pos,columns+2)=1;%遞歸recursive(Dataset(1:Divi_Index,:),2*pos,x_i+1,Divi_Index,columns);recursive(Dataset(Divi_Index+2:rows,:),2*pos+1,x_i+1,rows-Divi_Index-1,columns); elseif(rows==1)Kd_Tree(pos,1:columns+1)=Dataset;Kd_Tree(pos,columns+2)=1;elseKd_Tree(pos,columns+2)=0;end endend

Kd_Tree_Search

function [] = Kd_Tree_Search(current_point,rows,x_dim,i_x,test_x) global Kd_Tree; global stack_point; stack_point=[current_point stack_point]; if(Kd_Tree(current_point,i_x)<=test_x(1,i_x))%進入右子節點if(2*current_point+1<=rows && Kd_Tree(2*current_point+1,x_dim+2)==1)Kd_Tree_Search(2*current_point+1,rows,x_dim,mod(i_x,x_dim)+1,test_x)else%父與右子之間 && 右子為空end else%進入左子節點if(2*current_point<=rows && Kd_Tree(2*current_point,x_dim+2)==1)Kd_Tree_Search(2*current_point,rows,x_dim,mod(i_x,x_dim)+1,test_x)else%父與左子之間 && 左子為空end endend

總結

以上是生活随笔為你收集整理的机器学习 KD树_递归搜索(matlab实现)的全部內容,希望文章能夠幫你解決所遇到的問題。

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