⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nddf.m

📁 数据挖掘matlab源码
💻 M
字号:
function [D, g0, g1] = NDDF(train_features, train_targets, cost, region, test_feature)

% Classify using the normal density discriminant function
% Inputs:
% 	features			- Train features
%	targets			- Train targets
%	cost				- Cost for class 0 (Optional, Unused yet)
%	region			- Decision region vector: [-x x -y y number_of_points]
%	test_feature	- A test example (optional)
%
% Outputs
%	D			- Decision sufrace
%	g0, g1	- The discriminant function for the test example

[d, L] = size(train_features);
N		 = region(5);

%Estimate mean and covariance for each class
mu		= zeros(d,length(unique(train_targets)));
sigma	= zeros(d,d,length(unique(train_targets)));
p		= zeros(length(unique(train_targets)));

classes = unique(train_targets);
for i = 1:length(classes),
   indices			= find(train_targets == classes(i));
   mu(:,i)			= mean(train_features(:,indices)')';
   sigma(:,:,i)	= cov(train_features(:,indices)',1)';
   p(i)				= length(indices)/length(train_targets);
end

%Build a decision region for 2D, 2 class data
D 		= zeros(N);
x		= ones(N,1) * linspace (region(1),region(2),N);
y		= linspace (region(3),region(4),N)' * ones(1,N);

for i = 1:region(5),
   X		= [x(i,:) ; y(i,:)];
   g0		= -0.5*(X - mu(:,1)*ones(1,N))'*inv(squeeze(sigma(:,:,1)))*(X - mu(:,1)*ones(1,N)) - ...
   		   d/2*log(2*pi)-0.5*log(det(squeeze(sigma(:,:,1))))+log(p(1));
   g1		= -0.5*(X - mu(:,2)*ones(1,N))'*inv(squeeze(sigma(:,:,2)))*(X - mu(:,2)*ones(1,N)) - ...
   		   d/2*log(2*pi)-0.5*log(det(squeeze(sigma(:,:,2))))+log(p(2));
   D(i,:)= (diag(g0) < diag(g1))';
end
      
%If there is a test example, calculate g0 and g1 for it
if exist('test_feature'),
   X		= test_feature;
   g0		= -0.5*(X - mu(:,1)*ones(1,N))'*inv(squeeze(sigma(:,:,1)))*(X - mu(:,1)*ones(1,N)) - ...
   		   d/2*log(2*pi)-0.5*log(det(squeeze(sigma(:,:,1))))+log(p(1));
   g1		= -0.5*(X - mu(:,2)*ones(1,N))'*inv(squeeze(sigma(:,:,2)))*(X - mu(:,2)*ones(1,N)) - ...
   		   d/2*log(2*pi)-0.5*log(det(squeeze(sigma(:,:,2))))+log(p(2));
end   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -