用MATLAB实现数据挖掘的一种算法知识讲解

合集下载

matlab贝叶斯算法

matlab贝叶斯算法

matlab贝叶斯算法一、引言随着科技的发展,人工智能、数据挖掘等领域的研究日益深入,贝叶斯算法作为一种基于概率推理的方法,在这些领域中得到了广泛的应用。

MATLAB 作为一款强大的数学软件,为贝叶斯算法的实现和应用提供了便利。

本文将介绍贝叶斯算法的原理,以及如何在MATLAB中实现和应用贝叶斯算法。

二、贝叶斯算法的原理1.贝叶斯定理贝叶斯定理是贝叶斯算法的基础,它描述了在已知某条件概率的情况下,求解相关联的逆条件概率。

贝叶斯定理的数学表达式为:P(A|B) = P(B|A) * P(A) / P(B)2.概率论基础贝叶斯算法涉及到的概率论基础包括概率分布、条件概率、独立性等概念。

在实际问题中,我们需要根据已知条件来计算概率分布,从而得出相关联的概率值。

三、MATLAB实现贝叶斯算法的方法1.贝叶斯网络贝叶斯网络是一种基于贝叶斯定理的图形化表示方法,它可以帮助我们构建复杂的问题模型。

在MATLAB中,可以使用Bayes Net Toolbox工具包来创建和计算贝叶斯网络。

2.极大似然估计极大似然估计是一种求解概率模型参数的方法。

在贝叶斯算法中,我们可以通过极大似然估计来优化模型参数,从而提高预测准确性。

在MATLAB中,可以使用统计工具箱中的极大似然估计函数进行计算。

3.朴素贝叶斯分类器朴素贝叶斯分类器是一种基于贝叶斯定理的分类方法,它要求特征之间相互独立。

在MATLAB中,可以使用朴素贝叶斯分类器进行文本分类、故障诊断等任务。

四、实例分析1.故障诊断应用贝叶斯算法在故障诊断领域具有广泛的应用。

通过建立故障诊断模型,可以对设备的故障进行预测和诊断。

例如,在MATLAB中,可以使用朴素贝叶斯分类器对轴承故障数据进行分类。

2.文本分类应用贝叶斯算法在文本分类领域也具有较高的准确率。

通过构建贝叶斯网络模型,可以对文本进行自动分类。

例如,在MATLAB中,可以使用朴素贝叶斯分类器对新闻分类数据进行分类。

利用Matlab进行数据挖掘和预测模型构建的技巧

利用Matlab进行数据挖掘和预测模型构建的技巧

利用Matlab进行数据挖掘和预测模型构建的技巧引言:在当今信息爆炸的时代,数据成为了一种宝贵的资源。

然而,如何从海量的数据中获取有价值的信息,成为了许多领域研究的一大挑战。

数据挖掘和预测模型构建成为了解决这一问题的重要手段。

本文将介绍利用Matlab进行数据挖掘和预测模型构建的一些技巧,帮助读者在实践中更好地运用这一工具。

一、数据挖掘技巧1. 数据清洗数据清洗是数据挖掘的第一步,目的是去除噪声、缺失值和重复数据等。

在Matlab中,可以使用`isnan`函数来检测缺失值,并使用`unique`函数去除重复数据。

对于噪声数据,可以通过可视化分析或统计方法进行识别和处理。

数据清洗能够提高挖掘模型的精度和可靠性。

2. 特征选择特征选择是对数据进行预处理的关键步骤。

选择合适的特征能够提高模型的性能和解释能力。

在Matlab中,可以使用相关系数、信息熵和主成分分析等方法进行特征选择。

此外,还可以通过可视化分析和专业知识进行特征的筛选和提取。

3. 数据可视化数据可视化是帮助理解数据的强大工具。

Matlab中提供了丰富的绘图函数和工具箱,可以绘制各种类型的图表和图形。

通过数据可视化,可以直观地发现数据之间的关系和规律,并辅助特征选择和模型构建。

4. 模型选择与评估在数据挖掘中,选择合适的模型对于预测结果的准确性至关重要。

常用的模型包括线性回归、支持向量机、决策树等。

