% 輸入% m 是l*c矩陣,第i列是第i類分布的平均向量,c表示類別
% s是l*l*c矩陣,第i個二維l*l成分是i類分布的協方差
% p是c維向量,它由類的先驗概率組成
% 返回值
% (估計)n列向量的矩陣x,矩陣的每一列都是乙個l維資料向量
% 行向量y的每i個表示基於第i個資料向量的類
function[x,y] = generate_gauss_classes(m, s, p, n)
[l, c]=size(m);
x=;y=;
for j=1:c
%從每個分布生成[p(j)*n]向量
t = mvnrnd(m(:, j), s(:, :, j), fix(p(j) * n));
% 由於固定操作,樣本總數可能略小於n
x=[x t'];
y=[y ones(1, fix(p(j) * n)) * j];
end
% 輸入引數% m:均值向量
% x:基於上述類的包含列向量的矩陣x
% 輸出為乙個n維向量,它的第i部分包含乙個類,這個類的相應向量是根據最小歐幾里得距離給定的
function z = euclidean_classifier(m, x)
[l, c] = size(m);
[l, n] = size(x);
for i = 1:n
for j = 1:c
t(j) = sqrt((x(:, i) - m(:, j))' * (x(:,i) - m(:,j)));
end[num, z(i)] = min(t);
endfunction z = comp_gauss_dens_val(m, s, x)
[l, q] = size(m);
z = (1/((2*pi)^(1/2)*det(s)^0.5))*exp(-0.5*(x-m)'*inv(s)*(x-m));
% 輸入引數% m:均值向量
% x:基於上述類的包含列向量的矩陣x
% 輸出為乙個n維向量,它的第i部分包含乙個類,這個類的相應向量是根據最小歐幾里得距離給定的
function z = euclidean_classifier(m, x)
[l, c] = size(m);
[l, n] = size(x);
for i = 1:n
for j = 1:c
t(j) = sqrt((x(:, i) - m(:, j))' * (x(:,i) - m(:,j)));
end[num, z(i)] = min(t);
end
% 輸入引數% m:均值向量
% s:c類問題的類分布的協方差矩陣
% x:基於上述類的包含列向量的矩陣x
% 輸出為乙個n維向量,它的第i部分包含乙個類,這個類的相應向量是根據最小mahalanobis距離給定的
function z = mahalanobis_classifier(m, s, x)
[l, c] = size(m);
[l, n] = size(x);
for i = 1:n
for j = 1:c
t(j) = sqrt((x(:, i) - m(:, j))' * inv(s(:, :, j)) * (x(:, i) - m(:, j)));
end[num, z(i)] = min(t);
end
% 注意:本函式可以處理多達6個不同的類function plot_mul_group_data(x, y, class_error, title_text, m)
[l, n] = size(x); % n=資料向量的編號,l=維數
[l, c] = size(m); % c=類的編號
[ll, n] = size(y);
if(l ~= 2)
fprintf('no plot can be generated \\ n')
return
else
figure(1);
pale = ['r.'; 'g.'; 'b.'; 'y.'; 'm.'; 'c.'];
for k = 1:ll
subplot(2,2,k);
hold on
for i = 1: n
plot(x(1, i), x(2, i), pale(y(k,i), :))
end% 繪製類均值
for j = 1: c
plot(m(1, j), m(2, j), 'k + ')
endtt = sprintf('%s(分類錯誤率:%.3f)', title_text, class_error(k));
title(tt);
endend
randn('seed', 0);m = [1 1;12 8;16 1]';
s(:,:,1) = [4 0;0 4];
s(:,:,2) = [4 0;0 4];
s(:,:,3) = [4 0;0 4];
p=[1/3;1/3;1/3];
n=1000;
[x1,y] = generate_gauss_classes(m,s,p,n);
% 貝葉斯分類
z1 = bayes_classifier(m, s, p, x1);
ans1 = compute_error(y, z1);
% 歐幾里得距離
z2 = euclidean_classifier(m, x1);
ans2 = compute_error(y, z2);
% mahalanobis距離
z3 = mahalanobis_classifier(m, s, x1);
ans3 = compute_error(y, z3);
% 繪圖
c primer大綱(第四版)
第1章 快速入門 第一部分 基本語言 第2章 變數和基本型別 第3章 標準庫型別 第4章 陣列和指標 第5章 表示式 第6章 語句 第7章 函式 第8章 標準io庫 第二部分 容器和演算法 第9章 順序容器 第10章 關聯容器 第11章 泛型演算法 第三部分 類和資料抽象 第12章 類 第13章 複...
c prime重學(四)基於第四版
迭代器 1 插入迭代器 這類迭代器與容器繫結在一起,實現在容器中插入元素的功能 2 iostream迭代器 這類迭代器可與輸入或輸出流繫結在一起,用於迭代遍歷所關聯的io流。3 反向迭代器 這類迭代器事項向後遍歷。而不是向前遍歷。所有容器型別都定義了自己的 reverse iterator型別,由r...
《演算法(第四版)》排序 模板
本書對排序類演算法有乙個模板,包括了以下幾種方法 1 sort 這個方法裡面實現的就是排序的演算法 2 less 這個方法裡是利用了comparable介面裡的compareto方法,其中compareto方法對於本物件與傳入的比較物件小於,等於,大於,分別返回負數,0,正數 這個方法如果compa...