机器学习 KD树生成(matlab实现)
生活随笔
收集整理的這篇文章主要介紹了
机器学习 KD树生成(matlab实现)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 一、思路
- 二、效果
- 三、代碼
- 1、mian
- 2、Kd_Tree_Create
- 3、recursive
一、思路
%二叉樹數據結構在c語言中容易表示,可在matlab中卻不那么容易
%但是c語言需要自己造輪子(sortrows()用c得寫死我), matlab有現成的, 所以思考一下如何在matlab中表示二叉樹呢
%參考大堆小堆利用數組表示二叉樹, 從而避開指針構建kdtree(哇噢, 感覺自己就是個小機靈鬼誒)
%給每個節點添加下標以實現父子訪問
%提示:節點下標為i, 左孩子下標為2i,左孩子下標為2i+1
%因為kdtree不是完全二叉樹, 所以需要增加狀態信息欄表示某節點是否為空
%好了, 開整吧
二、效果
三、代碼
1、mian
%% 數據導入 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);2、Kd_Tree_Create
function [] = Kd_Tree_Create(Dataset) %Dataset共有rows行數據,1:columns-1列為屬性,columns列為類別 size_Dataset=size(Dataset); recursive(Dataset,1,1,size_Dataset(1),size_Dataset(2)-1); end3、recursive
function [] = recursive(Dataset,pos,x_i,rows,columns) disp("kd樹深度:"+x_i); %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)+1;%加1去掉也不影響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树生成(matlab实现)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 运筹学_单纯形表法_0(matlab实现
- 下一篇: jupyter notebook_远程终