在Matlab中,可以使用`fitlm`函数进行线性回归分析,使用`svmtrain`函数进行支持向量机模型训练,使用`fitctree`函数进行决策树的构建。

模型评估可以使用交叉验证、AUC、F值等指标进行。

二、预测模型构建技巧1. 数据预处理在预测模型构建中,数据预处理是一个至关重要的步骤。

预处理包括数据清洗、归一化、标准化、特征工程等。

Matlab中提供了丰富的工具函数,例如`normalize`函数进行数据归一化,`zscore`函数进行数据标准化,`featureScaling`函数进行特征缩放。

matlab模糊c均值聚类算法

matlab模糊c均值聚类算法

matlab模糊c均值聚类算法模糊C均值聚类算法是一种广泛应用于数据挖掘、图像分割等领域的聚类算法。

相比于传统的C均值聚类算法,模糊C均值聚类算法能够更好地处理噪声数据和模糊边界。

模糊C均值聚类算法的基本思想是将样本集合分为K个聚类集合,使得每个样本点属于某个聚类集合的概率最大。

同时,每个聚类集合的中心点被计算为该聚类集合中所有样本的均值。

具体实现中,模糊C均值聚类算法引入了模糊化权重向量来描述每个样本点属于各个聚类集合的程度。

这些权重值在每次迭代中被更新,直至达到预设的收敛精度为止。

模糊C均值聚类算法的目标函数可以表示为:J = ∑i∑j(wij)q||xi-cj||2其中,xi表示样本集合中的第i个样本,cj表示第j个聚类集合的中心点,wij表示第i个样本点属于第j个聚类集合的权重,q是模糊指数,通常取2。

不同于C均值聚类算法,模糊C均值聚类算法对每个样本点都考虑了其属于某个聚类集合的概率,因此能够更好地处理模糊边界和噪声数据。

同时,模糊C均值聚类算法可以自适应地确定聚类的数量,从而避免了事先设定聚类数量所带来的限制。

在MATLAB中,可以使用fcm函数实现模糊C均值聚类算法。

具体来说,fcm函数的使用方法如下:[idx,center] = fcm(data,k,[options]);其中,data表示样本矩阵,k表示聚类数量,options是一个包含算法参数的结构体。

fcm函数的输出包括聚类标签idx和聚类中心center。

MATLAB中的fcm函数还提供了其他参数和选项,例如模糊权重阈值、最大迭代次数和收敛精度等。

可以根据具体应用需求来设置这些参数和选项。

MATLAB实现FCM聚类算法

MATLAB实现FCM聚类算法

MATLAB实现FCM聚类算法本⽂在阐述聚类分析⽅法的基础上重点研究FCM聚类算法。

FCM算法是⼀种基于划分的聚类算法,它的思想是使得被划分到同⼀簇的对象之间相似度最⼤,⽽不同簇之间的相似度最⼩。

最后基于MATLAB实现了对图像信息的聚类。

第1章概述聚类分析是数据挖掘的⼀项重要功能,⽽聚类算法是⽬前研究的核⼼,聚类分析就是使⽤聚类算法来发现有意义的聚类,即“物以类聚”。

虽然聚类也可起到分类的作⽤,但和⼤多数分类或预测不同。

⼤多数分类⽅法都是演绎的,即⼈们事先确定某种事物分类的准则或各类别的标准,分类的过程就是⽐较分类的要素与各类别标准,然后将各要素划归于各类别中。

确定事物的分类准则或各类别的标准或多或少带有主观⾊彩。

为获得基于划分聚类分析的全局最优结果,则需要穷举所有可能的对象划分,为此⼤多数应⽤采⽤的常⽤启发⽅法包括:k-均值算法,算法中的每⼀个聚类均⽤相应聚类中对象的均值来表⽰;k-medoid算法,算法中的每⼀个聚类均⽤相应聚类中离聚类中⼼最近的对象来表⽰。

这些启发聚类⽅法在分析中⼩规模数据集以发现圆形或球状聚类时⼯作得很好,但当分析处理⼤规模数据集或复杂数据类型时效果较差,需要对其进⾏扩展。

