fscmrmr
利用最小冗余最大相关性(MRMR)算法对分类特征进行排序
语法
描述
对特性(预测器)进行排序MRMR算法.表idx
= fscmrmr (资源描述
,ResponseVarName
)资源描述
包含预测变量和响应变量,和ResponseVarName
响应变量的名称是否在资源描述
.函数返回idx
,其中包含按预测器重要性排序的预测器指数。您可以使用idx
为分类问题选择重要的预测因子。
例子
根据重要性对预测器进行排名
加载样例数据。
负载电离层
根据重要性对预测器进行排序。
[idx,分数]= fscmrmr (X, Y);
创建预测者重要性分数的条形图。
栏(分数(idx))包含(“预测排名”) ylabel (“预测重要性分数”)
第一和第二重要预测因子之间的分数下降较大,而第六重要预测因子之后的分数下降相对较小。重要性分数的下降表示特征选择的置信度。因此,大幅下降意味着软件有信心选择最重要的预测因子。小的下降表明预测因子的重要性差异不显著。
选择前五个最重要的预测因素。找到这些预测器的列X
.
idx (1:5)
ans =1×55 4 1 7 24
第五列X
是最重要的预测因素吗Y
.
两种分类模型的特征选择与精度比较
找到重要的预测器fscmrmr
.然后比较完整分类模型(使用所有预测因子)和简化模型(使用5个最重要的预测因子)的准确性testckfold
.
加载census1994数据集。
负载census1994
表adultdata
在census1994
它包含了来自美国人口普查局的人口数据,用来预测一个人的年收入是否超过5万美元。显示表的前三行。
头(adultdata, 3)
年龄workClass fnlwgt教育education_num marital_status种族职业关系性capital_gain capital_loss hours_per_week native_country薪水 ___ ________________ __________ _________ _____________ __________________ _________________ _____________ _____ ____ ____________ ____________ ______________ ______________ ______ 39 State-gov 77516单身汉13未婚Adm-clerical家族的白人男性2174 0 40美国< = 50 k 50 Self-emp-not-inc 83311单身汉13已婚公民配偶行政管理丈夫白人男性0 0 13美国<=50K 38二等兵2.1565e+05 hs毕业生9离异杂工清洁工非家庭成员白人男性0 0 40美国<=50K
的输出参数fscmrmr
只包含按函数排序的变量。在将表传递给函数之前,将不希望排序的变量(包括响应变量和权重)移动到表的末尾,以便输出参数的顺序与表的顺序一致。
表中adultdata
,第三列fnlwgt
是样本的权重,和最后一列工资
是响应变量。移动fnlwgt
的左边工资
通过使用movevars
函数。
adultdata = movevars (adultdata,“fnlwgt”,“之前”,“工资”);头(adultdata, 3)
种族性别年龄workClass教育education_num marital_status职业关系capital_gain capital_loss hours_per_week native_country fnlwgt薪水 ___ ________________ _________ _____________ __________________ _________________ _____________ _____ ____ ____________ ____________ ______________ ______________ __________ ______ 39 State-gov单身汉13未婚Adm-clerical家族的白人男性2174 0 77516美国< = 50 k 50 Self-emp-not-inc单身汉13已婚公民配偶行政管理丈夫白人男性0 0 13美国83311 <=50K 38私立hs毕业生9离异杂工清洁工非家庭成员白人男性0 0 40美国2.1565 +05 <=50K
对预测因子进行排序adultdata
.指定的列工资
作为响应变量。
[idx,分数]= fscmrmr (adultdata,“工资”,“重量”,“fnlwgt”);
创建预测者重要性分数的条形图。的预测器名称x设在标记标签。
栏(分数(idx))包含(“预测排名”) ylabel (“预测重要性分数”) xticklabels (strrep (adultdata.Properties.VariableNames (idx),“_”,“\ _”) xtickangle (45)
五个最重要的预测因素是的关系
,capital_loss
,capital_gain
,教育
,hours_per_week
.
比较使用所有预测因子训练的分类树的准确性与使用五个最重要预测因子训练的分类树的准确性。
使用默认选项创建分类树模板。
C = templateTree;
定义表tbl1
以包含所有预测器和表tbl2
包含五个最重要的预测因子。
tbl1 = adultdata (:, adultdata.Properties.VariableNames (idx (1:13)));tbl2 = adultdata (:, adultdata.Properties.VariableNames (idx (1:5)));
将分类树模板和两个表传递给testckfold
函数。该函数通过重复交叉验证来比较两个模型的准确性。指定“替代”、“大”
检验零假设,即包含所有预测因子的模型,最多与包含五个预测因子的模型一样准确。的“更大的”
选项在以下情况下可用“测试”
是“5 x2t”
(5×2配对t测试)或“10 x10t”
(10 *重复交叉验证t测试)。
(h p) = testckfold (C, C, tbl1、tbl2 adultdata.salary,“重量”adultdata.fnlwgt,“替代”,“更大的”,“测试”,“5 x2t”)
h =逻辑0
p = 0.9969
h
等于0p-value几乎为1,表明无法拒绝零假设。与使用所有预测因子的模型相比,使用带有五个预测因子的模型并不会导致准确性的损失。
现在,使用选定的预测器训练分类树。
mdl = fitctree (adultdata,“工资~人际关系+资本损失+资本收益+教育+每周小时”,...“重量”adultdata.fnlwgt)
mdl = ClassificationTree PredictorNames: {1x5 cell} ResponseName: 'salary' CategoricalPredictors: [1 2] ClassNames: [<=50K >50K] ScoreTransform: 'none' NumObservations: 32561属性,方法
输入参数
资源描述
- - - - - -样本数据
表格
示例数据,指定为表。不允许多列变量和字符向量的单元格数组以外的单元格数组。
每一行的资源描述
对应一个观察结果,每一列对应一个预测变量。可选地,资源描述
可以包含用于响应变量和观察权重的附加列。
响应变量可以是类别、字符或字符串数组、逻辑或数字向量,或者字符向量的单元格数组。如果响应变量是字符数组,则响应变量的每个元素必须对应数组的一行。
如果
资源描述
包含响应变量,并且希望在中使用所有剩余变量资源描述
作为预测器,然后通过使用指定响应变量ResponseVarName
.如果资源描述
还包含观察权重,那么您可以使用权重
.如果
资源描述
包含响应变量,并且您希望仅使用其余变量的子集资源描述
作为预测器,然后通过使用指定变量的子集公式
.如果
资源描述
不包含响应变量,则使用Y
.响应变量和资源描述
必须有相同的行数。
如果fscmrmr
中使用变量的子集资源描述
作为预测器,函数只使用子集索引预测器。中的值“CategoricalPredictors”
名称-值对参数和输出参数idx
不要计算函数不排序的预测器。
fscmrmr
认为南
,”
(空字符向量),""
(空字符串),< >失踪
,<定义>
值资源描述
响应变量缺少值。fscmrmr
不为响应变量使用缺少值的观察值。
数据类型:表格
ResponseVarName
- - - - - -响应变量名
中包含变量名的字符向量或字符串标量资源描述
公式
- - - - - -响应变量和预测变量子集的解释模型
特征向量|字符串标量
响应变量和预测变量子集的解释模型,在形式中指定为字符向量或字符串标量“Y ~ x1 + x2 + x3”
.在这种形式,Y
表示响应变量,和x1
,x2
,x3
表示预测变量。
中指定变量的子集资源描述
作为预测指标,使用公式。如果你指定一个公式,那么fscmrmr
没有对任何变量进行排序资源描述
没有出现在公式
.
公式中的变量名必须是资源描述
(Tbl.Properties.VariableNames
)和有效的MATLAB®标识符。中的变量名可以进行验证资源描述
通过使用isvarname
函数。如果变量名无效,则可以使用matlab.lang.makeValidName
函数。
数据类型:字符
|字符串
Y
- - - - - -反应变量
数值向量|分类向量|逻辑向量|字符数组|字符串数组|字符向量的单元格数组
响应变量,指定为数值、类别或逻辑向量、字符或字符串数组或字符向量的单元格数组。每一行的Y
的对应行的标签X
.
fscmrmr
认为南
,”
(空字符向量),""
(空字符串),< >失踪
,<定义>
值Y
丢失的值fscmrmr
不使用缺失值的观察Y
.
数据类型:单
|双
|分类
|逻辑
|字符
|字符串
|细胞
X
- - - - - -预测数据
数字矩阵
预测数据,指定为数值矩阵。每一行的X
对应一个观察结果,每一列对应一个预测变量。
数据类型:单
|双
名称-值参数
指定可选参数对为Name1 = Value1,…,以=家
,在那里的名字
参数名称和价值
对应的值。名-值参数必须出现在其他参数之后,但对的顺序并不重要。
在R2021a之前,名称和值之间用逗号隔开,并括起来的名字
在报价。
例子:“CategoricalPredictors”,[1 - 2],“详细”,2
将前两个预测变量指定为类别变量,并将冗长级别指定为2。
CategoricalPredictors
- - - - - -直言预测符列表
正整数向量|逻辑向量|字符矩阵|字符串数组|字符向量的单元格数组|“所有”
类别预测器的列表,指定为此表中的值之一。
价值 | 描述 |
---|---|
正整数向量 | 向量中的每个条目都是一个索引值,指示对应的预测器是分类的。索引值在1和之间 如果 |
逻辑向量 | 一个 |
字符矩阵 | 矩阵的每一行都是一个预测变量的名称。名字必须和里面的名字一致资源描述 .用额外的空格填充名字,这样字符矩阵的每一行都有相同的长度。 |
字符向量的字符串数组或单元格数组 | 数组中的每个元素都是一个预测变量的名称。名字必须和里面的名字一致资源描述 . |
“所有” |
所有的预测都是绝对的。 |
默认情况下,如果预测器数据在表中(资源描述
),fscmrmr
如果变量是逻辑向量、无序分类向量、字符数组、字符串数组或字符向量的单元格数组,则假定该变量是分类的。如果预测器数据是一个矩阵(X
),fscmrmr
假设所有的预测器都是连续的。要将任何其他预测器标识为类别预测器,请使用CategoricalPredictors
名称-值参数。
例子:“CategoricalPredictors”、“所有”
例子:CategoricalPredictors=[1 5 6 8]
数据类型:单
|双
|逻辑
|字符
|字符串
|细胞
一会
- - - - - -用于排序的类的名称
分类数组|字符数组|字符串数组|逻辑向量|数值向量|字符向量的单元格数组
用于排序的类的名称,指定为逗号分隔的对,由“类名”
和类别、字符或字符串数组、逻辑或数字向量或字符向量的单元格数组。一会
必须具有与?相同的数据类型Y
或者说响应变量资源描述
.
如果一会
是字符数组,则每个元素必须对应于数组的一行。
使用“类名”
:
的顺序
之前
与类顺序对应的维度。选择一个类的子集进行排名。例如,假设所有不同的类名的集合
Y
是{' a ', ' b ', ' c '}
.利用类的观察结果对预测因子进行排序“一个”
而且“c”
只是,指定“类名”,{' a ', ' c '}
.
的默认值。“类名”
所有不同的类名的集合是否在Y
或者说响应变量资源描述
.默认的“类名”
如果响应变量是有序的,则值具有数学顺序。否则,默认值按字母顺序排列。
例子:“类名”,{' b ', ' g '}
数据类型:分类
|字符
|字符串
|逻辑
|单
|双
|细胞
之前
- - - - - -先验概率
“经验”
(默认)|“统一”
|标量值向量|结构
UseMissing
- - - - - -指示是否在预测器中使用缺失值
假
(默认)|真正的
指示是否在预测器中使用缺失值,指定为任意一种真正的
使用值进行排序,或假
丢弃值。
fscmrmr
认为南
,”
(空字符向量),""
(空字符串),< >失踪
,<定义>
值将丢失值。
如果您指定UseMissing
作为真正的
,然后fscmrmr
使用缺少的值进行排序。对于一个类别变量,fscmrmr
将缺失的值作为额外的类别处理。对于连续变量,fscmrmr
的地方南
值在单独的bin中进行bin。
如果您指定UseMissing
作为假
,然后fscmrmr
不使用缺失值进行排序。因为fscmrmr
计算每对变量的互信息,当该行缺少部分值时,函数不会丢弃整行。fscmrmr
使用不包含缺失值的所有对值。
例子:“UseMissing”,真的
例子:UseMissing = true
数据类型:逻辑
详细的
- - - - - -冗长的水平
0
(默认)|非负整数
冗长级别,指定为逗号分隔的对,由“详细”
和一个非负整数。的价值详细的
控制软件在命令窗口中显示的诊断信息的数量。
0 -
fscmrmr
不显示任何诊断信息。1 -
fscmrmr
显示计算所花费的时间互信息和排名预测。≥2 -
fscmrmr
显示与计算互信息相关的运行时间和更多消息。信息量随着你的增加而增加“详细”
价值。
例子:“详细”,1
数据类型:单
|双
输出参数
更多关于
算法
最小冗余最大相关性(MRMR)算法
MRMR算法[1]找到一个最优的特征集,是相互和最大不相似的,并能有效地表示响应变量。该算法使特征集的冗余最小化,使特征集与响应变量的相关性最大化。该算法利用变量的互信息-特征的两两互信息和特征与响应的互信息来量化冗余和相关性。你可以用这个算法来解决分类问题。
MRMR算法的目标是找到一个最优集合年代最大化的特征V年代的相关性。年代对于响应变量y,最大限度地减少W年代的冗余度年代,在那里V年代而且W年代定义与互信息我:
|的|功能的数量在吗年代.
寻找最优集合年代需要考虑所有2|Ω|组合,Ω是整个功能集。相反,MRMR算法通过正向相加方案对特征进行排序,这需要O(|Ω|·|年代|)通过使用互信息商(MIQ)值进行计算。
在哪里Vx而且Wx为特征的相关性和冗余度,分别为:
的fscmrmr
功能将所有的功能排列在一起Ω并返回idx
(按特征重要性排序的特征指数)使用MRMR算法。因此,计算成本变成O(|Ω|2).该函数使用启发式算法量化特征的重要性,并返回一个分数(分数
).较大的评分值表明相应的预测因子是重要的。此外,特征重要性得分的下降表示特征选择的信心。例如,如果软件有信心选择一个特性x,则下一个最重要特征的分值远小于x.您可以使用输出找到一个最优集合年代对于给定数量的特征。
fscmrmr
rank的特点如下:
选择相关性最大的特征, .将所选特性添加到空集合中年代.
的补中找出非零相关性和零冗余度的特征年代,年代c.
如果年代c不包含非零相关性和零冗余的特性,请转到步骤4。
否则,选择相关性最大的特征, .将所选特性添加到集合中年代.
重复步骤2,直到所有特征的冗余度不为零年代c.
选择MIQ值最大、相关度非零、冗余非零的特征年代c,并将所选特征添加到集合中年代.
重复步骤4,直到所有特征的相关性为零年代c.
添加与之无关的特性年代以随机的顺序。
如果软件不能找到满足该步骤中描述的条件的特征,它可以跳过任何步骤。
参考文献
[1]丁,C,彭h。"从微阵列基因表达数据中选择最小冗余特征"生物信息学与计算生物学杂志。2005年第3卷第2期,185-205页。
[2]达贝利,G. A.和I.瓦伊达。“通过对观测空间的自适应划分来估计信息。”《IEEE信息论汇刊》。1999年第45卷第4期,第1315-1321页。
版本历史
介绍了R2019bR2020a:指定“UseMissing”,真的
在预测器中使用缺失值进行排序
从R2020a开始,您可以通过使用“UseMissing”
名称-值对的论点。的默认值。“UseMissing”
是假
因为统计和机器学习工具箱™中的大多数分类训练函数都不使用缺失值进行训练。
在R2019b,fscmrmr
默认情况下在预测器中使用缺失值。要更新代码,请指定“UseMissing”,真的
.
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入命令来运行该命令。Web浏览器不支持MATLAB命令。
您也可以从以下列表中选择网站:
如何获得最佳的网站性能
选择中国网站(中文或英文)以获得最佳的网站表现。其他MathWorks国家网站没有针对从您的位置访问进行优化。