用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模糊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实现大数据挖掘地一种算法

一、数据挖掘的目的数据挖掘(Data Mining)阶段首先要确定挖掘的任务或目的。
数据挖掘的目的就是得出隐藏在数据中的有价值的信息。
数据挖掘是一门涉及面很广的交叉学科,包括器学习、数理统计、神经网络、数据库、模式识别、粗糙集、模糊数学等相关技术。
它也常被称为“知识发现”。
知识发现(KDD)被认为是从数据中发现有用知识的整个过程。
数据挖掘被认为是KDD过程中的一个特定步骤,它用专门算法从数据中抽取模式(patter,如数据分类、聚类、关联规则发现或序列模式发现等。
数据挖掘主要步骤是:数据准备、数据挖掘、结果的解释评估。
二、数据挖掘算法说明确定了挖掘任务后,就要决定使用什么样的挖掘算法。
由于条件属性在各样本的分布特性和所反映的主观特性的不同, 每一个样本对应于真实情况的局部映射。
建立了粗糙集理论中样本知识与信息之间的对应表示关系, 给出了由属性约简求约简决策表的方法。
基于后离散化策略处理连续属性, 实现离散效率和信息损失之间的动态折衷。
提出相对值条件互信息的概念衡量单一样本中各条件属性的相关性, 可以充分利用现有数据处理不完备信息系统。
本次数据挖掘的方法是两种,一是找到若干条特殊样本,而是找出若干条特殊条件属性。
最后利用这些样本和属性找出关联规则。
(第四部分详细讲解样本和属性的选择)三数据预处理过程数据预处理一般包括消除噪声、推导计算缺值数据、消除重复记录、完成数据类型转换(如把连续值数据转换为离散型数据,以便于符号归纳,或是把离散型数据转换为连续)。
本文使用的数据来源是名为“CardiologyCategorical”的excel文件中的“源数据”。
该数据表共303行,14个属性。
即共有303个样本。
将该数据表的前200行设为训练样本,剩下后的103行作为测试样本,用基于粗糙集理论的属性约简的方法生成相应的规则,再利用测试样本对这些规则进行测试。
首先对源数据进行预处理,主要包括字符型数据的转化和数据的归一化。
fp-tree算法的matlab程序

FP树算法的MATLAB程序示例FP树(频繁模式树)算法是一种用于挖掘频繁模式的数据挖掘算法。
下面是一个基于事实的FP树算法的MATLAB 程序示例:function [frequent_patterns] = fp_tree(data, min_support) % 构建频繁模式树root = create_tree(data);% 获取频繁项集frequent_patterns = mine_patterns(root, min_support);endfunction [root] = create_tree(data)root = struct('item', 'null', 'count', 0, 'children', {});% 统计每个项的计数item_counts = containers.Map();for i = 1:length(data)itemset = data{i};for j = 1:length(itemset)item = itemset{j};if isKey(item_counts, item)item_counts(item) = item_counts(item)+ 1;elseitem_counts(item) = 1;endendend% 删除不满足最小支持度的项items = keys(item_counts);for i = 1:length(items)item = items{i};if item_counts(item) < min_supportremove(item_counts, item);endend% 如果没有满足最小支持度的项,返回空树if isempty(keys(item_counts))return;end% 对每个事务中的项按照支持度降序排序for i = 1:length(data)itemset = data{i};[~, sorted_indices] = sort(cellfun(@(x) item_counts(x), itemset), 'descend');data{i} = itemset(sorted_indices);end% 构建树for i = 1:length(data)itemset = data{i};insert_tree(root, itemset, item_counts);endendfunction [] = insert_tree(node, itemset, item_counts)if isempty(itemset)return;enditem = itemset{1};child = find_child(node, item);if isempty(child)child = struct('item', item, 'count', item_counts(item), 'children', {});node.children{end+1} = child;elsechild.count = child.count + item_counts(item);endinsert_tree(child, itemset(2:end), item_counts);endfunction [child] = find_child(node, item)children = node.children;for i = 1:length(children)if strcmp(children{i}.item, item)child = children{i};return;endendchild = [];endfunction [frequent_patterns] = mine_patterns(root, min_support)frequent_patterns = struct('pattern', {}, 'support', []);if isempty(root.children)return;endfor i = 1:length(root.children)child = root.children{i};pattern = {child.item};support = child.count;frequent_patterns(end+1) = struct('pattern', pattern, 'support', support);subtree_data = get_subtree_data(child);subtree_patterns = fp_tree(subtree_data, min_support);frequent_patterns = [frequent_patterns, subtree_patterns];endendfunction [subtree_data] = get_subtree_data(node)subtree_data = {};if isempty(node.children)return;endsubtree_data = cell(1, node.count);for i = 1:length(node.children)child = node.children{i};for j = 1:child.countsubtree_data{j} = [subtree_data{j}, child.item];endendend这是一个简化的FP树算法的MATLAB实现。
k均值算法matlab -回复

k均值算法matlab -回复【k均值算法matlab】是一种常用的聚类算法,用于将具有类似特征的数据点分组。
聚类是数据挖掘领域中的一项重要任务,它能够揭示数据集中的模式和关系。
k均值算法是一种简单而强大的聚类方法,本文将逐步介绍k均值算法在matlab中的使用。
首先,我们需要明确k均值算法的原理。
k均值算法的目标是最小化数据点到其所属簇中心的欧几里得距离之和。
算法的步骤如下:1. 初始化:选择k个初始中心点,可以随机选择数据集中的k个样本作为初始中心点。
2. 分配:对于每个数据点,计算其到k个中心点的欧几里得距离,将其分配到距离最近的中心点所属的簇。
3. 更新:对于每个簇,计算该簇中所有点的平均值,将其作为新的中心点。
4. 重复2和3步骤,直到收敛。
当中心点不再变化或者达到预定的迭代次数时,停止迭代。
现在,让我们进入matlab中实现k均值算法的过程。
第一步,载入数据集。
假设我们有一个包含n个数据点的m维数据集X,其中每一行表示一个数据点,每一列表示一个特征。
在matlab中,可以用load函数将数据集载入。
第二步,初始化中心点。
使用randperm函数生成一个长度为k的随机排列向量,根据这个向量选择k个初始中心点。
可以使用matlab的randperm函数:matlabk = 3; 假设k=3rand_idx = randperm(n);centers = X(rand_idx(1:k), :); 选择前k个数据点作为初始中心点第三步,进行分配和更新。
使用一个while循环来实现k均值算法的迭代过程。
初始化一个n行1列的矩阵idx,用于存储每个数据点所属的簇的索引。
同时,使用一个变量changed来记录每次迭代中中心点是否发生变化。
代码如下:matlabidx = zeros(n, 1);changed = true;while changedchanged = false;分配for i = 1:ndist = sum((X(i,:) - centers).^2, 2);[min_dist, min_idx] = min(dist);if idx(i) ~= min_idxidx(i) = min_idx;changed = true;endend更新for j = 1:knew_center = mean(X(idx == j, :), 1);if ~isnan(new_center)centers(j, :) = new_center;endendend第四步,对结果进行可视化。
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蒙特卡洛算法(MonteCarloMethod)是一种随机运行算法,它试图解决复杂问题,通过对有限尝试次数和充分大量的数据随机采样,实现预期的目标。
自上世纪30年代以来,蒙特卡洛方法已经广泛应用在金融、经济学、自然科学和社会科学等领域中。
代表性的应用是软件领域中的机器学习和自动化控制研究;在数据挖掘领域,应用更多的是数据挖掘技术。
蒙特卡洛算法在Matlab中的实现分为两个步骤:第一步是算法的建模,第二步是算法的实施。
在建模过程中,首先需要用户定义解决问题的范围,比如要解决什么类型的问题,背景是什么,以及要使用的算法的参数。
建模完成后,就可以使用MATLAB进行算法的实施,包括数据处理、模型搭建和结果输出等。
Matlab中的蒙特卡洛算法的运用非常广泛,从传统的模拟研究到复杂的机器学习应用,都可以使用它来实现。
其中,传统模拟研究要通过建立蒙特卡洛模型来模拟不同变量对系统状态的影响;而复杂机器学习应用,可以使用蒙特卡洛算法来实现自然语义分析,包括文本分析、图像分析以及视频分析等。
Matlab中的蒙特卡洛方法帮助了许多研究人员和工程师解决了许多复杂的研究问题,它展示了强大的计算机技术,使得研究变得更加高效。
同时,Matlab中的蒙特卡洛方法也能节省研究时间和成本,因此它被广泛应用于金融研究、经济学研究以及工程设计中。
此外,Matlab中蒙特卡洛方法还可以应用于数学建模、深度学习和计算机视觉等领域,帮助企业加快计算机技术的发展,以提高企业的效率和盈利能力。
总的来说,Matlab中的蒙特卡洛方法。
是一种非常强大的算法,它可以有效地解决复杂的计算问题。
它的应用范围广泛,可用于金融学,经济学,自然科学等领域,可以极大地提高企业的效率和盈利能力。
因此,在计算机技术日趋复杂的当今时代,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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、数据挖掘的目的数据挖掘(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)<143z4(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)<293z5(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)<175z8(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.5z10(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)~=0a1(k)=a1(k)+1;endif dm5(j,i)==k&dm5(j,i)~=0a2(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 %%%%%%%%%%%%%%%%%%%%%%% 算法完毕。