⽽模糊C均值(Fuzzy C-means,FCM)聚类⽅法,属于基于⽬标函数的模糊聚类算法的范畴。

模糊C均值聚类⽅法是基于⽬标函数的模糊聚类算法理论中最为完善、应⽤最为⼴泛的⼀种算法。

模糊c均值算法最早从硬聚类⽬标函数的优化中导出的。

为了借助⽬标函数法求解聚类问题,⼈们利⽤均⽅逼近理论构造了带约束的⾮线性规划函数,以此来求解聚类问题,从此类内平⽅误差和WGSS(Within-Groups Sum of Squared Error)成为聚类⽬标函数的普遍形式。

随着模糊划分概念的提出,Dunn[10]⾸先将其推⼴到加权WGSS函数,后来由Bezdek扩展到加权WGSS的⽆限族,形成了FCM聚类算法的通⽤聚类准则。

matlab lof离群点检测算法

matlab lof离群点检测算法

matlab lof离群点检测算法离群点检测是数据挖掘和统计学中的一项重要任务,它旨在识别数据集中异常或独特的数据点。

离群点通常表示数据集中潜在的异常模式、错误或欺诈行为。

在许多领域,如金融、医疗、图像处理和自然语言处理,离群点检测都有广泛的应用。

本文将介绍一种基于Matlab的LOF(Local Outlier Factor)离群点检测算法。

一、LOF算法原理LOF算法是一种基于密度的离群点检测方法。

它通过计算每个数据点对本地密度估计的影响来评估其离群程度。

算法的核心思想是,如果一个数据点与邻近数据点的分布不一致,那么它更可能是离群点。

LOF算法通过计算每个数据点对邻近数据点的局部影响,并使用这些影响来评估每个数据点的离群程度。

二、Matlab实现步骤1. 导入数据:首先,将需要检测离群点的数据导入Matlab中。

数据可以来自各种格式,如CSV文件、Excel文件或直接从其他应用程序导入。

2. 创建LOF对象:在Matlab中,可以使用fit方法创建一个LOF对象。

该对象将用于计算每个数据点的离群程度。

3. 拟合模型:使用LOF对象,可以对数据进行多次拟合,以获取每个数据点的离群程度估计。

4. 检测离群点:使用detect方法,可以检测出数据集中离群程度最高的数据点。

这些点可以被视为潜在的异常模式、错误或欺诈行为。

5. 结果可视化:可以使用Matlab的绘图功能,将检测到的离群点可视化,以便更好地理解它们的分布和性质。

三、应用示例假设我们有一组股票价格数据,我们希望检测出价格波动异常的数据点作为潜在的离群点。

首先,我们将数据导入Matlab中,并使用LOF算法创建LOF对象。

然后,我们拟合模型并检测出离群点。

最后,我们将结果可视化,以便更好地理解这些离群点的性质和分布。

四、结论LOF离群点检测算法是一种有效的离群点检测方法,它能够识别出数据集中异常或独特的数据点。

通过在Matlab环境中实现LOF算法,我们可以方便地进行离群点检测,并获得准确的离群程度估计。

蒙特卡洛算法matlab

蒙特卡洛算法matlab

蒙特卡洛算法matlab蒙特卡洛算法(MonteCarloMethod)是一种随机运行算法,它试图解决复杂问题,通过对有限尝试次数和充分大量的数据随机采样,实现预期的目标。

自上世纪30年代以来,蒙特卡洛方法已经广泛应用在金融、经济学、自然科学和社会科学等领域中。

代表性的应用是软件领域中的机器学习和自动化控制研究;在数据挖掘领域,应用更多的是数据挖掘技术。

蒙特卡洛算法在Matlab中的实现分为两个步骤:第一步是算法的建模,第二步是算法的实施。

在建模过程中,首先需要用户定义解决问题的范围,比如要解决什么类型的问题,背景是什么,以及要使用的算法的参数。

建模完成后,就可以使用MATLAB进行算法的实施,包括数据处理、模型搭建和结果输出等。

Matlab中的蒙特卡洛算法的运用非常广泛,从传统的模拟研究到复杂的机器学习应用,都可以使用它来实现。

