导航:首页 > 源码编译 > 数据融合常见算法

数据融合常见算法

发布时间:2023-11-24 19:17:46

‘壹’ 用于数据挖掘的聚类算法有哪些,各有何优势

聚类方法的分类,主要分为层次化聚类算法,划分式聚类算法,基于密度的聚类算法,基于网格的聚类算法,基于模型的聚类算法等。

而衡量聚类算法优劣的标准主要是这几个方面:处理大的数据集的能力;处理任意形状,包括有间隙的嵌套的数据的能力;算法处理的结果与数据输入的顺序是否相关,也就是说算法是否独立于数据输入顺序;处理数据噪声的能力;是否需要预先知道聚类个数,是否需要用户给出领域知识;算法处理有很多属性数据的能力,也就是对数据维数是否敏感。

.聚类算法主要有两种算法,一种是自下而上法(bottom-up),一种是自上而下法(top-down)。这两种路径本质上各有优势,主要看实际应用的时候要根据数据适用于哪一种,Hierarchical methods中比较新的算法有BIRCH主要是在数据体量很大的时候使用;ROCK优势在于异常数据抗干扰性强……

关于数据挖掘的相关学习,推荐CDA数据师的相关课程,课程以项目调动学员数据挖掘实用能力的场景式教学为主,在讲师设计的业务场景下由讲师不断提出业务问题,再由学员循序渐进思考并操作解决问题的过程中,帮助学员掌握真正过硬的解决业务问题的数据挖掘能力。这种教学方式能够引发学员的独立思考及主观能动性,学员掌握的技能知识可以快速转化为自身能够灵活应用的技能,在面对不同场景时能够自由发挥。点击预约免费试听课。

‘贰’ 不同分辨率图像的融合

遥感数据的融合是指采用一种复合模型结构,将不同传感器遥感影像数据源所提供的信息加以综合,以获取高质量的影像信息,同时消除各传感器信息间的信息冗余和矛盾,加以互补,降低其不确定性,减少模糊度,以增强影像中信息清晰度,提高解译精度、可靠性和使用率,以形成对目标相对完整一致的信息描述。

对地质矿产勘查而言,数据的融合目的主要是:①可以明显地改善目标的显示效果,将原始图像中灰色调转化为彩色调;②融合后图像噪声可以很好地被抑制,肉眼对地物判译更加容易;③地物边缘轮廓因彩色更加突出,地物纹理更加清晰。这些很明显可以起到增强岩体、构造的可解性。

目前融合方法有:Lab变换、HIS变换、BROVEY变换、线形复合与乘积运算以及近几年发展起来的小波变换等。这些融合方法在影像的处理上存在有不同偏向,因此要根据不同地物在影像的光谱表现上存在差异,采取不同的处理方法。

(一)微波遥感数据与TM数据融合处理

此次工作所采用的方法为可视化三维动态变换方法。

图1-5 SAR图像灰度拉伸关系图

1.融合前的SAR数据特征增强处理

为了突出SAR数据(彩图1-5a)较高分辨率的优势,在融合前有必要对SAR进行灰度拉伸、纹理增强和细化处理减少噪声等预处理。

(1)灰度线性拉伸

融合之前的拉伸方法不采用非线性拉伸,原因在于经过非线性拉伸后的图像数据,原始灰度值的大小关系会发生变化,产生的灰度扭曲带来了一些含义不明确的伪信息,影响解译。因此,特别强调在增强局部灰度反差时保持原灰度关系的重要性。实验表明,运用直观而简单的线性拉伸方法就可以达到反差增强的效果。其原理如图1-5。

设A1、A2为输入图像的嵌位控制值,B1、B2为拉伸后图像的最低和最高亮度值。

其输入的图像亮度值A1—A2被拉伸为B1—B2范围,其中输入亮度0—A1及A2—255分别被变换为B1、B2,如果B1=0、B2=255则拉大了输入图像的动态范围,从而反差得到增强。这是嵌位控制的结果,从而保持了输入图像亮度的线性关系,即没有改变A1到A2之间亮度值的大小关系,只是拉开了直方图的动态范围,从而加大了灰度间的差距,增强了影像的细微和突变结构。

