国科大模式识别第五次作业

第一部分:简述题

  1. 简述 PCA 的原理、学习模型和算法步骤。

原理:寻找一组方差较大的方向,将原始数据(样本)在该方向进行投影。即将数据在新坐标系下进行表示,保留少数在方差最大方向上的投影,达到数据变换、尽可能地保留原 始数据信息 和降维的目的。

方差较大的方向称为主成分 (Principal Component) 。其中,方差最大的方向称为第一主成分,其次为第二主成分,依次类推。

学习模型:

PCA是无监督学习方法,通过学习数据的协方差矩阵的特征向量,选择前k个特征向量构成变换矩阵,将数据映射到新的低维空间。

算法步骤:

计算数据均值:

计算数据的协方差矩阵:

对协方差矩阵进行特征值分解,得到特征值和对应的特征向量。特征值表示在该方向上的方差,特征向量表示主成分方向。将特征值从大到小排序,选择前k个特征值对应的特征向量构成变换矩阵。这些特征向量即为数据的主成分。

将每一个数据进行投影:

  1. 简述 LAD 的原理和学习模型。

原理:寻找一组投影方向,使样本在投影之后 (即在新坐标系下)类内样本点尽可能靠近, 类间样本点尽可能相互远离,提升样本表示的分类鉴别能力。 投影方向数小于原始数据的维度,因此投影样本即相当于将样本在子空间内进行表示,从而达到降维的目的。

  1. 对每个类别计算样本的均值向量。
  2. 计算类内散度矩阵和类间散度矩阵

类内散度矩阵:

类间散度矩阵:

目标函数重写为(广义Rayleigh熵):

J 的值与向量的长度无关,只与其方向有关,不失 一般性可令w为单位长度的向量。

学习目标:

  1. 计算特征值和特征向量: 对类内散度矩阵的逆矩阵与类间散度矩阵进行特征值分解,得到特征值和对应的特征向量。
  2. 选择投影方向: 选择前k个最大特征值对应的特征向量,构成投影矩阵。

5.数据投影: 将原始数据乘以投影矩阵,将数据投影到新的低维空间。

  1. 作为一类非线性降维方法,简述流形学习的基本思想。

• LLE (Locally linear embedding)

– 基本思想:给定数据集,通过最近邻等方式构造一个数据图(data graph)。然后在每一个局部区域,高维空间中的样本线性重构关系在低维空间中均得以保持。

  1. 根据特征选择与分类器的结合程度,简述特征选择的主要方法,指出各类方法的特点。

• 过滤式特征选择方法: “选择”与“学习”独立 ,在特征选择和分类器训练之前独立地进行。常见方法有方差选择、互信息等。

• 包裹式特征选择方法: “选择”依赖“学习” ,使用具体的分类器性能来评估特征子集。典型方法有递归特征消除(RFE)等。

• 嵌入式特征选择方法: “选择”与“学习”同时进行,特征选择与分类器训练过程融为一体。典型方法有LASSO回归、决策树等。

  1. 简述最优特征选择的基本思想。

通过组合不同的特征选择方法、交叉验证等手段,寻找最优的特征子集,以提高模型性能并减少计算成本。

第二部分:编程题

编程实现 1:PCA+KNN:即首先 PCA 进行降维,然后采用最近邻分类器(1 近邻分类器)作为分类器进行分类。

  1. load ORLData_25;
  2. X = ORLData;
  3. X = double(X);
  4. [n, d] = size(X);
  5. labels = X(:,end); %获取各样本的类别标签
  6. labels = floor(double(labels));
  7. c = max(labels); % c = 40 
  8. X(:,end) = []; % 获取样本数据
  9. clear ORLData;
  10. %划分数据集
  11. rng(42); %设置随机种子
  12. [trainIdx,testIdx]=crossvalind('HoldOut',labels,0.2); % 0.8的训练集,0.2的测试集
  13. X_train=X(trainIdx,:);
  14. y_train=labels(trainIdx);
  15. X_test=X(testIdx,:);
  16. y_test=labels(testIdx);
  17. % 降维至不同维数时的分类性能
  18. dimensions = [1, 2, 3, 5, 10]; % 可以根据需要扩展维度范围
  19. for dim = dimensions
  20.     % PCA
  21.     pca_accuracy=1-pca_knn(X_train, X_test, y_train, y_test, dim);
  22.     fprintf('PCA (Dimension %d): Accuracy = %.2f\n', dim, pca_accuracy);
  23. end
  24. % 实现PCA + KNN
  25. function accuracy = pca_knn(X_train, X_test, y_train, y_test, n_components)
  26.     % PCA降维
  27.     coeff = pca(X_train, 'NumComponents', n_components);
  28.     X_train_pca = X_train * coeff;
  29.     X_test_pca = X_test * coeff;
  30.     % KNN分类
  31.     mdl = fitcknn(X_train_pca, y_train, 'NumNeighbors', 1);
  32.     
  33.     % 预测并评估性能
  34.     y_pred = predict(mdl, X_test_pca);
  35.     accuracy = sum(y_pred ==  y_test) / numel(y_test);
  36. end

预测并评估性能:

编程实现 2:LDA +KNN,即首先 LDA 进行降维,然后采用最近邻分类器(1 近邻分类器)作为分类器进行分类。

任务:采用 80%作样本作训练集,20%样本做测试集,报告降至不同维数时的分类性能。

  1. % 加载数据集
  2. load vehicle;
  3. out = UCI_entropy_data.train_data;
  4. X = out'; 
  5. X = double(X);
  6. [n, d] = size(X); 
  7. labels = X(:, end); 
  8. labels = floor(double(labels)); % 获取各样本的类别标签
  9. c = max(labels); % c = 4
  10. X(:, end) = []; % 获取样本数据
  11. clear UCI_entropy_data;
  12. clear out;
  13. % 划分数据集
  14. rng(42);  设置随机种子
  15. [trainIdx, testIdx] = crossvalind('HoldOut', labels, 0.2);  % 80%训练集,20%测试集
  16. X_train = X(trainIdx, :);
  17. y_train = labels(trainIdx);
  18. X_test = X(testIdx, :);
  19. y_test = labels(testIdx);
  20. % 降维至不同维数时的分类性能
  21. dimensions = [1, 2, 3, 5, 10]; % 可以根据需要扩展维度范围
  22. for dim = dimensions
  23.     % LDA
  24.     lda_accuracy = lda_knn(X_train, X_test, y_train, y_test, dim);
  25.     fprintf('LDA (Dimension %d): Accuracy = %.2f\n', dim, lda_accuracy);
  26. end
  27. % 实现LDA + KNN
  28. function accuracy = lda_knn(X_train, X_test, y_train, y_test, ~)
  29.     % LDA降维
  30.     lda = fitcdiscr(X_train, y_train, 'DiscrimType', 'pseudolinear', 'ScoreTransform', 'logit');
  31.     X_train_lda = predict(lda, X_train);
  32.     X_test_lda = predict(lda, X_test);
  33.     % KNN分类
  34.     mdl = fitcknn(X_train_lda, y_train, 'NumNeighbors', 1);
  35.     
  36.     % 预测并评估性能
  37.     y_pred = predict(mdl, X_test_lda);
  38.     accuracy = sum(y_pred == y_test) / numel(y_test);
  39. end

预测并评估性能:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值