今天给各位分享互信息法matlab的知识,其中也会对互信息法常用吗进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
我是用采集到的加速度信号来做两次积分得到位移信号,由于采集到的加速度信号有直流偏移量,所以用了detrend命令做去趋势处理。为了检验代码是否正确,我用了一个标准的正弦函数来验证。代码如下:
t=(0:1:10240-1)/2000;
a=sin(5*t); %标准的正弦函数,准备对其进行两次积分处理
fs=2000;
N=10240;
za=detrend(a); %对采集到的加速度信号去趋势处理(因为采集到的加速度信号有直流偏移量)
v=cumtrapz(t,za); %对加速度信号积分得速度信号
zv=detrend(v); %对速度信号去趋势处理
l=cumtrapz(t,zv); %对速度信号积分得到位移信号
zl=detrend(l); %对位移信号去趋势处理
figure(1)
subplot(3,1,1)
plot(t,za)
title('加速度信号');
subplot(3,1,2)
plot(t,zv)
title('速度信号');
subplot(3,1,3)
plot(t,zl)
title('位移信号');
数据调入程序,不过最好命名为data
因为第二行也调用了
mutual_main(工作间的数据名称)
%说明:
%追赶方法应用于三对角矩阵求解线性方程组的方法,并不适用于其他类型的矩阵。
%三对角矩阵的定义,构成要素。方程Ax
=
D
%B?的对角线元素(为1?n),对角元素为-1(2?N),C
+1对角线元素(1?N-1)。
%A
=
[2
-1
%-1
2
-1
%0
-1
2
-1
%0
-1
2]
=
[2
2
2
2]一个=
[0
-1
-1
-1];
=
[-1
-1
-1];
=
[1
0;
0];
N
=长度(b)条;
U0
=
0;
Y0
=
0;
%“追”的过程
L(1
)=
b
概念:数据预处理是从数据中检测,纠正或删除损坏,不准确或不适用模型的记录的过程
可能面对的问题:
数据预处理的目的:让数据使用模型,匹配模型的需求
数据的无量纲化是指将不同规格的数据转换到统一规格,或者讲不通分布的数据转换到某个特定分布的需求,这种需求统称为数据的无量纲化
将数据压缩到指定的范围,默认为[0,1],也可以通过参数 feature_range 把数据压缩到其他范围
通过方法 inverse_transform ,可以将归一化之后的结果逆转
通过参数 feature_range 把数据压缩到其他范围
通过标准化处理,将数据为标准正态分布
查看标准化之后的平均值和方差,看是否符合标准正态分布
因为 preprocessing.MinMaxScaler 对异常值非常敏感,所以在PCA,聚类,逻辑回归,支持向量机,神经网络这些算法中, StandardScaler 往往是最好的选择
MinMaxScaler 在不涉及距离度量,梯度,方差,协方差计算以及数据需要被压缩到特定区间时使用广泛。
综上,可以优先选择 StandardScaler 当效果不好时可以考虑选择 MinMaxScaler
运用 impute.SimpleImpute(missing_values=np.nan,strategy=,fill_value=,copy) 模块对缺失值进行填充处理
(1)读取修改之后的带有缺失数据的泰坦尼克号数据集
(2) 查看数据集的情况
(3)对 Age 分别用平均值,0,中位数进行缺失值填充
同理使用同样的方法对 Embarked 进行缺失值填充处理
我们也可以直接使用pandas对缺失数据进行填充
在实际生活中我们所收集到的特征信息,并不是以数字表示的,而是以文字表示的,比如收款方式,支付宝或者微信,学历,高中,大学,硕士,这些文字变量,机器学习是无法fit的,所以在建立模型之前要事先对这些变量进行处理,将文字转化为数字变量,这一过程称之为编码,而这些文字本质上代表类别,所以具有分类型数据的特征
同样的标签也可以做哑变量,使用的模块为 preprocessing.LabelBinarizer
根据阈值将数值二值化(将特征值设置为0或1),用于处理连续型变量。大于阈值的值映射为1,而小于或等于阈值的值映射为0,默认阈值为0是,特征中所有的正值为1,负值为0,二值化是对文本计数数据的常见操作,可以决定仅考虑某种现象的存在与否,还可以用作考虑布尔随机变量的估计器的预处理步骤
这是将连续型变量划分为分类变量的类,能够将连续型变量排序之后按顺序分箱后编码
可见x具有相当多的特征,如果将所有的特征都导入矩阵,无疑会给矩阵的运行增加负担,所以我们要事先对齐进行筛选
过滤方法通常做数据的预处理步骤,特征选择完全独立于任何机器学习算法,它是根据各种统计检验中的分数以及相关性的各项指标来选取特征
通过特征本身的方差来筛选特征的类,比如一个特征本身的方差很小,就表示样本在这个特征上基本没有差异,可能是特征中的大多数值都一样,甚至整个特征的取值都相同,那这个特征对于样本区别就没有作用,所以要优先消除方差为0的特征
VarianceThreshold有重要参数threshold,表示方差的阈值,表示舍弃所有方差小于阈值的特征,默认为0,即删除所有记录都相同的特征
可以看到,方差过滤之后剩余的特征还有708个,比之前的784减少了72个,如果我们知道我们需要多少个特征,方差也可以直接帮助我们一次性筛选到位,比如我们希望留下一半的特征,那么我们就把阈值设定为中位数
可以看到使用中位数之后,特征值减少了一半
使用KNN和随机森林对方差过滤前后的模型分别进行建模分析,查看过滤前后的准确度
(1)导入模块并准备数据
(2)KNN方差过滤前
(3)KNN方差过滤后
可以看出,对于KNN过滤之后的效果十分明显,准确率稍有提升,单平均运行时间减少了10分钟,特征选择过后算法的效率上升了1/3
(4)随机森林方差过滤前
(5)随机森林方差过滤之后
可以看到方差过滤前后对随机森林预测的准确率影响不大,对运行时间的影响也不大
这是因为最近邻算法KNN,单棵决策树,支持向量机SVM,神经网络,归回算法,都需要对所有特征进行遍历或升维来进行运算,而随机森林本身就不需要遍历所有的随机变量,只需要选取固定数量的特征就可以进行建模分析,所以方差过滤对其影响不大,
过滤法的主要对象,就是需要遍历特征或升维的算法们,而过滤法的主要目的就是在维持算法表现的前提下,帮助算法们降低运算的成本
卡方过滤是专门针对离散型标签(分类问题)的相关过滤,卡方检验 feature_selection.chi2 计算每非负特征和标签之间的卡方统计量,并依照卡方统计量由高到低的为特征排名,再结合 feature_selection.SelectKBest 这个可以输入“评分标准”来选出前K个分数最高的类,去除独立标签,即与我们分类目的无关的标签
卡方检验检测到某个特征中所有的值都相同,会提示我们进行方差过滤,同时卡方计算的是非负标签,所以我们可以优先对标签进行归一化处理
我们可以看到,模型的效果降低了,说明我们在设置k=300时删除了一些与模型相关且有效的特征,可以通过绘制超参数曲线来找到最佳k值
通过这条曲线,我们可以看到随着K值得不断增加,模型的表现不断上升,这说明K越大越好,即数据中的特征与标签均相关,
卡方检验的本质是推测两组数组之间的差异,其检验的原假设是“两组数据是相互独立的”,卡方检验返回卡防值和P值两个统计量,一般用p值作为有效性的范围界定,即当P值小于0.01或0.05时,我们认为两组数据是相关的,拒绝原假设
从特征工程角度,我们希望选取卡方值很大,p值小于0.05的特征
可以观察到,所有特征的p值都是0,说明对于digit recognizon这个数据集来说。方差验证已经把所有和标签无关的特征剔除掉了,在这种情况下,舍弃任何一个特征,都会舍弃对模型有用信息,从而使模型表现下降
F检验,又称齐方差检验,是用来捕捉每个特征和标签之间的线性关系的过滤方法,包含 feature_selection.f_classif F分类检验和 feature_selection.f_regression F回归检验
和卡方检验相同,这两个类需要和 SelectKBest 连用,F检验在数据服从正态分布的时候非常稳定,所以在使用F检验之前,我们可以先对数据进行标准正态化,然后再进行F检验
F检验的本质是寻找两组数据之间的线性关系,其原假设是“数据不存在显著的线性关系”。它返回F值和p值两个统计量。当p值小于0.01或0.05时我们认为两个变量之间存在线性关系,即我们要舍弃p值大于0.01或0.05的值
得到的结果和卡方过滤得到的结论保持一致,没有任何值得特征大于0.01,所有的特征都是和标签相关的,因此我们不需要相关性过滤
互信息是用来捕捉每个特征与标签之间的任意关系(包括线性和非线性关系)的过滤方法,包含 feature_selection.mutual_info_classif (互信息分类)和 feature_selection.mutual_info_regression (互信息回归)。互信息法返回“每个特征与目标之间的互信息量的估计”,这个估计量在[0,1]之间取值,为0表示两个变量独立,为1表示两个变量完全相关
嵌入法是一种方算法自己决定使用那些特征的方法,即特征选择和算法训练同时进行,在使用嵌入法时,先使用某些机器学习的算法和模型进行训练,得到每个特征的权值系数,根据权值系数从大到小选择特征,这些权值系数代表特征对标签的重要性程度,比如决策树和树的集成模型中的 feature_importances_ 属性,可以列出各个特征对树的建立贡献,因此相对于过滤法,嵌入法的结果会更加精确到模型的效用本身,对于提高模型效力有更好的效果
但是嵌入法返回的是权值系数,我们无法和卡方检验和F检验,通过筛选P值的方式来进行筛选,我们并不知道权值系数处于一个什么样的范围是最好的,因此我们可以使用学习曲线的方式来选取最优权值参数
feature_selection.SelectFromModel(estimator,threshold=None)
SelectModel 是一个元变换器,可以与任何在拟合后具有 coef_ , feature_importances_ 属性或参数中可选惩罚项的评估器一起使用,比如随机森林和树模型就有属性 feature_importances_ ,逻辑回归就带有 l1 和 l2 惩罚项,线性支持向量机也支持 l2 惩罚项
可以看到特征数降为47,但是这样设定阈值是不准确的,我们可以通过绘制学习曲线来找到最优的阈值
从图像上来看,随着阈值越来越高,模型的效果越来越差,被删除的特征值越来越多,信息损失也越来越大,但是在0.00134之前,模型的效果都可以维持在0.93以上,因此我们可以继续选定一个范围,细化学习曲线来找到最佳值
从图像上可以看到阈值为0.000564时模型的效果是最好的,我们可以把0.000564带入模型看一下效果
可以看到模型的准确率升高为94%点多,因此,比起要考虑很多统计量的过滤法来说,前复发可能是更有效的一种方法,然而,在算法本身复杂的时候,过滤法的计算量远远比嵌入法快,所以在大型数据中,还是要优先考虑过滤法
包装法也是特征选择和算法同时进行的方法,与嵌入法相同的是包装法也是通过模型训练之后的 feature_importantances_ 或者 coef_ 来进行特征的选择,与嵌入法不同的是包装法不需要我们指定阈值,包装法通过 coef_ 属性或 feature_importantances_ 属性获得每个特征的重要性,然后从当前的一组特征中修剪最不重要的特征。在修剪的集合上地柜地重复该过程,直到最终到达所需数量的要选择的特征
包装法是最能保证模型效果的特征选择方法,但是包装法要使用特征子集进行多次训练,所以包装法需要的计算成本是最高的
feature_selection.RFE(estimator,n_features_to_select=None,step=1,verbose=0)
feature_selection.RFECV(estimator,n_features_to_select=None,step=1,verbose=0,cv=5)
参数 estimator 是需要填写的实例化后的评估器, n_features_to_select 是想要选择的特征个数, step 表示每次迭代中希望移除的特征个数。除此之外,RFE类有两个很重要的属性, support_ 返回所有的特征的是否最后被选中的布尔矩阵,以及 ranking_ 返回特征的按数次迭代中综合重要性的排名。类feature_selection.RFECV会在交叉验证循环中执行RFE以找到最佳数量的特征,增加参数cv,其他用法都和RFE一模一样。
使用超参数曲线寻找最优的特征保留数目
明显可以看出,在包装法下,应用50个特征时,模型的表现就已经达到了90%,比嵌入法和过滤法都高效很多,在特征数相同的情况下,包装法在效果上匹敌嵌入法,同样我们也可以进一步细化超参数曲线来找到最优的特征数。
语料库不清楚,但是特征选择还是比较清楚的,既然是特征选择,你要搞清楚你的语料库的数据怎么样才算一维特征,比如一个数据矩阵,一列代表一个特征,一行表示一个样本点。
互信息特征选择的方法也很多,要是不想搞清楚具体怎么做的话,起码要先搞清楚MATLAB程序的结构,究竟是让你输入一个什么样的数据(程序一般会告诉你一行数据是表示一维特征还是一个样本点),还有就是注意MATLAB程序说明中有没有对数据的要求,比如规定只接受离散数据
关于互信息法matlab和互信息法常用吗的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件至举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
标签: #互信息法matlab
相关文章