其中,传统模拟研究要通过建立蒙特卡洛模型来模拟不同变量对系统状态的影响;而复杂机器学习应用,可以使用蒙特卡洛算法来实现自然语义分析,包括文本分析、图像分析以及视频分析等。

Matlab中的蒙特卡洛方法帮助了许多研究人员和工程师解决了许多复杂的研究问题,它展示了强大的计算机技术,使得研究变得更加高效。

同时,Matlab中的蒙特卡洛方法也能节省研究时间和成本,因此它被广泛应用于金融研究、经济学研究以及工程设计中。

此外,Matlab中蒙特卡洛方法还可以应用于数学建模、深度学习和计算机视觉等领域,帮助企业加快计算机技术的发展,以提高企业的效率和盈利能力。

总的来说,Matlab中的蒙特卡洛方法。

是一种非常强大的算法,它可以有效地解决复杂的计算问题。

它的应用范围广泛,可用于金融学,经济学,自然科学等领域,可以极大地提高企业的效率和盈利能力。

因此,在计算机技术日趋复杂的当今时代,Matlab作为一个强大的工具,可以最大限度的发挥其优势,将蒙特卡洛方法发挥到极致。

MATLAB中的关联分析与关联规则挖掘

MATLAB中的关联分析与关联规则挖掘

MATLAB中的关联分析与关联规则挖掘一、引言关联分析是一种在数据挖掘和统计学中广泛应用的技术,用于发现数据集中的关联性规律。

通过关联分析,我们可以从大量的数据中辨识出物品、事件、行为之间的相关性,从而为决策、市场营销、推荐系统等应用领域提供支持。

在MATLAB中,关联分析与关联规则挖掘是一种强大的工具,本文将详细介绍该技术的原理、应用和实现方法。

二、关联分析的原理关联分析的核心思想是寻找数据集中的频繁模式,并根据这些模式推导出潜在的关联规则。

频繁模式是指在数据集中经常出现的组合,而关联规则是关于这些组合之间的条件概率的描述。

通常,我们使用支持度和置信度来度量一个频繁模式或关联规则的重要性。

在MATLAB中,关联分析的实现基于Apriori算法和FP-Growth算法。

Apriori 算法是一种基于迭代的搜索方法,首先从单个项开始,逐步扩展到更大的项集,直到找到满足支持度和置信度要求的频繁项集和关联规则。

FP-Growth算法则是一种更高效的算法,通过构建一种称为FP树的数据结构来实现快速的模式挖掘。

三、关联分析的应用领域关联分析在各个领域都有广泛的应用,下面我们将介绍几个常见的应用领域。

1. 市场篮子分析市场篮子分析是关联分析的典型应用之一。

通过分析顾客购物篮中不同商品之间的关联关系,商家可以了解哪些商品经常被一起购买,从而制定更加精准的促销策略。

MATLAB提供了强大的数据预处理和关联规则挖掘函数,可以帮助商家快速发现潜在的关联规则,并预测不同商品之间的动态关系。

2. 物流优化在物流管理中,关联分析可以帮助企业找到不同产品之间的搭配关系,从而优化仓储和配送策略。

通过分析各种产品的销售数据,企业可以确定哪些产品需要放在同一个仓库,以便提高配送效率,并减少仓储成本。

MATLAB提供了丰富的数据可视化工具,可以帮助企业更好地理解和分析物流数据。

3. 社交网络分析关联分析在社交网络分析中也具有重要作用。

kmeans算法的matlab代码

kmeans算法的matlab代码

K-means算法是一种常用的聚类算法,在数据挖掘和机器学习领域有着广泛的应用。

它的主要思想是将数据分成K个簇,使得同一簇内的数据相似度较高,不同簇之间的数据相似度较低。

在本文中,我们将介绍K-means算法的原理,并给出其在Matlab中的实现代码。

