欢迎来到天天文库
浏览记录
ID:40279383
大小:235.50 KB
页数:12页
时间:2019-07-30
《Weka[24] Apriori源代码分析(1)》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、Weka[24]Apriori源代码分析作者:Koala++/屈伟曾经卖过一个Apriori的程序,那个程序大约有50%的正确率(当然结果是正确的,是只实现上很不一样),数据挖掘课上写了一个Apriori,一部分懒地按书上的算法,大约对了80%(当然结果仍然是正确的),记得邱强有一次要用Apriori算法时说:weka的太慢了,还好上次数据挖掘课实现了一下,还挺快的,注意的一点是关联规则不属于机器学习,这里我不想再分出来一个数据挖掘的组了。从buildAssociations函数开始:double[]confidences,supports;int[
2、]indices;FastVector[]sortedRuleSet;intnecSupport=0;instances=newInstances(instances);if(m_removeMissingCols){instances=removeMissingColumns(instances);}看一下removeMissingColumns,虽然它是如此的不重要:protectedInstancesremoveMissingColumns(Instancesinstances)throwsException{intnumInstances=i
3、nstances.numInstances();StringBufferdeleteString=newStringBuffer();intremoveCount=0;booleanfirst=true;intmaxCount=0;for(inti=0;i4、asethisbylookingforthemostfrequent//valueint[]counts=as.nominalCounts;if(counts[Utils.maxIndex(counts)]>maxCount){maxCount=counts[Utils.maxIndex(counts)];}}if(as.missingCount==numInstances){if(first){deleteString.append((i+1));first=false;}else{deleteString.append(","+(i+1));}r5、emoveCount++;}}if(m_verbose){System.err.println("Removed:"+removeCount+"columnswithallmissing"+"values.");}if(m_upperBoundMinSupport==1.0&&maxCount!=numInstances){m_upperBoundMinSupport=(double)maxCount/(double)numInstances;if(m_verbose){System.err.println("Settingupperboundmin6、supportto:"+m_upperBoundMinSupport);}}if(deleteString.toString().length()>0){Removeaf=newRemove();af.setAttributeIndices(deleteString.toString());af.setInvertSelection(false);af.setInputFormat(instances);InstancesnewInst=Filter.useFilter(instances,af);returnnewInst;}returninsta7、nces;}For循环中的第一个if不重要,不要理睬。它的作用是想在后面也就是maxCount/numInstances那看一下support的下界设多少。第二个if中是看是不是缺失值等于样本数,也就是在这个属性上所有的值都是缺失的,那么就用deleteString把这些都是缺失值的属性下标记下来,连成一个字符串,最后一个if就是标准的删除特征的代码,也就是把那么都是缺失值的特征给删除了。if(m_car&&m_metricType!=CONFIDENCE)thrownewException("ForCAR-Miningmetrictypehasto8、beconfidence!");如果想得到与类别有关的规则,又没有设成CONFIDENCE是不可以的。//o
4、asethisbylookingforthemostfrequent//valueint[]counts=as.nominalCounts;if(counts[Utils.maxIndex(counts)]>maxCount){maxCount=counts[Utils.maxIndex(counts)];}}if(as.missingCount==numInstances){if(first){deleteString.append((i+1));first=false;}else{deleteString.append(","+(i+1));}r
5、emoveCount++;}}if(m_verbose){System.err.println("Removed:"+removeCount+"columnswithallmissing"+"values.");}if(m_upperBoundMinSupport==1.0&&maxCount!=numInstances){m_upperBoundMinSupport=(double)maxCount/(double)numInstances;if(m_verbose){System.err.println("Settingupperboundmin
6、supportto:"+m_upperBoundMinSupport);}}if(deleteString.toString().length()>0){Removeaf=newRemove();af.setAttributeIndices(deleteString.toString());af.setInvertSelection(false);af.setInputFormat(instances);InstancesnewInst=Filter.useFilter(instances,af);returnnewInst;}returninsta
7、nces;}For循环中的第一个if不重要,不要理睬。它的作用是想在后面也就是maxCount/numInstances那看一下support的下界设多少。第二个if中是看是不是缺失值等于样本数,也就是在这个属性上所有的值都是缺失的,那么就用deleteString把这些都是缺失值的属性下标记下来,连成一个字符串,最后一个if就是标准的删除特征的代码,也就是把那么都是缺失值的特征给删除了。if(m_car&&m_metricType!=CONFIDENCE)thrownewException("ForCAR-Miningmetrictypehasto
8、beconfidence!");如果想得到与类别有关的规则,又没有设成CONFIDENCE是不可以的。//o
此文档下载收益归作者所有