matlab实现的ID3 分类决策树 算法.doc_第1页
matlab实现的ID3 分类决策树 算法.doc_第2页
matlab实现的ID3 分类决策树 算法.doc_第3页
matlab实现的ID3 分类决策树 算法.doc_第4页
matlab实现的ID3 分类决策树 算法.doc_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

function D = ID3(train_features, train_targets, params, region) % Classify using Quinlans ID3 algorithm% Inputs:% features - Train features% targets - Train targets% params - Number of bins for the data, Percentage of incorrectly assigned samples at a node% region - Decision region vector: -x x -y y number_of_points% Outputs% D - Decision sufrace Ni, M = size(train_features); %NiM %Get parametersNbins, inc_node = process_params(params);inc_node = inc_node*M/100; %For the decision regionN = region(5);mx = ones(N,1) * linspace (region(1),region(2),N); %linspace()my = linspace (region(3),region(4),N) * ones(1,N);flatxy = mx(:), my(:); %Preprocessingf, t, UW, m = PCA(train_features, train_targets, Ni, region);train_features = UW * (train_features - m*ones(1,M);flatxy = UW * (flatxy - m*ones(1,N2); %First, bin the data and the decision region dataH, binned_features= high_histogram(train_features, Nbins, region);H, binned_xy = high_histogram(flatxy, Nbins, region); %Build the tree recursivelydisp(Building tree)tree = make_tree(binned_features, train_targets, inc_node, Nbins); %Make the decision region according to the treedisp(Building decision surface using the tree)targets = use_tree(binned_xy, 1:N2, tree, Nbins, unique(train_targets); D = reshape(targets,N,N);%END function targets = use_tree(features, indices, tree, Nbins, Uc)%Classify recursively using a tree targets = zeros(1, size(features,2); %size(features,2)features if (size(features,1) = 1), %Only one dimension left, so work on it for i = 1:Nbins, in = indices(find(features(indices) = i); if isempty(in), if isfinite(tree.child(i), targets(in) = tree.child(i); else %No data was found in the training set for this bin, so choose it randomally n = 1 + floor(rand(1)*length(Uc); targets(in) = Uc(n); end end end breakend %This is not the last level of the tree, so:%First, find the dimension we are to work ondim = tree.split_dim;dims= find(ismember(1:size(features,1), dim); %And classify according to itfor i = 1:Nbins, in = indices(find(features(dim, indices) = i); targets = targets + use_tree(features(dims, :), in, tree.child(i), Nbins, Uc);end %END use_tree function tree = make_tree(features, targets, inc_node, Nbins)%Build a tree recursively Ni, L = size(features);Uc = unique(targets); %When to stop: If the dimension is one or the number of examples is smallif (Ni = 1) | (inc_node L), %Compute the children non-recursively for i = 1:Nbins, tree.split_dim = 0; indices = find(features = i); if isempty(indices), if (length(unique(targets(indices) = 1), tree.child(i) = targets(indices(1); else H = hist(targets(indices), Uc); m, T = max(H); tree.child(i) = Uc(T); end else tree.child(i) = inf; end end breakend %Compute the nodes Ifor i = 1:Ni, Pnode(i) = length(find(targets = Uc(i) / L;endInode = -sum(Pnode.*log(Pnode)/log(2); %For each dimension, compute the gain ratio impuritydelta_Ib = zeros(1, Ni);P = zeros(length(Uc), Nbins);for i = 1:Ni, for j = 1:length(Uc), for k = 1:Nbins, indices = find(targets = Uc(j) & (features(i,:) = k); P(j,k) = length(indices); end end Pk = sum(P); P = P/L; Pk = Pk/sum(Pk); info = sum(-P.*log(eps+P)/log(2); delta_Ib(i) = (Inode-sum(Pk.*info)/-sum(Pk.*log(eps+Pk)/log(2);end %Find the dimension minimizing delta_Ib m, dim = max(delta_Ib); %Split along the dim dimensiontree.split_dim = dim;di

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论