使用PCA选择特征

2023-12-13

我正在做无监督分类。为此,我有 8 个特征(绿色方差、绿色标准差、红色平均值、红色方差、红色标准差、色调平均值、色调方差、色调标准差)用于分类每个图像,我想使用 PCA 选择 3 个最重要的特征。我编写了以下代码用于特征选择 (其中特征尺寸为:179X8):

for c=1:size(feature,1)
   feature(c,:)=feature(c,:)-mean(feature)
end

DataCov=cov(feature); % covariance matrix
[PC,variance,explained] = pcacov(DataCov)

这给了我:

PC =

0.0038   -0.0114    0.0517    0.0593    0.0039    0.3998    0.9085   -0.0922
0.0755   -0.1275    0.6339    0.6824   -0.3241   -0.0377   -0.0641    0.0052
0.7008    0.7113   -0.0040    0.0496   -0.0207    0.0042    0.0012    0.0002
0.0007   -0.0012    0.0051    0.0101    0.0272    0.0288    0.0873    0.9953
0.0320   -0.0236    0.1521    0.2947    0.9416   -0.0142   -0.0289   -0.0266
0.7065   -0.6907   -0.1282   -0.0851    0.0060    0.0003    0.0010   -0.0001
0.0026   -0.0037    0.0632   -0.0446    0.0053    0.9125   -0.4015    0.0088
0.0543   -0.0006    0.7429   -0.6574    0.0838   -0.0705    0.0311   -0.0001

方差=

0.0179
0.0008
0.0001
0.0000
0.0000
0.0000
0.0000
0.0000

解释=

94.9471
4.1346
0.6616
0.2358
0.0204
0.0003
0.0002
0.0000

这意味着第一主成分解释了 94.9% 的方差,依此类推……但这些是按显着性从高到低的顺序排列的。 根据以上信息我如何知道要选择哪些特征(从1到8)。


您的问题与 Mahoney 和 Drineas 中讨论的 COLUMNSELECT 问题相同“用于改进数据分析的 CUR 矩阵分解”.

他们首先计算每个维度的杠杆分数,然后使用杠杆分数作为权重随机选择其中的 3 个维度。或者,您可以选择最大的。这是解决您问题的脚本:

我首先从网上获得了一张真实的自然图像,并将其调整为您要求的尺寸。图片如下:

img

%# Example data from real image of size 179x8
%# You can skip it for your own data
features = im2double(rgb2gray(imread('img.png')));

%# m samples, n dimensions
[m,n] = size(features);

然后,计算集中数据:

%# Remove the mean
features = features - repmat(mean(features,2), 1, size(features,2));

我使用 SVD 来计算 PCA,因为它可以提供主成分和系数。如果样本位于列中,则U持有主要成分。检查第二页这张纸为了关系。

%# Compute the SVD
[U,S,V] = svd(features);

这里的关键思想是我们想要获得具有大部分变化的维度。一个假设是数据中存在一些噪音。我们只选择主要特征向量,例如代表了95%的数据。

%# Compute the number of eigenvectors representing
%#  the 95% of the variation
coverage = cumsum(diag(S));
coverage = coverage ./ max(coverage);
[~, nEig] = max(coverage > 0.95);

然后使用以下公式计算杠杆分数nEig的主要成分。也就是说,我们取范数nEig系数。

%# Compute the norms of each vector in the new space
norms = zeros(n,1);
for i = 1:n
    norms(i) = norm(V(i,1:nEig))^2;
end

然后,我们可以对杠杆分数进行排序:

%# Get the largest 3
[~, idx] = sort(norms);
idx(1:3)'

并获取具有最大杠杆分数的向量的索引:

ans =
   6     8     5

您可以查看论文以了解更多详细信息。