下面是K-means算法在Matlab中的代码实现:1. 初始化簇中心```function [centroids] = initCentroids(X, K)随机初始化K个簇中心[m, n] = size(X);centroids = X(randperm(m, K), :);end```2. 分配样本到最近的簇```function [idx] = findClosestCentroids(X, centroids)根据当前簇中心,将每个样本分配到最近的簇中K = size(centroids, 1);idx = zeros(size(X,1), 1);m = size(X,1);for i=1:mmin_dist = inf;for j=1:Kdist = sum((X(i,:) - centroids(j,:)).^2);if dist < min_distmin_dist = dist;idx(i) = j;endendendend```3. 更新簇中心```function [centroids] =puteCentroids(X, idx, K) 对每个簇重新计算簇中心[m, n] = size(X);centroids = zeros(K, n);for i=1:Kcentroids(i, :) = mean(X(idx == i, :));endend```4. K-means算法主函数```function [centroids, idx] = runkMeans(X, initial_centroids,max_iters)K-means算法的主函数[m, n] = size(X);K = size(initial_centroids, 1);centroids = initial_centroids;previous_centroids = centroids;idx = zeros(m, 1);for i=1:max_iters计算每个样本到簇中心的最短距离idx = findClosestCentroids(X, centroids);更新簇中心centroids =puteCentroids(X, idx, K);endend```通过以上代码,我们可以在Matlab中实现K-means算法,并对数据进行聚类分析。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

用M A T L A B实现数据挖掘的一种算法一、数据挖掘的目的数据挖掘(Data Mining)阶段首先要确定挖掘的任务或目的。

数据挖掘的目的就是得出隐藏在数据中的有价值的信息。

数据挖掘是一门涉及面很广的交叉学科,包括器学习、数理统计、神经网络、数据库、模式识别、粗糙集、模糊数学等相关技术。

它也常被称为“知识发现”。

知识发现(KDD)被认为是从数据中发现有用知识的整个过程。

