模式识别实验报告17p

上传人:简****9 文档编号:110209831 上传时间:2019-10-29 格式:DOC 页数:18 大小:340.50KB
返回 下载 相关 举报
模式识别实验报告17p_第1页
第1页 / 共18页
模式识别实验报告17p_第2页
第2页 / 共18页
模式识别实验报告17p_第3页
第3页 / 共18页
模式识别实验报告17p_第4页
第4页 / 共18页
模式识别实验报告17p_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《模式识别实验报告17p》由会员分享,可在线阅读,更多相关《模式识别实验报告17p(18页珍藏版)》请在金锄头文库上搜索。

1、武汉大学国际软件学院实验报告课程名称 模式识别导论 专业年级 2015级 姓 名 宁佳星 学 号 2015302580323 协 作 者 实验学期 2017-2018 学年 上 学期课堂时数 0 课外时数 12 填写时间 2017 年 11 月 12 日实验概述【实验项目名称】:模式识别作业1【实验目的】: 1、 请编写程序实现混合类型属性差异性矩阵计算2、 请编写程序实现近邻聚类算法或者最大最小距离聚类算法3、 请编写程序实现层次聚类算法4、 请编写程序实现K-means或者K-中心点聚类算法5、 请编写程序实现ISODATA算法6、 使用统一的测试数据观察不同算法的聚类结果,并讨论为什么【

2、实验环境】(使用的软件):l Windiws 7l Visual Studio 2017【参考资料】:l 模式识别作业1l 模式识别PPTl 网络索引实验内容【实验方案设计】: 1、 编写程序实现混合类型属性差异性矩阵计算/矩阵三元组之矩阵相加 相乘.#define MAXSIZE 12500 /最大非零元素.void InputMatrix(TSMatrix &T) /输入t个非零元素.void TransposeSMatrix(TSMatrix M, TSMatrix &T) /矩阵的转置.void AddMastrix(TSMatrix M, TSMatrix T, TSMatrix &

3、Q) /矩阵相加./for循环复制剩余元素.void Multiply(TSMatrix M, TSMatrix T, TSMatrix &Q) /矩阵相乘.int *rowSize = new intT.mu + 1; /存放每行非零元素的个数int *rowStart = new intT.mu + 2; /矩阵每行在三元组开始位置int *temp = new intT.nu + 1; /存放结果矩阵中每行的计算结果.while (Current = M.tu)ROWM = M.dataCurrent.row; /当前三元组数据中元素的行号. while (Current = M.tu&

4、ROWM = M.dataCurrent.row) COLM = M.dataCurrent.col; /当前元素的列号,方便与T矩阵的行号相乘for (i = rowStartCOLM; itheta*D12)./min-operatefor (j = 0; jtheta*D12) k+; centerk = index; / add a centertheshold = max;/ prepare to loop next time.3、 编写程序实现层次聚类算法/实现层次聚类算法./计算两个样本点之间的欧几里得距离double CAgeneCluster:getDistance(sDat

5、aPoint dpA, sDataPoint dpB).list* CAgeneCluster:initialCluster(list *dataPoints).sDataPoint tempDataPoint = *iter;/取出数据, .tempCluster.clusterLabel = i; /初始类簇号为各原数据顺序号tempCluster.datapointList-push_back(tempDataPoint);/每一个数据为一类originalClusters-push_back(tempCluster);/originalClusters为类簇序列.list* CAgen

6、eCluster:mergeCluster(list* clusters, int mergeIndexA, int mergeIndexB)/mergeIndexA, B 是类簇标号.int nBreak = 0;/计算找到的次数,以提前退出循环,节省时间if (mergeIndexA != mergeIndexB)/分属于不同的类簇,则合并. / 将clustermergeIndexB中的DataPoint加入到 clustermergeIndexAfor (list:iterator iter = clusters-begin(); iter != clusters-end(); ite

7、r+)/把mergeIndexA所在类簇提取出来。tempCluster = *iter;/以下程序找出mergeIndexA and B所在类簇,并从链表中删除 B类簇。if (tempCluster.clusterLabel = mergeIndexA)nBreak+;/计算找到的次数,以提前退出循环,节省时间tempClusterA = *iter;/end for if(tempCluster.clusterLabel=mergeIndexA)if (tempCluster.clusterLabel = mergeIndexB)/并从链表中删除 B类簇。tempClusterB = *

8、iter;nBreak+;/计算找到的次数,以提前退出循环,节省时间 .if (nBreak = 2)/找到两个类簇,则提前退出循环,节省时间。nBreak = 0;break;.dpA = tempClusterA.datapointList;/把clusterA中的数据集提取出来。.for (list:iterator iter = dpB-begin(); iter != dpB-end(); iter+) /取出数据 dpA-push_back(*iter);/把B中数据存入到A.list* CAgeneCluster:startAnalysis(list *dataPoints, u

9、nsigned int ClusterNum).originalClusters = initialCluster(dataPoints);/数据集初始化;/originalClusters为类簇序列.printCluster(originalClusters);/打印聚类情况.while (finalClusters-size()ClusterNum)/聚类数为ClusterNumdouble minDist = 9999999.9999;/maxvalue.if (iIter != jIter).dataPointsA = ClusterA.datapointList;/类簇中的数据集cl

10、usterLabelA = ClusterA.clusterLabel;/类簇标号dataPointsB = ClusterB.datapointList;/类簇中的数据集clusterLabelB = ClusterB.clusterLabel;/类簇标号for (list:iterator iterdpA = dataPointsA-begin(); iterdpA != dataPointsA-end(); iterdpA+).if (tempDisminDist)minDist = tempDis;/每次都是距离最小的两个合并。.cout mergeIndexA= mergeIndexA , mergeIndexB= mergeIndexB endl;finalClusters = mergeCluster(finalClusters, mergeIndexA, mergeIndexB);/mergeIndexA, B 是类簇标号printCluster(originalClusters);/打印聚类情况.4、 编写程序实现K-means或者K-中心点聚类算法/K-means聚类算法.const int NUM = 3; /定义划分簇的数目/数据向量表示./计算距离的平方double getDist(Vect A, Vect B)./计算每个簇的中心,平均距离表示

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 管理学资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号