模式識別(第四版)上機實驗 2 2 2 5

2022-09-16 20:45:13 字數 3383 閱讀 1796

% 輸入

% 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...