数据挖掘被认为是KDD过程中的一个特定步骤,它用专门算法从数据中抽取模式(patter,如数据分类、聚类、关联规则发现或序列模式发现等。

数据挖掘主要步骤是:数据准备、数据挖掘、结果的解释评估。

二、数据挖掘算法说明确定了挖掘任务后,就要决定使用什么样的挖掘算法。

由于条件属性在各样本的分布特性和所反映的主观特性的不同, 每一个样本对应于真实情况的局部映射。

建立了粗糙集理论中样本知识与信息之间的对应表示关系, 给出了由属性约简求约简决策表的方法。

基于后离散化策略处理连续属性, 实现离散效率和信息损失之间的动态折衷。

提出相对值条件互信息的概念衡量单一样本中各条件属性的相关性, 可以充分利用现有数据处理不完备信息系统。

本次数据挖掘的方法是两种,一是找到若干条特殊样本,而是找出若干条特殊条件属性。

最后利用这些样本和属性找出关联规则。

(第四部分详细讲解样本和属性的选择)三数据预处理过程数据预处理一般包括消除噪声、推导计算缺值数据、消除重复记录、完成数据类型转换(如把连续值数据转换为离散型数据,以便于符号归纳,或是把离散型数据转换为连续)。

本文使用的数据来源是名为“CardiologyCategorical”的excel文件中的“源数据”。

该数据表共303行,14个属性。

即共有303个样本。

将该数据表的前200行设为训练样本,剩下后的103行作为测试样本,用基于粗糙集理论的属性约简的方法生成相应的规则,再利用测试样本对这些规则进行测试。

首先对源数据进行预处理,主要包括字符型数据的转化和数据的归一化。

数据预处理的第一步是整理源数据,为了便于matlab读取数据,把非数字数据转换为离散型数字数据。

生成lisanhua.xsl文件。

这一部分直接在excel工作表中直接进行。

步骤如下:将属性“sex”中的“Male”用“1”表示,“Female”用“2”表示;将属性“chest pain type”中的“Asymptomatic”用“1”表示,“Abnormal Angina”用“2”表示,“Angina”用“3”表示,“NoTang”用“4”表示;将属性“Fasting blood suga<120”与属性“angina”中的“FALSE”用“1”表示,“TRUE”用“2”表示;将属性“resting ecg”中的“Hyp” 用“1” 表示,“Normal”用“2”表示,“Abnormal”用“3”表示;将属性“slope”中的“Down”用“1”表示,“Flat”用“2”表示,“Up”用“3”表示,;将属性“thal”中的“Rev”用“1”表示,“Normal”用“2”表示,“Fix”用“3”表示;将属性“class”中的“Healthy”用“1”表示,“Sick”用“2”表示;数据预处理的第二步:使用dm=xlsread('lisanhua');导入’lisanhua’.xls文件,在MATLAB中对一些连续属性值离散化。

如下:1、[29,48]=1,[48,62]=2,[62,77]=34、[94,110]=1,[110,143]=2,[143,200]=35、[126,205]=1,[205,293]=2,[293,564]=38、[71,120]=1,[120,175]=2,[175,202]=310、[0,1.5]=1,[1.5,2.5]=2,[2.5,6.2]=3。

然后对数据进行归一化处理:由于不同属性之间的属性值相同,所以利用下面语句对一共13个条件属性中的38个属性进行如下赋值,使每条属性唯一确定。

从而得到38个条件属性,只不过38个里面有且只能出现13个。

程序如下:m1=[0,3,2,4,3,3,2,3,3,2,3,3,4,3];k=1;w=m1(k);dm3=dm2;for i=1:3939dm3(i)=dm2(i)+w;if rem(i,303)==0k=k+1;w=w+m1(k);endend从而得到dm(3)矩阵。

而且决策属性分为1:healthy;2:sick。

并且在38个条件属性中没有值为0。

四、挖掘算法1、特殊样本首先在前200条样本中分别找出三条对应两种决策属性的重要样本,样本必须满足在同类决策属性下其他199条的13条决策属性中和它的13条条件属性数目大于等于10的前3条样本。

2、特殊条件属性值其次分别对应两条决策属性值的5条重要条件属性值(在38个条件属性里找),特殊属性值必须满足:(1)在对应相同决策属性下,此决策属性支持率必须在前五,(2)而且如果不同决策属性出现相同条件属性。

如果相同决策属性同时出现在不同决策属性中,删除这条后找支持率第六的条件属性,以此类推。

挖掘算法在MATLAB里列出并做了标注。

五、验证程序1、预处理在验证程序里面分别对测试数据和六条样本做了对比,又对其属性值和特殊属性值做了对比,最后利用加权求和算法判断测试样本的决策属性正确率。

其中:nc,mc代表测试数据分别和两类样本属性中相同数是否大于等于9时的加权值。

ncc,mcc代表测试数据分别和两类特殊属性满足几条数目的加权值。

2、关联规则(1)、如果(nc>=0.9&ncc>=8)|(ncc>=10&nc>=0.6) 得到决策属性healthy(2)、不满足以上条件的话如果(mc>=0.9|mcc>=8)|(mcc>=9&mc>=0.6) 得到决策属性sick。

(3)、不满足以上条件的话如果nc>=(mc+0.3)|ncc>=(mcc+2) 得到决策属性healthy。

(4)、不满足以上条件的话如果mc>nc 得到决策属性为sick。

(5)、不满足以上条件的话如果ncc>mcc 得到决策属性为healthy。

(6)、不满足以上条件的话如果mcc>ncc 得到决策属性为sick。

(7)、不满足以上条件的话得到决策属性为sick。

六、正确率及结果分析正确率为82.5%结果分析:由于采用了两类约束方法,所以效果还可以。

七、程序如下页所示clear;%%%%% 数据预处理程序 %%%%%%dm=xlsread('lisanhua'); % 载入数据%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% z1=dm(:,1); % 离散化第一列数据for i=1:303if z1(i)>=29&z1(i)<48z1(i)=1;elseif z1(i)>=48&z1(i)<62z1(i)=2;else z1(i)=3;endendz2=dm(:,2);for i=1:303if z2(i)==0z2(i)=1;else z2(i)=2;endendz3=dm(:,3);for i=1:303z3(i)=z3(i)+1;endz4=dm(:,4);for i=1:303if z4(i)>=94&z4(i)<110z4(i)=1;elseif z4(i)>=110&z4(i)<143 z4(i)=2;else z4(i)=3;endendz5=dm(:,5);for i=1:303if z5(i)>=126&z5(i)<205z5(i)=1;elseif z5(i)>=205&z5(i)<293 z5(i)=2;else z5(i)=3;endendz6=dm(:,6);for i=1:303z6(i)=z6(i)+1;endz7=dm(:,7);for i=1:303z7(i)=z7(i)+1;endz8=dm(:,8);for i=1:303if z8(i)>=71&z8(i)<120z8(i)=1;elseif z8(i)>=120&z8(i)<175 z8(i)=2;else z8(i)=3;endendz9=dm(:,9);for i=1:303z9(i)=z9(i)+1;endz10=dm(:,10);for i=1:303if z10(i)>=0&z10(i)<1.5z10(i)=1;elseif z10(i)>=1.5&z10(i)<2.5 z10(i)=2;else z10(i)=3;endendz11=dm(:,11);for i=1:303z11(i)=z11(i)+1;endz12=dm(:,12);for i=1:303z12(i)=z12(i)+1;endz13=dm(:,13);for i=1:303z13(i)=z13(i)+1;endz14=dm(:,14);for i=1:303z14(i)=z14(i)+1;enddm2=[z1,z2,z3,z4,z5,z6,z7,z8,z9,z10,z11,z12,z13,z14];%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%m1=[0,3,2,4,3,3,2,3,3,2,3,3,4,3];k=1;w=m1(k);dm3=dm2;for i=1:3939dm3(i)=dm2(i)+w;if rem(i,303)==0k=k+1;w=w+m1(k);endend%%%%% 预处理结束 %%%%%%%%%% 挖掘算法 %%%%%%%%%%%%%%%%%%%%%%%%%%%%% 找6条样本前的预处理dm4=zeros(200,14);dm5=zeros(200,14);for i=1:200if dm3(i,14)==1dm4(i,1:13)=dm3(i,1:13);else dm5(i,1:13)=dm3(i,1:13);endenda1=zeros(38,1);a2=zeros(38,1); for k=1:38for i=1:13for j=1:200if dm4(j,i)==k&dm4(j,i)~=0 a1(k)=a1(k)+1;endif dm5(j,i)==k&dm5(j,i)~=0 a2(k)=a2(k)+1;endendendenda5=a1;a6=a2;a3=zeros(5,1);a4=zeros(5,1);j=1;while j<6a11=0;a11=max(a1);for i=1:38if a1(i)==a11a3(j)=a11;j=j+1;if j>5break;enda1(i)=0;endendendj=1;while j<6a22=0;a22=max(a2);for i=1:38if a2(i)==a22a4(j)=a22;j=j+1;if j>5break;enda2(i)=0;endendend%%%%%%%%%%%%%%%% 构造h1 h2 矩阵h1=zeros(200,14);h2=zeros(1,200);y1=0;y2=0;y3=0;y4=0;for j=1:200x=0;for i=1:200h1(i,1:13)=dm3(j,1:13)==dm3(i,1:13);h1(i,14)=dm3(j,14)==dm3(i,14);if sum(h1(i,1:13))>=10&h1(i,14)==1x=x+1;endendh2(j)=x;end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 筛选h2 矩阵得到h3 h4矩阵h3=zeros(1,200);h4=zeros(1,200);for i=1:200if z14(i)==1h3(i)=h2(i);else h4(i)=h2(i);endend %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% h5=h3;h6=h4;%%%%%%%%%%%%%% 找六条重要样本 %%%%%%%%% y1=max(h5);for i=1:200if h5(i)==y1h5(i)=0;t1=i;endendy2=max(h5);for i=1:200if h5(i)==y2h5(i)=0;t2=i;endendy3=max(h5);for i=1:200if h5(i)==y3h5(i)=0;t3=i;endendy4=max(h6);for i=1:200if h6(i)==y4h6(i)=0;t4=i;endendy5=max(h6);for i=1:200if h6(i)==y5h6(i)=0;t5=i;endendy6=max(h6);for i=1:200if h6(i)==y6h6(i)=0;t6=i;endend%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%% 找特殊样本结束%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 找特殊属性值dm4=zeros(200,14);dm5=zeros(200,14);for i=1:200if dm3(i,14)==1dm4(i,1:13)=dm3(i,1:13);else dm5(i,1:13)=dm3(i,1:13);endenda1=zeros(38,1);a2=zeros(38,1);for k=1:38for i=1:13for j=1:200if dm4(j,i)==k&dm4(j,i)~=0a1(k)=a1(k)+1;endif dm5(j,i)==k&dm5(j,i)~=0a2(k)=a2(k)+1;endendendenda5=a1;a6=a2;a3=zeros(6,1);a4=zeros(6,1); j=1;while j<7a11=0;a11=max(a1);for i=1:38if a1(i)==a11a3(j)=a11;j=j+1;if j>6break;enda1(i)=0;endendendj=1;while j<7a22=0;a22=max(a2);for i=1:38if a2(i)==a22a4(j)=a22;j=j+1;if j>6break;enda2(i)=0;endendendb1=zeros(6,1);b2=zeros(6,1);for j=1:6for i=1:38if a5(i)==a3(j)b1(j)=i;endendendfor j=1:6for i=1:38if a6(i)==a4(j)b2(j)=i;endendendb3(1:5,1)=b1(2:6,1);b4(1:5,1)=b2(1:5,1);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 寻找结束%%%%%%%%%%%%%%%%%%%%% 验证程序开始h7=zeros(103,14);h8=zeros(103,14);tc=0;for i=1:103h7(i,1:13)=dm3(200+i,1:13);end%%%%%%%%%%%%%%%%%%%%%%%%%% 特殊样本for i=1:103nc=0;mc=0;ncc=0;mcc=0;h8(i,1:13)=h7(i,1:13)==dm3(t1,1:13);if sum(h8(i,1:13))>=9nc=nc+0.3;endh8(i,1:13)=h7(i,1:13)==dm3(t2,1:13);if sum(h8(i,1:13))>=9nc=nc+0.3;endh8(i,1:13)=h7(i,1:13)==dm3(t3,1:13);if sum(h8(i,1:13))>=9nc=nc+0.3;endh8(i,1:13)=h7(i,1:13)==dm3(t4,1:13);if sum(h8(i,1:13))>=9mc=mc+0.3;endh8(i,1:13)=h7(i,1:13)==dm3(t5,1:13);if sum(h8(i,1:13))>=9mc=mc+0.3;endh8(i,1:13)=h7(i,1:13)==dm3(t6,1:13);if sum(h8(i,1:13))>=9mc=mc+0.3;end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 样本结束 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 特殊属性值ncc=0;mcc=0;for j=1:13if h7(i,j)==b3(1)ncc=ncc+3;else if h7(i,j)==b3(2)ncc=ncc+3;else if h7(i,j)==b3(3)ncc=ncc+2;else if h7(i,j)==b3(4)ncc=ncc+2;else if h7(i,j)==b3(5)ncc=ncc+2;else if h7(i,j)==b4(1)mcc=mcc+3;else if h7(i,j)==b4(2)mcc=mcc+3;else if h7(i,j)==b4(3)mcc=mcc+2;else if h7(i,j)==b4(4)mcc=mcc+2;else if h7(i,j)==b4(5)mcc=mcc+2;endendendendendendendendendendend%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 属性值结束%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 挖掘算法 if (nc>=0.9&ncc>=8)|(ncc>=10&nc>=0.6)h7(i,14)=1;else if (mc>=0.9|mcc>=8)|(mcc>=9&mc>=0.6)h7(i,14)=2;else if nc>=(mc+0.3)|ncc>=(mcc+2)h7(i,14)=1;else if mc>nch7(i,14)=2;else if ncc>mcch7(i,14)=1;else if mcc>ncch7(i,14)=2;elseh7(i,14)=2;endendendendendendend %%%%%%%%%%%%%%%%%%%%%%%%% 挖掘结束%%%%%%%%%%%%%%%%%% 计算正确率h9=zeros(103,1);h9=h7(:,14)==dm3(201:303,14);tc=sum(h9)/103 %%%%%%%%%%%%%%%%%%%%%%% 算法完毕。

相关文档
最新文档