1. StartDriver.java是程序入口,只需运行这个程序即可
ApClusterParameters.java是程序的一些参数设置。[color=red]必须由你自己重新设定的是[/color]“pointsTotalNum”=总共多少个点,“inputSARFilePath”=包含similarity/availability/responsibility的输入文件。 [color=red]可以自由设定(不一定重新设定)[/color]的参数是“expectedInputFileNum”= inputSequenceFiles的个数(程序把pointIndexes 均匀地写入这些文件中,格式为<pointIndex,"">...expectedInputFileNum实际上等于map.task.num,[color=red]所以你想要多少个maptasks的话就设这个数expectedInputFileNum为多少[/color]), “iterateNum”=迭代计算responsibility&availability的次数,"lam"=收敛系数,不知道怎么设定,按论文的先设定为0.5
[color=red]其他参数不用管[/color]
2.注意我原来的输入文件(inputSARFile即Data_25,可参照package的底下Data_25这个文件)的格式(保留原来hyp的格式): rowIndex/columnIndex:similarity/availability/responsibility ...如果你要用自己的输入格式,ok,只需模仿着去改ApUtil.java中的putSARIntoHBaseTable函数,把similarity和availability(初始为0)和responsibility(初始为0)的值放进hbase即可。[color=red]一定注意[/color]存在hbase中一行(一个row_key)的responsibility是实际中的responsiblity这个矩阵的一列(即按列存到hbase里面)为什么要按列存,因为计算一列avail的时候是要取一列respo的。
3.所有mapreduce的任务的输入文件路径都是ApClusterParameters.inputSequenceFilePath.文件中只存point index<new IntWritable(pointIndex), new Text("")>,真正计算是到hbase里拿值,计算,存值到hbase
4.CalResponsibility(Driver/Mapper):计算responsibility(参照论文的公式1),一个map函数计算一[color=red]行(第ith行)[/color]responsiblity(需要取出第ith行 similairty 和第ith行availability).[color=red]注意比论文的公式中多了一个lam[/color] 收敛系数,见论文本的第9页matlab代码
5.CalAvailability(Driver/Mapper):计算availability(参照论文公式2(i==k),公式3(i!=k)).一个map函数计算一[color=red]列(第kth列)[/color]availability(需要取出第kth列的respo([color=red]所以一开始时resposibility按列存,可以一次性取出一列[/color])).注意也比论文的公式中多了一个lam[/color] 收敛系数
[color=red]所以注意CalResponsibility时map函数是按行计算的。CalAvailability时map是按列计算的[/color]
6. FindClusters(Driver/Mapper/Reducer)是找出中心,矩阵a+r中[color=red]对角[/color]元素[color=red]大于0[/color]的可以作为中心center.
7.AssignPointsToCluster(Driver/Mapper/Reducer)是把各个点赋到各个中心上去。对于点i,寻找a+r这一行中使a(i,center)+r(i,center)最大值的那个center作为i的中心。
8.cluster result输出格式为sequenceFile,只是打印出来,如要把结果输出到文本格式中,请自行处理一下。
ApClusterParameters.java是程序的一些参数设置。[color=red]必须由你自己重新设定的是[/color]“pointsTotalNum”=总共多少个点,“inputSARFilePath”=包含similarity/availability/responsibility的输入文件。 [color=red]可以自由设定(不一定重新设定)[/color]的参数是“expectedInputFileNum”= inputSequenceFiles的个数(程序把pointIndexes 均匀地写入这些文件中,格式为<pointIndex,"">...expectedInputFileNum实际上等于map.task.num,[color=red]所以你想要多少个maptasks的话就设这个数expectedInputFileNum为多少[/color]), “iterateNum”=迭代计算responsibility&availability的次数,"lam"=收敛系数,不知道怎么设定,按论文的先设定为0.5
[color=red]其他参数不用管[/color]
2.注意我原来的输入文件(inputSARFile即Data_25,可参照package的底下Data_25这个文件)的格式(保留原来hyp的格式): rowIndex/columnIndex:similarity/availability/responsibility ...如果你要用自己的输入格式,ok,只需模仿着去改ApUtil.java中的putSARIntoHBaseTable函数,把similarity和availability(初始为0)和responsibility(初始为0)的值放进hbase即可。[color=red]一定注意[/color]存在hbase中一行(一个row_key)的responsibility是实际中的responsiblity这个矩阵的一列(即按列存到hbase里面)为什么要按列存,因为计算一列avail的时候是要取一列respo的。
3.所有mapreduce的任务的输入文件路径都是ApClusterParameters.inputSequenceFilePath.文件中只存point index<new IntWritable(pointIndex), new Text("")>,真正计算是到hbase里拿值,计算,存值到hbase
4.CalResponsibility(Driver/Mapper):计算responsibility(参照论文的公式1),一个map函数计算一[color=red]行(第ith行)[/color]responsiblity(需要取出第ith行 similairty 和第ith行availability).[color=red]注意比论文的公式中多了一个lam[/color] 收敛系数,见论文本的第9页matlab代码
5.CalAvailability(Driver/Mapper):计算availability(参照论文公式2(i==k),公式3(i!=k)).一个map函数计算一[color=red]列(第kth列)[/color]availability(需要取出第kth列的respo([color=red]所以一开始时resposibility按列存,可以一次性取出一列[/color])).注意也比论文的公式中多了一个lam[/color] 收敛系数
[color=red]所以注意CalResponsibility时map函数是按行计算的。CalAvailability时map是按列计算的[/color]
6. FindClusters(Driver/Mapper/Reducer)是找出中心,矩阵a+r中[color=red]对角[/color]元素[color=red]大于0[/color]的可以作为中心center.
7.AssignPointsToCluster(Driver/Mapper/Reducer)是把各个点赋到各个中心上去。对于点i,寻找a+r这一行中使a(i,center)+r(i,center)最大值的那个center作为i的中心。
8.cluster result输出格式为sequenceFile,只是打印出来,如要把结果输出到文本格式中,请自行处理一下。