但是,请记住,如果您有很多维度,基于 PCA 的技术会很好。就您而言,搜索空间非常小。我的建议是在空间中进行详尽的搜索,并按照 @amit 的建议获得最佳选择。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用PCA选择特征 的相关文章

  • 在matlab中,如何读取python pickle文件?

    在 python 中 我生成了一个 p 数据文件 pickle dump allData open myallData p wb 现在我想在Matlab中读取myallData p 我的Matlab安装在Windows 8下 其中没有Pyt
  • 子序列和

    给定一个整数数组 例如 1 2 3 1 查找是否存在总和为0并返回它 例如 1 2 3 or 2 3 1 检查每个子序列是O n 2 这效率太低了 有改进的想法吗 创建一个新数组 其中每个元素等于前一个元素加上该元素的总和 Input 1
  • Matlab的导入函数的范围是什么?

    我正在尝试将一些用 Matlab 编写的代码转换为独立的 编译的 Matlab 应用程序 然而 在出现一些奇怪的错误之后 我意识到代码大量使用了从路径中添加和删除的操作 以避免多次使用多个具有相同名称 但结果 计算不同 的函数这一事实 环顾
  • 迭代任意大小的子集

    我可以迭代大小为 1 的子集 for int a 0 a lt size a 或大小为 2 的子集 for int a1 0 a1 lt size a1 for int a2 a1 1 a2 lt size a2 or 3 for int
  • matlab中无限while嵌套在for循环中

    我想做一个while循环 嵌套在for在 Matlab 中循环以查找数据中不同对之间的距离 我的数据具有以下形式 ID lon lat time 1 33 56 40 89 803 2 32 45 41 03 803 3 35 78 39
  • 在matlab中不使用for循环检查数组中的成员资格

    我想简化这段代码 使其无需 for 循环即可工作 for i 1 N for j 1 N if ismember j A PID i i TFP i j PID i i end end end 其中A是一个包含一些标签的矩阵 我之前存储的T
  • 具有 2 个属性的背包算法。如何在 3d 数组中实现它?

    当有超过 1 个属性时 我无法理解背包问题 当有 1 个属性时 我必须编写一个使用具有 2 个属性的背包算法的程序 老师告诉我们 它必须在 3d 数组中完成 错误的实现将导致 O 2 n 处理时间 我无法想象这样的数组会是什么样子 假设这是
  • 如何从迭代器推导连续内存

    不知何故 本土stl copy VC Dinkumware 上的算法表明它可以使用memcpy 可以轻松复制的数据 一个凡人能做到这一点吗 假设每个元素都是普通可复制的 random access iterator 是否意味着连续内存 标准
  • 加速 C# 中的矩阵加法

    我想优化这段代码 public void PopulatePixelValueMatrices GenericImage image int Width int Height for int x 0 x lt Width x for int
  • 计算机视觉/道路跟踪入门

    我想开发一个可以跟踪和沿着道路行驶的系统 最初 我只想处理定义明确的道路 稍后可能会合并对定义不明确的道路的跟踪 我面临的问题是我不知道从哪里开始 我是图像处理领域的新手 我希望能得到一些关于从哪里开始以及应该阅读哪些关于该主题的书籍的指导
  • 用于开始和/或包含搜索的最快字符串集合结构/算法是什么

    我有以下情况 我有一个大的字符串集合 比如说 250 000 平均长度可能是 30 我要做的就是在这些搜索中进行许多搜索 大多数搜索都是 StartsWith 和 Contains 类型的 该集合在运行时是静态的 这意味着选择的集合的初始读
  • Java递归方法求阶乘返回负输出[重复]

    这个问题在这里已经有答案了 我知道这是溢出 但问题是 20 是相对较小的数字 这不应该发生 对吧 有没有更好的方法来查找大数 例如 1000 的阶乘 而不会得到这种奇怪的结果 public class RecursiveFunctionsE
  • android中根据屏幕尺寸计算图像尺寸

    我正在尝试根据屏幕尺寸计算图像高度和宽度 我从后端获取 5 x 7 尺寸的图像 为了将像素乘以 72 进行转换 我有 360 X 504 尺寸的图像 对于 360 X 504 我的动态透明矩形区域将显示为 1 223 x 1 179 即 8
  • Matlab:3D 堆积条形图

    我正在尝试创建一个 3D 堆积条形图 如这个问题所示 Matlab 中的 3D 堆叠条形图 https stackoverflow com questions 13156133 3d stacked bars in matlab 5D 然而
  • 将 kinect RGB 和深度值转换为 XYZ 坐标

    我正在寻找一种简单的方法将 kinect RGB 和深度值转换为 XYZ 坐标 使用 MATLAB 我的目标是一个输入为以下内容的函数 每个点的 RGB 和深度值Kinect相机 并输出 每个点的 x y 和 z 值 RGB 深度 RGB
  • 将向量(或弧)绘制到玫瑰图上。 MATLAB

    我有两个数据集 其中详细列出了angles 我正在绘制玫瑰图 angles 0 8481065519 0 0367932161 2 6273740453 n 另一个 从这组角度详细说明方向统计 angle error 0 848106563
  • 从 1 到 20 亿,像 (23,29) 这样相差 6 的连续素数对的数量

    如何在考虑时间复杂度的情况下从 1 到 20 亿 使用任何编程语言且不使用任何外部库 找到像 23 29 这样相差 6 的连续素数对的数量 尝试过埃拉托色尼筛 但获得连续素数是一个挑战 使用了生成器 但时间复杂度非常高 代码是 def ge
  • Deploytool for MATLAB R2013b 不起作用,发生了什么变化?

    多年来我一直在使用集成deploytool为我的同事创建易于分发的 exe 文件 我几天前安装了R2013b 但无法使用deploytool不再了 尝试打包时的日志文件给出了以下内容 ant
  • matlab 中的动画绘图

    我正在尝试创建一个三角形的动画图 最终结果应该是十个三角形 后面跟着两个更大的三角形 后面跟着一条直线 使用matlab文档 https de mathworks com help matlab ref drawnow html 我最终得到
  • 将名称字符串编码为唯一的数字

    我有一大堆名字 数以百万计 他们每个人都有一个名字 一个可选的中间名和一个姓氏 我需要将这些名称编码为唯一代表这些名称的数字 编码应该是一对一的 即一个名称只能与一个数字相关联 一个数字只能与一个名称相关联 对此进行编码的明智方法是什么 我

