用matlab仿真产生两类二维样本数据,每类样本各50个,画出样本的分布图。两类样本服从正太分布,均值向量、协方差矩阵如下。求各类样本的均值向量和协方差矩阵。画出样本分布图。求按从“类均值中提取判别信息的方法”得到的投影方向,并画出将两类样本投影到该方向上的分布图;求按从“包含在类平均向量中判别信息的最优压缩方法”得到的投影方向,并画出将两类样本投影到该方向上的分布图;
时间: 2024-02-23 20:56:31 浏览: 288
好的,我明白了您的问题。以下是对您的问题的回答:
首先,我们需要产生两类服从正态分布的二维样本数据,每类样本各50个,并且样本的均值向量和协方差矩阵如下:
第一类样本:
均值向量:[1 2]
协方差矩阵:[2 0.5; 0.5 1]
第二类样本:
均值向量:[4 5]
协方差矩阵:[1 -0.5; -0.5 2]
在MATLAB中,可以使用mvnrnd函数生成服从正态分布的二维样本数据。代码如下:
% 生成第一类样本
mu1 = [1 2];
sigma1 = [2 0.5; 0.5 1];
data1 = mvnrnd(mu1, sigma1, 50);
% 生成第二类样本
mu2 = [4 5];
sigma2 = [1 -0.5; -0.5 2];
data2 = mvnrnd(mu2, sigma2, 50);
接下来,我们可以画出两类样本的分布图。代码如下:
% 画出第一类样本的分布图
scatter(data1(:,1), data1(:,2), 'r', 'filled');
hold on;
% 画出第二类样本的分布图
scatter(data2(:,1), data2(:,2), 'b', 'filled');
hold off;
从分布图中可以看出,两类样本的分布是比较明显的。
接下来,我们需要求出各类样本的均值向量和协方差矩阵。代码如下:
% 求第一类样本的均值向量和协方差矩阵
mu1 = mean(data1);
sigma1 = cov(data1);
% 求第二类样本的均值向量和协方差矩阵
mu2 = mean(data2);
sigma2 = cov(data2);
然后,我们需要按照“类均值中提取判别信息的方法”和“包含在类平均向量中判别信息的最优压缩方法”分别求出投影方向,并画出将两类样本投影到该方向上的分布图。
按照“类均值中提取判别信息的方法”,我们需要求出两类样本的均值向量之差,即:
delta_mu = mu1 - mu2;
然后,我们需要求出投影方向。投影方向可以表示为一个单位向量w,满足w^T * delta_mu = 1,其中^T表示转置。
在MATLAB中,我们可以使用eig函数求出协方差矩阵的特征值和特征向量。特征向量中的每一列都是一个单位向量,特征值表示该方向上的方差。我们可以选择特征值最大的特征向量作为投影方向。代码如下:
% 按照“类均值中提取判别信息的方法”求出投影方向
delta_sigma = sigma1 + sigma2;
[V, D] = eig(delta_sigma);
[lambda, index] = max(diag(D));
w = V(:, index);
% 将两类样本投影到该方向上,并画出分布图
projected_data1 = data1 * w;
projected_data2 = data2 * w;
figure;
histogram(projected_data1, 'FaceColor', 'r', 'EdgeColor', 'none', 'Normalization', 'probability');
hold on;
histogram(projected_data2, 'FaceColor', 'b', 'EdgeColor', 'none', 'Normalization', 'probability');
hold off;
从分布图中可以看出,两类样本在投影方向上的分布有明显的区别。
按照“包含在类平均向量中判别信息的最优压缩方法”,我们需要求出投影方向,使得两类样本在该方向上的方差之和最大。这可以通过求解广义特征值问题来实现。具体来说,我们需要求解下面的广义特征值问题:
delta_sigma * w = lambda * within_class_sigma * w
其中,delta_sigma表示两类样本的协方差矩阵之和,within_class_sigma表示两类样本的协方差矩阵之和的逆矩阵乘以两类样本的类内散布矩阵,即
within_class_sigma = inv(sigma1 + sigma2) * (sigma1 + sigma2 - 2 * eye(2) * min(diag(sigma1 + sigma2)));
在MATLAB中,我们可以使用eigs函数求解广义特征值问题。代码如下:
% 按照“包含在类平均向量中判别信息的最优压缩方法”求出投影方向
within_class_sigma = inv(sigma1 + sigma2) * (sigma1 + sigma2 - 2 * eye(2) * min(diag(sigma1 + sigma2)));
[V, D] = eigs(delta_sigma, within_class_sigma, 1);
w = V;
% 将两类样本投影到该方向上,并画出分布图
projected_data1 = data1 * w;
projected_data2 = data2 * w;
figure;
histogram(projected_data1, 'FaceColor', 'r', 'EdgeColor', 'none', 'Normalization', 'probability');
hold on;
histogram(projected_data2, 'FaceColor', 'b', 'EdgeColor', 'none', 'Normalization', 'probability');
hold off;
从分布图中可以看出,在该方向上,两类样本的分布有明显的区别。
阅读全文
相关推荐

















