模式识别实验报告材料

上传人:ni****g 文档编号:488096864 上传时间:2023-10-02 格式:DOC 页数:17 大小:622.50KB
返回 下载 相关 举报
模式识别实验报告材料_第1页
第1页 / 共17页
模式识别实验报告材料_第2页
第2页 / 共17页
模式识别实验报告材料_第3页
第3页 / 共17页
模式识别实验报告材料_第4页
第4页 / 共17页
模式识别实验报告材料_第5页
第5页 / 共17页
点击查看更多>>
资源描述

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

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

2、考资料】:模式识别作业1模式识别PPT网络索引实验容【实验方案设计】:1、编写程序实现混合类型属性差异性矩阵计算矩阵三元组之矩阵相加相乘#define MAXSIZE 12500 /最大非零元素void InputMatrix( TSMatrix &T) 输入 t 个非零元素void TransposeSMatrix(TSMatrix M, TSMatrix &T) /矩阵的转置void AddMastrix( TSMatrix M , TSMatrix T, TSMatrix & Q) 矩阵相加/for循环复制剩余元素void Multiply( TSMatrix M , TSMatrix

3、T, TSMatrix & Q) /矩阵相乘int *rowSize = new intT.mu + 1; 存放每行非零元素的个数int *rowStart = new intT.mu + 2; /矩阵每行在三元组开始位置int *temp = new intT.nu + 1;存放结果矩阵中每行的计算结果while (Curre nt = M.tu)ROWM = M.dataCurre nt.row;/当前三元组数据中元素的行号while (Current = M .tu&ROWM = M .dataCurrent.row)COLM = M.dataCurre nt.col;/当前元素的列号,

4、方便与 T矩阵的行号相乘for (i = rowStartCOLM; itheta*D12)/min-operatefor (j = 0; jtheta*D12) k+; centerk = index; / add a centertheshold = max;/ prepare to loop n ext time3、编写程序实现层次聚类算法实现层次聚类算法计算两个样本点之间的欧几里得距离double CAge neCluster:getDista nce(sDataPo in tdpA, sDataPo in tdpB) list* CAgeneCluster:initialCluste

5、r( list *dataPoints)sDataPoi nt tempDataPoi nt = *iter;/ 取岀数据,tempCluster.clusterLabel = i;初始类簇号为各原数据顺序号tempCluster.datapoi ntList-push_back(tempDataPoi nt);每一个数据为一类originalClusters-push_back(tempCluster);/originalClusters 为类簇序列list* CAge neCluster:mergeCluster(list * clusters, i nt merge In dexA, i

6、nt mergeindexB)/mergeIndexA, B 是类簇标号int nBreak = 0;/计算找到的次数,以提前退岀循环,节省时间if (mergeindexA != mergeindexB)/分属于不同的类簇,则合并./ 将 clustermergeindexB中的 DataPoint 加入到 clustermergeindexAfor (list:iterator iter = clusters-begin(); iter != clusters-end(); iter+) /把merge in dexA所在类簇提取岀来。tempCluster = * iter;/以下程序找

7、岀 mergeindexA and B所在类簇,并从链表中删除B类簇。if (tempCluster.clusterLabel = merge in dexA)nBreak+;/计算找到的次数,以提前退岀循环,节省时间 tempClusterA = * iter;/end for if(tempCluster.clusterLabel=mergelndexA)if (tempCluster.clusterLabel = merge in dexB)/并从链表中删除B类簇。tempClusterB = *iter:nBreak+;计算找到的次数,以提前退岀循环,节省时间if (n Break =

8、 2)/找到两个类簇,则提前退岀循环,节省时间。n Break = 0;break;dpA = tempCIusterA.datapointList;把 clusterA 中的数据集提取岀来。for (listvsDataPoint:iterator iter = dpB_begin(); iter != dpB-end(); iter+)取岀数据dpA-push_back(*iter);把 B 中数据存入到 A. _ list* CAgeneCluster:startAnalysis(list *dataPoints, unsignedint ClusterNum) originalClus

9、ters = initialCluster( dataPoint9;数据集初始化;/originalClusters 为类簇序列.prin tCluster(origi nalClusters); / 打印聚类情况while (finalClusters-size() ClusterNum)/聚类数为 ClusterNumdouble min Dist = 9999999.9999; /maxvalueif (iIter != jIter)dataPoi ntsA = ClusterA.datapoi ntList;/ 类簇中的数据集clusterLabelA = ClusterA.clust

10、erLabel; /类簇标号dataPoi ntsB = ClusterB.datapoi ntList;/ 类簇中的数据集clusterLabelB = ClusterB.clusterLabel; / 类簇标号for (listvsDataPoint:iterator iterdpA = dataPointsA-begin(); iterdpA != dataPo in tsA-e nd(); iterdpA+)if (tempDisvmi nDist) min Dist = tempDis; /每次都是距离最小的两个合并。cout merge In dexA= merge In dexA

11、 , merge In dexB= merge In dexB en dl; fin alClusters = mergeCluster(fi nalClusters, merge In dexA, merge In dexB);/merge In dexA, B 是类 傑匕口簇标号prin tCluster(origi nalClusters); / 打印聚类情况4、编写程序实现K-means或者K-中心点聚类算法/K-mea ns聚类算法con sti nt NUM = 3; 定义划分簇的数目数据向量表示计算距离的平方double getDist(VectA, Vect B)计算每个簇的中

12、心,平均距离表示Vect getMea nsC(vector t)for (int i = 0; in um; i+)Vect c;获取算法的准则函数值,当准则函数收敛时算法停止double getE(vector classes, Vect mean $)for (int i = 0; iNUM; i+).int searchMinC(Vectt, Vect means, int n, double * D) for (int i = 1; i n; i+)找最优的种子点void Fin d(vector in it, Vect mea n$)for (int i = 1; iNUM; i+)for (int j = 0; ji nit .size(); j+)for (int j = 0; ji nit .size(); j+).void kMea ns(vector in it)newE = getE(classes, mea ns); /计算当前准则函数值 for (int i = 0; i = 1)for (int i = 0; i in it.size(); i+)输岀最终结果for (int i = 0; i NUM;

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

当前位置:首页 > 办公文档 > 活动策划

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