随机推荐

  • bash:$[<算术表达式>] 与 $((<算术表达式>))

    我刚刚偶然发现了 bash 语法 foo 42 bar foo 1 evaluates an arithmetic expression 当我用谷歌搜索这个时 我发现http tldp org LDP Bash Beginners Guid
  • Chrome JavaScript 引擎日期解析默认为 2001 年 [重复]

    这个问题在这里已经有答案了 在 Chrome 中 当字符串不包含年份时 为什么 JavaScript 默认为 2001 t new Date Monday Jan 11 Thu Jan 11 2001 00 00 00 GMT 0000 G
  • 为什么加载 fxml 时会出现 stackoverflow?

    我已经调整了控制器构造函数和 fxml 以便除了 FXML 构造和 fxml 加载之外 fxml 到控制器的所有设置都在 fxml 中 这是我的控制器 public class MainOverviewTab extends Tab FXM
  • 在 JavaScript/Jquery 中获取 DD-Mon-YYYY 格式的当前日期

    我需要在 JavaScript 中获取日期格式为 DD Mon YYYY 我曾问过一个question 并且它被标记为重复jQuery 日期格式 但是 问题中提供的答案是以 DD MM YYYY 格式获取当前日期 而不是 DD MON YY
  • ubuntu中wordpress自动更新的apache和sftp权限[关闭]

    Closed 这个问题是无关 目前不接受答案 这是我第一次尝试在云托管上设置 Wordpress 或任何网站 我在 Ubuntu 服务器上 Wordpress 位于 var www mydomain public 文件夹中 我想要实现的是
  • Excel 2007 中数值的可视化与底层 xml 文件不一致

    我试图从 Excel 外部读取 Excel 2007 文件 xlsx 但发现了无法解释的不一致之处 如果您在单元格中输入值 19 99 然后查看基础 Xml 文档 它实际上存储为 19 989999999999998 这不是执行此操作的唯一
  • Log4j 滚动策略和 MaxbackupIndex

    我使用下面的代码每分钟滚动日志 它工作得很好 log4j appender AllFlows org apache log4j rolling RollingFileAppender log4j appender AllFlows roll
  • 如何使用 Bison 解析 C 字符串

    Closed 这个问题需要细节或清晰度 目前不接受答案 我的 C 文件中有一个字符串 如下所示 char test print x 我想用我编写的 Bison 解析器来解析它 是否可以 Bison 解析器根本不读取输入 他们只是通过重复调用
  • 如何迭代priority_queue?

    我可以遍历一个标准吗priority queue或标准queue在 C 中带有迭代器 比如vector 我不想使用 pop 因为它会导致我的队列出队 谢谢你的帮助 priority queue不允许迭代所有成员 大概是因为很容易使队列的优先
  • 如何通过 _blank 在新窗口中打开链接并在后台打开?

    对于正常链接 a href xxx target blank 链接将在新窗口 或选项卡 中打开 我想知道是否有办法在后台打开它 并保持当前窗口仍然处于活动状态 您先请open新窗口 我们称之为newWindow 做这个 newWindow
  • 如何从{$$state:Object}获取数据?

    我尝试使用工厂从数据库中获取数据 我有一个问题 因为我不知道如何从工厂返回的对象中获取数据 这是我使用 console log 函数时收到的信息 gt d state Object state Object status 1 value A
  • 获取并非每天发生的事件的每日计数

    我有一个customer当客户注册时会在其中插入新行的表 Problem 我想知道给定日期范围内每天的注册总数 例如 查找2015 07 01到2015 07 10每天的注册总数 顾客表样本数据 显示相关列 customerid usern
  • amazon-s3 中的 Errno::ENOENT (没有此类文件或目录)

    我有使用 amazon s3 将图像发布到存储桶部署到 heroku 的应用程序 这工作得很好 但是当获取相同的图像时会出现错误 Errno ENOENT No such file or directory showing path s3
  • 为 CUDA 内核调用设置 Visual Studio Intellisense

    我刚刚开始 CUDA 编程 进展非常顺利 我的 GPU 被识别了等等 我已经使用这里非常有用的指南在 Visual Studio 中部分设置了 Intellisense http www ademiller com blogs tech 2
  • 如何将 C++ 中的 QStringList 显示到 QML ListView

    所以我是 Qt 的新手 我正在努力提高我的 C 技能 所以我决定启动一个项目 在其中我可以使用文本字段搜索 QStringList 中的项目 我使搜索功能正常工作 并且能够将搜索结果移至另一个QStringList 我可以使用它在声明为 公
  • 我如何覆盖核心 Symfony2 类?

    我想重写核心 Symfony2 类 具体来说 我想覆盖供应商 symfony symfony src Symfony Bundle FrameworkBundle Template TemplateReference php Templat
  • 如何在Boost Spirit解析器中打印符号表匹配的变量?

    我是使用初学者boost spirit 假设我有以下代码来解析带有变量的简单算术表达式 include
  • 使用 sed 插入换行符 (\n)

    我正在尝试将一些列表清理到格式正确的 CSV 文件中以进行数据库导入 我的起始文件看起来像这样 每个 行 应该跨越多行 如下所示 Mr John Doe Exclusively Stuff 186 Caravelle Drive Ponte
  • context.filter 在 safari 上不起作用

    我正在使用 React 和 Safari 构建一个绘图应用程序 context filter无法正常工作 下面是在 chrome 和 firefox 上渲染的图片以及在 safari 上渲染的图片 对于 Safari 来说还有其他选择吗 S
  • 使用PCA选择特征

    我正在做无监督分类 为此 我有 8 个特征 绿色方差 绿色标准差 红色平均值 红色方差 红色标准差 色调平均值 色调方差 色调标准差 用于分类每个图像 我想使用 PCA 选择 3 个最重要的特征 我编写了以下代码用于特征选择 其中特征尺寸为