(2)纹理能量增强

相邻像元之间亮度值的差异(梯度)可作为纹理的测度。当差异大于一个阈值时,则认为该处存在着要考虑的纹理特征;将此类特征累积统计,则为纹理能量;当局部纹理特征丰富时,则纹理能量大而表现为亮度值高。

SAR图像主要提供的是空间信息,为了使融合后的图像具有较高的空间分辨能力,对SAR图像进行纹理增强及提取是必不可少的。为了突出地貌、线性构造等信息,采用直方图偏度值法。其公式如下:

1∶25万遥感地质填图方法和技术

c(n)是对u进行压缩或拉伸后的值。

利用此纹理值作为权重,对SAR进行高通滤波,可以突出纹理信息。

目前纹理能量增强主要靠模板(3×3、5×5、7×7等)实现,模板推移扫描对每个像元进行增强处理,考虑到增强纹理会带来不必要的噪声,模板的尺寸不易过大,试验表明使用3×3、5×5两个模板的增强效果显着。

2.参与融合的非SAR数据的处理

在融合图像中,参与融合的非SAR数据的贡献就是它们的光谱信息。融合前对它们的处理以彩色增强为主,调整其亮度、色度、饱和度,拉开不同地物之间的色彩反差。对局部纹理的要求不高,有时为了保证光谱色彩,还允许牺牲部分纹理信息来确保融合图像的总体效果。

通常所说的图像增强是一维图像增强,即先在单波段上进行反差增强,然后把增强后的三个波段合成在一起。这种方法在有些地区,由于地表信息接近,波段间的相关性强,合成的图像反差小,色彩不鲜艳。因此,我们在反复试验的实践中,摸索出三维反差增强方法,获得了色彩鲜艳且保留原始影像信息的彩色图像(彩图1-5b)。

三维反差增强技术的实质是,扩大同名点像元在合成的三个波段上的灰度差异,使该同名点合成的色彩鲜艳,达到彩色增强的目的;使图像上不同地物间的微小的灰度差异也能增强成明显的色彩差异,从而达到增强图像信息的效果。这是一种用颜色来突出地质、地理信息的方法,这种方法比单纯用灰度差异突出地质、地理信息更加有效。

实现三维反差增强技术有两个约束条件:其一,增强后的图像同名点像元的灰度值在三个波段上的灰度值仍然保持原来大小的相对关系,也就是说原来灰度值小的增强以后还是小的,原来灰度值大的增强以后还是大的;其二,增强后的图像同名点像元在三个波段上的灰度值之和保持不变,只是同名点像元在三个波段上的灰度值的差异扩大,使彩色合成后的色彩鲜艳、信息丰富并保持原来标准假彩色合成的特点。

为了扩大不同地质体的光谱信息的差异,还可采用波段特征差异光谱加权方法,其算法如下:

设R,G,B为经过三维反差增强后的红、绿、蓝三个彩色分量;R0,G0,B0为输出图像的三个分量;Gb,Bg为波段特征差异;α,β为两个常数。

1∶25万遥感地质填图方法和技术

将生成的三个新分量再进行彩色合成,扩大了地物间的色彩差异,减少了相关性。上述融合方法的最大优点是可以对隔合图像的锐度、灰度、色彩等空间信息分离并进行动态跟踪处理,直到获取满意的结果为止。

(二)不同分辨率多光谱数据融合处理

在干旱裸露地区,利用Landsat TM L7卫星影像制作影像图,与L5不同,L7有一个全色波段 B8,它的空间分辨率为15 m,为了提高图像解译的可识别性,在提高空间分辨率的同时,又充分利用多光谱波段的波谱信息,将L7自身所有的30 m空间分辨率的多光谱波段(彩图1-6a)与15 m分辨率的全色波段进行信息融合,可得到高分辨率的彩色图像(彩图1-6b)。同时我们在植被覆盖试验区,利用高分辨率 SPOT卫星图像(彩图1-6c)与TM图像的多光谱波段进行融合(彩图1-6d),进而提高遥感解译的可靠性,得到 TM图像和SPOT图像的彩色模拟,它的原理是:

首先将两种分辨率的图像进行配准,配准精度应在一个像元以内,我们在干旱裸露试验区进行的四景L7图像配准,最大拟合误差为0.85像元;SPOT图像16景与TM图像的配准误差最大为0.95像元。L7自身配准时纠正函数选择一次多项式,不同传感器图像配准时选择二次多项式。

然后选择的三个波段(干旱裸露试验区:7,4,1;植被覆盖试验区:5,3,2作HIS变换得到三个分量,用高分辨率的图像替代I分量,在进行反变换,重新得到RGB图像。这个模拟图像既有高分辨率图像的较高空间分辨率,又具有彩色图像的光谱信息。

‘叁’ 多源异构数据融合技术要用到什么算法

经纬仪引导数据的数据融合可以采用参数估计融合算法,即对8组引导数据,按照某种估计准则函数,利用引导数据序列对目标在空间的位置值作出估计,得到目标准确的位置值,消除引导过程中的不确定性。 为准确估计目标的位置值(以Y为例),对8组引导数据进行线性观测,得到的引导值为Cj,Y,j=1,2,3,…,n,其中:Cj为常值。 由于观测有误差,实际所得的引导值为:Ej=CjY十cj,其中ej为观测误差,服从均值为0的正态分布。 依据Bayes后验估计理论,可得到n个引导数据的状态最优估计为: ^Yop,(E1E2E3...En)=maxP(Y│E1E2E3...En) (1) Y^ 即位置的数据融合问题,可以转化为求出满足Y的最大后验概率maxP(Y│E)的估计值Y(E)的问题。在经纬仪实时测量中,对多路引导源的异构引导数据,采用分布图法进行数据合理性检测,采用参数估计的逻辑规则进行数据融合,消除各引导数据的不确定性,可以获得更准确、更可靠的引导数据,从而提高整个测量系统的工作性能。即使某一个甚至几个引导源工作同时不正常时,其他引导源不受影响独立地提供信息,指挥中心仍可依据非失效的引导数据获知目标的准确位置,将失效的经纬仪很快的引导到目标观测点,降低了整个测量系统的脆弱程度。

‘肆’ k-means算法怎么为对称矩阵进行聚类

几种典型的聚类融合算法:
1.基于超图划分的聚类融合算法
(1)Cluster-based Similarity Partitioning Algorithm(GSPA)
(2)Hyper Graph-Partitioning Algorithm(HGPA)
(3)Meta-Clustering Algorithm(MCLA)
2.基于关联矩阵的聚类融合算法
Voting-K-Means算法。
3.基于投票策略的聚类融合算法
w-vote是一种典型的基于加权投票的聚类融合算法。
同时还有基于互信息的聚类融合算法和基于有限混合模型的聚类融合算法。
二、基于关联矩阵的聚类融合算法——Voting-K-Means算法
Voting-K-Means算法是一种基于关联矩阵的聚类融合算法,关联矩阵的每一行和每一列代表一个数据点,关联矩阵的元素表示数据集中数据点对共同出现在同一个簇中的概率。
算法过程:
1.在一个数据集上得到若干个聚类成员;
2.依次扫描这些聚类成员,如果数据点i和j在某个聚类成员中被划分到同一个簇中,那么就在关联矩阵对应的位置计数加1;关联矩阵中的元素值越大,说明该元素对应的两个数据点被划分到同一个簇中的概率越大;
3.得到关联矩阵之后,Voting-K-Means算法依次检查关联矩阵中的每个元素,如果它的值大于算法预先设定的阀值,就把这个元素对应的两个数据点划分到同一个簇中。

Voting-K-Means算法的优缺点:
Voting-K-Means算法不需要设置任何参数,在聚类融合的过程中可以自动地的选择簇的个数 并且可以处理任意形状的簇。因为Voting-K-Means算法在聚类融合过程中是根据两个数据点共同出现在同一个簇中的可能性大小对它们进行划分的,所以只要两个数据点距离足够近,它们就会被划分到一个簇中。
Voting-K-Means算法的缺点是时间复杂度较高,它的时间复杂度是O(n^2);需要较多的聚类成员,如果聚类成员达不到一定规模,那么关联矩阵就不能准确反映出两个数据点出现在同一个簇的概率。

package clustering;import java.io.FileWriter;import weka.clusterers.ClusterEvaluation;import weka.clusterers.SimpleKMeans;import weka.core.DistanceFunction;import weka.core.EuclideanDistance;import weka.core.Instances;import weka.core.converters.ConverterUtils.DataSource;import weka.filters.unsupervised.attribute.Remove;public class Votingkmeans2 extends SimpleKMeans { /** 生成的序列号 */ private static final long serialVersionUID = 1557181390469997876L; /** 划分的簇数 */ private int m_NumClusters; /** 每个划分的簇中的实例的数量 */ public int[] m_ClusterSizes; /** 使用的距离函数,这里是欧几里德距离 */ protected DistanceFunction m_DistanceFunction = new EuclideanDistance(); /** 实例的簇号赋值 */ protected int[] m_Assignments; /** 设定聚类成员融合阀值 */ private final static double THREASOD = 0.5; /** 生成一个聚类器 */ public void buildClusterer(Instances data) throws Exception{ final int numinst = data.numInstances(); // 数据集的大小 double [][]association = new double[numinst][numinst]; // 定义并初始化一个关联矩阵 int numIteration = 40; // 设置生成的聚类成员数 final int k = (int)Math.sqrt(numinst); // 设置K-Means聚类算法参数——簇数 for(int i = 0; i < numIteration; i++) { if(data.classIndex() == -1) data.setClassIndex(data.numAttributes() - 1); // 索引是从0开始 String[] filteroption = new String[2]; filteroption[0] = "-R"; filteroption[1] = String.valueOf(data.classIndex() + 1);// 索引是从1开始 Remove remove = new Remove(); remove.setOptions(filteroption); remove.setInputFormat(data); /* 使用过滤器模式生成新的数据集;新数据集是去掉类标签之后的数据集 */ Instances newdata = weka.filters.Filter.useFilter(data, remove); /* 生成一个K-Means聚类器 */ SimpleKMeans sm = new SimpleKMeans(); sm.setNumClusters(k); sm.setPreserveInstancesOrder(true); // 保持数据集实例的原始顺序 sm.setSeed(i); // 通过设置不同的种子,设置不同的簇初始中心点,从而得到不同的聚类结果 sm.buildClusterer(newdata); int[] assigm = sm.getAssignments(); // 得到数据集各个实例的赋值 /* 建立关联矩阵 */ for(int j = 0; j < numinst; j++) { for(int m = j; m < numinst; m++) { if(assigm[j] == assigm[m]) { association[j][m] = association[j][m] + 1.0 / numIteration ; } } } } System.out.println(); /* 将生成的关联矩阵写入.txt文件(注:生成的txt文本文件在e:/result.txt中) */ FileWriter fw = new FileWriter("e://result.txt"); for(int j = 0; j < numinst; j++) { for(int m = j; m < numinst; m++) { //由于关联矩阵是对称的,为了改进算法的效率,只计算矩阵的上三角 String number = String.format("%8.2f", association[j][m]); fw.write(number); } fw.write("\n"); } /* 处理关联矩阵,分别考虑了两种情况 :1.关联矩阵中某个元素对应的两个数据点已经被划分到了不同的簇中 * 2.两个数据点中有一个或者两个都没有被划分到某个簇中。 */ int[] flag = new int[numinst]; int[] flagk = new int[k]; int[] finallabel = new int[numinst]; for(int m = 0; m < numinst; m++) { for(int n = m; n < numinst; n++) { if(association[m][n] > THREASOD) { if(flag[m] == 0 && flag[n] == 0) { // 两个数据点都没有被划分到某个簇中, int i = 0; // 将他们划分到同一个簇中即可 while (i < k && flagk[i] == 1) i = i + 1; finallabel[m] = i; finallabel[n] = i; flag[m] = 1; flag[n] = 1; flagk[i] = 1; } else if (flag[m] == 0 && flag[n] == 1) { // 两个数据点中有一个没有被划分到某个簇中, finallabel[m] = finallabel[n]; // 将他们划分到同一个簇中即可 flag[m] = 1; } else if (flag[m] == 1 && flag[n] == 0) { finallabel[n] = finallabel[m]; flag[n] = 1; } else if (flag[m] == 1 && flag[n] == 1 && finallabel[m] != finallabel[n]) { // 两个数据点已被划分到了不同的簇中, flagk[finallabel[n]] = 0; // 将它们所在的簇合并 int temp = finallabel[n]; for(int i = 0; i < numinst; i++) { if(finallabel[i] == temp) finallabel[i] = finallabel[m]; } } } } } m_Assignments = new int[numinst]; System.out.println("基于关联矩阵的聚类融合算法——Voting-K-Means算法的最终聚类结果"); for(int i = 0; i < numinst; i++) { m_Assignments[i] = finallabel[i]; System.out.print(finallabel[i] + " "); if((i+1) % 50 == 0) System.out.println(); } for(int i = 0; i < k; i++) { if(flagk[i] == 1) m_NumClusters++; } } /** * return a string describing this clusterer * * @return a description of the clusterer as a string */ public String toString() { return "Voting-KMeans\n"; } public static void main(String []args) { try {String filename="e://weka-data//iris.arff"; Instances data = DataSource.read(filename); Votingkmeans2 vk = new Votingkmeans2(); vk.buildClusterer(data); /* 要生成Voting-K-Means的聚类评估结果包括准确率等需要覆盖重写toString()方法; * 因为没有覆盖重写,所以这里生产的评估结果没有具体内容。 */ ClusterEvaluation eval = new ClusterEvaluation(); eval.setClusterer(vk); eval.evaluateClusterer(new Instances(data)); System.out.println(eval.clusterResultsToString()); } catch (Exception e) { e.printStackTrace(); }}}

分析代码时注意:得到的类成员变量m_Assignments就是最终Voting-K-Means聚类结果;由于是采用了开源机器学习软件Weka中实现的SimpleKMeans聚类算法,初始时要指定簇的个数,这里是数据集大小开根号向下取整;指定的阀值为0.5,即当关联矩阵元素的值大于阀值时,才对该元素对应的两个数据点进行融合,划分到一个簇中,考虑两种情况,代码注释已有,这里不再详述。但聚类融合的实验结果并不理想,莺尾花数据集irsi.arff是数据挖掘实验中最常用的数据集,原数据集共有三个类;但本实验进行四十个聚类成员的融合,其最终聚类结果划分成两个簇;其原因可能有两个:一是算法本身的问题,需要使用其他更加优化的聚类融合算法;二是实现上的问题,主要就在聚类结果的融合上,需要进行一步对照关联矩阵进行逻辑上的分析,找出代码中的问题。关联矩阵文本文件http://download.csdn.net/detail/lhkaikai/7294323

---------------------

本文来自 Turingkk 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/lhkaikai/article/details/25004823?utm_source=

阅读全文

与数据融合常见算法相关的资料

热点内容
微信大转盘抽奖源码 浏览:495
压缩机损坏的表现 浏览:860
同步数据服务器怎么用 浏览:632
163邮箱服务器的ip地址 浏览:48
服务器跟域是什么 浏览:126
rails启动命令 浏览:463
logistic命令怎么用 浏览:736
c语言点滴pdf 浏览:745
linuxrtc编程 浏览:256
linux打包并压缩命令 浏览:642
aes加密的证书格式 浏览:97
oracledbcalinux 浏览:842
酬勤任务app怎么被特邀 浏览:197
android应用文件夹 浏览:1000
平面设计法则pdf 浏览:337
3d圆角命令怎么用 浏览:567
程序员买意外险还是重疾险 浏览:619
辽宁的dns服务器地址云空间 浏览:446
我的世界服务器断开后怎么连接 浏览:413
htmltopdfpython 浏览:75