- 浏览: 156229 次
- 性别:
- 来自: 内蒙古
文章分类
最新评论
-
linest:
ethi_teye 写道id可能是0开头的,你用int保存再输 ...
pat-1022 Digital Library -
ethi_teye:
id可能是0开头的,你用int保存再输出,这些0就被忽略了。
pat-1022 Digital Library -
lixuanchong:
在lz的代码上稍作修改即可:
#include<iost ...
pat-1010* Radix -
air_sky:
确实。。result=a0*base^0+a1*base^1+ ...
pat-1010* Radix -
linest:
air_sky 写道
关于“方程只有一个正整数解,就可以用二分 ...
pat-1010* Radix
package org.apache.mahout.clustering.kmeans;
public class KMeansDriver extends AbstractJob
kmeans的入口KMeansDriver类
run函数中buildClusters,clusterData
buildClusters函数中提供两种实现
buildClustersMR实现了迭代更新中心点的过程
runIteration函数进入了mapred的核心部分
输入输出都是sequence file
package org.apache.mahout.clustering.kmeans;
KMeansMapper类
public class KMeansMapper extends Mapper<WritableComparable<?>, VectorWritable, Text, ClusterObservations>
//启动类
private KMeansClusterer clusterer;
//用于保存聚类中心
private final Collection<Cluster> clusters = new ArrayList<Cluster>();
setup函数加载了距离度量类,初始化KMeansClusterer,载入聚类中心
map函数中启动
KMeansClusterer类,实现算法的核心类
emitPointToNearestCluster函数中
遍历聚类中心,根据距离找到最近点的聚类中心
输出key:最近聚类中心的标识,value:ClusterObservations对点的封装
ClusterObservations中含有s0:向量计数 s1:向量的累和 s2:向量平方的累和
便于后续计算
KMeansCombiner类,对map结果进行汇总
public class KMeansCombiner extends Reducer<Text, ClusterObservations, Text, ClusterObservations>
将同一聚类中心下的向量计数,累和
KMeansReducer类,
public class KMeansReducer extends Reducer<Text, ClusterObservations, Text, Cluster>
将同一聚类中心下汇总,计算收敛性,重新计算聚类中心
方法是向量平均值,即所有向量累和除以个数。
输出key:聚类中心标识,value:新聚类中心
clusterData函数中可选择两种实现,单机实现和分布式mapred实现
clusterDataMR中定义输入输出格式都是sequencefile,输出key为int型,value为vector型
只有map作业没有reduce
KMeansClusterMapper类
public class KMeansClusterMapper extends Mapper<WritableComparable<?>,VectorWritable,IntWritable,WeightedVectorWritable>
private final Collection<Cluster> clusters = new ArrayList<Cluster>();
private KMeansClusterer clusterer;
根据最终聚类标签,将点加上聚类输出
outputPointWithClusterInfo函数
遍历所有中心,找到最近的,输出
key:聚类id value:WeightedVectorWritable向量
public class KMeansDriver extends AbstractJob
kmeans的入口KMeansDriver类
run函数中buildClusters,clusterData
Path clustersOut = buildClusters(conf, input, clustersIn, output, measure, maxIterations, delta, runSequential); if (runClustering) { log.info("Clustering data"); clusterData(conf, input, clustersOut, new Path(output, AbstractCluster.CLUSTERED_POINTS_DIR), measure, delta, runSequential); }
buildClusters函数中提供两种实现
if (runSequential) { return buildClustersSeq(conf, input, clustersIn, output, measure, maxIterations, delta); } else { return buildClustersMR(conf, input, clustersIn, output, measure, maxIterations, delta); }
buildClustersMR实现了迭代更新中心点的过程
boolean converged = false; int iteration = 1; while (!converged && iteration <= maxIterations) { log.info("K-Means Iteration {}", iteration); // point the output to a new directory per iteration Path clustersOut = new Path(output, AbstractCluster.CLUSTERS_DIR + iteration); converged = runIteration(conf, input, clustersIn, clustersOut, measure.getClass().getName(), delta); // now point the input to the old output directory clustersIn = clustersOut; iteration++; }
runIteration函数进入了mapred的核心部分
job.setMapOutputKeyClass(Text.class); job.setMapOutputValueClass(ClusterObservations.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(Cluster.class);
输入输出都是sequence file
job.setInputFormatClass(SequenceFileInputFormat.class); job.setOutputFormatClass(SequenceFileOutputFormat.class); job.setMapperClass(KMeansMapper.class); job.setCombinerClass(KMeansCombiner.class); job.setReducerClass(KMeansReducer.class);
package org.apache.mahout.clustering.kmeans;
KMeansMapper类
public class KMeansMapper extends Mapper<WritableComparable<?>, VectorWritable, Text, ClusterObservations>
//启动类
private KMeansClusterer clusterer;
//用于保存聚类中心
private final Collection<Cluster> clusters = new ArrayList<Cluster>();
setup函数加载了距离度量类,初始化KMeansClusterer,载入聚类中心
ClassLoader ccl = Thread.currentThread().getContextClassLoader(); DistanceMeasure measure = ccl.loadClass(conf.get(KMeansConfigKeys.DISTANCE_MEASURE_KEY)) .asSubclass(DistanceMeasure.class).newInstance(); measure.configure(conf); this.clusterer = new KMeansClusterer(measure); String clusterPath = conf.get(KMeansConfigKeys.CLUSTER_PATH_KEY); if (clusterPath != null && clusterPath.length() > 0) { KMeansUtil.configureWithClusterInfo(conf, new Path(clusterPath), clusters); if (clusters.isEmpty()) { throw new IllegalStateException("No clusters found. Check your -c path."); } }
map函数中启动
this.clusterer.emitPointToNearestCluster(point.get(), this.clusters, context);
KMeansClusterer类,实现算法的核心类
emitPointToNearestCluster函数中
遍历聚类中心,根据距离找到最近点的聚类中心
输出key:最近聚类中心的标识,value:ClusterObservations对点的封装
ClusterObservations中含有s0:向量计数 s1:向量的累和 s2:向量平方的累和
便于后续计算
Cluster nearestCluster = null; double nearestDistance = Double.MAX_VALUE; for (Cluster cluster : clusters) { Vector clusterCenter = cluster.getCenter(); double distance = this.measure.distance(clusterCenter.getLengthSquared(), clusterCenter, point); if (distance < nearestDistance || nearestCluster == null) { nearestCluster = cluster; nearestDistance = distance; } } context.write(new Text(nearestCluster.getIdentifier()), new ClusterObservations(1, point, point.times(point)));
KMeansCombiner类,对map结果进行汇总
public class KMeansCombiner extends Reducer<Text, ClusterObservations, Text, ClusterObservations>
将同一聚类中心下的向量计数,累和
@Override protected void reduce(Text key, Iterable<ClusterObservations> values, Context context) throws IOException, InterruptedException { Cluster cluster = new Cluster(); for (ClusterObservations value : values) { cluster.observe(value); } context.write(key, cluster.getObservations()); }
KMeansReducer类,
public class KMeansReducer extends Reducer<Text, ClusterObservations, Text, Cluster>
将同一聚类中心下汇总,计算收敛性,重新计算聚类中心
方法是向量平均值,即所有向量累和除以个数。
输出key:聚类中心标识,value:新聚类中心
@Override protected void reduce(Text key, Iterable<ClusterObservations> values, Context context) throws IOException, InterruptedException { Cluster cluster = clusterMap.get(key.toString()); for (ClusterObservations delta : values) { cluster.observe(delta); } // force convergence calculation boolean converged = clusterer.computeConvergence(cluster, convergenceDelta); if (converged) { context.getCounter("Clustering", "Converged Clusters").increment(1); } cluster.computeParameters(); context.write(new Text(cluster.getIdentifier()), cluster); }
clusterData函数中可选择两种实现,单机实现和分布式mapred实现
if (runSequential) { clusterDataSeq(conf, input, clustersIn, output, measure); } else { clusterDataMR(conf, input, clustersIn, output, measure, convergenceDelta); }
clusterDataMR中定义输入输出格式都是sequencefile,输出key为int型,value为vector型
job.setInputFormatClass(SequenceFileInputFormat.class); job.setOutputFormatClass(SequenceFileOutputFormat.class); job.setOutputKeyClass(IntWritable.class); job.setOutputValueClass(WeightedVectorWritable.class);
只有map作业没有reduce
job.setMapperClass(KMeansClusterMapper.class); job.setNumReduceTasks(0);
KMeansClusterMapper类
public class KMeansClusterMapper extends Mapper<WritableComparable<?>,VectorWritable,IntWritable,WeightedVectorWritable>
private final Collection<Cluster> clusters = new ArrayList<Cluster>();
private KMeansClusterer clusterer;
根据最终聚类标签,将点加上聚类输出
@Override protected void map(WritableComparable<?> key, VectorWritable point, Context context) throws IOException, InterruptedException { clusterer.outputPointWithClusterInfo(point.get(), clusters, context); }
outputPointWithClusterInfo函数
遍历所有中心,找到最近的,输出
key:聚类id value:WeightedVectorWritable向量
AbstractCluster nearestCluster = null; double nearestDistance = Double.MAX_VALUE; for (AbstractCluster cluster : clusters) { Vector clusterCenter = cluster.getCenter(); double distance = measure.distance(clusterCenter.getLengthSquared(), clusterCenter, vector); if (distance < nearestDistance || nearestCluster == null) { nearestCluster = cluster; nearestDistance = distance; } } context.write(new IntWritable(nearestCluster.getId()), new WeightedVectorWritable(1, vector));
发表评论
-
Mahout LDA CVB
2012-08-17 15:40 0起始的log说明了各个参数的含义 Will run Col ... -
读代码-LDADriver及相关
2012-02-07 23:59 0用到写文件,mapred迭代收敛框架,内部迭代收敛框架,向量每 ... -
读代码-BayesFileFormatter
2012-02-03 22:51 1095用到: 文件读写,文件夹下遍历文件处理 package or ... -
读代码-CanopyDriver及相关
2012-01-27 13:22 0用到:classloader动态加载 hadoop setu ... -
读代码-MinHashDriver及相关
2012-01-26 14:17 1340用到:泛型类 counter 哈希实现 package ... -
ToolRunner机制
2012-01-26 11:57 3561定义框架接口 由具体实现类实现 public interf ... -
mahout 启动对应
2011-12-22 12:11 0org.apache.mahout.utils.vectors ... -
读代码-Pattern和FrequentPatternMaxHeap
2011-12-01 19:52 946package org.apache.mahout.fpm.p ... -
读代码-TransactionTree
2011-11-25 15:19 0package org.apache.mahout.fpm.p ... -
读代码-FPGrowthDriver及相关
2011-11-25 09:57 0Key points: 平均分组 堆结构 结构序列化传递 ... -
读代码-TopKStringPatterns
2011-11-24 14:25 988package org.apache.mahout.fpm.p ... -
读代码-BayesDriver及相关
2011-11-18 10:18 0用到:重载key value类型,重载outputFormat ... -
读代码-TrainClassifier和TestClassifier
2011-11-17 19:44 1455package org.apache.mahout.class ... -
读代码-RandomSeedGenerator
2011-11-04 17:01 1232package org.apache.mahout.clust ... -
读代码-VectorWritable
2011-11-01 11:04 1360package org.apache.mahout.math; ... -
读代码-Vector
2011-10-28 11:26 0package org.apache.mahout.mat ... -
读代码-SequenceFilesFromDirectory
2011-10-27 20:53 1937package org.apache.mahout.text; ... -
读代码-InputMapper
2011-10-27 16:46 1061package org.apache.mahout.clust ...
相关推荐
matlab聚类kmeans代码 作业7 要求 在MapReduce上实现K-Means算法并在小数据集上测试。可以使用附件的数据集,也可以随机生成若干散点的二维数据(x, y)。设置不同的K值和迭代次数,可视化聚类结果。 提交要求同作业5...
mahout KMeansDriver测试相关jar包,有需要的同学可以下载来试试。把这个包放入hadoop/lib下面然后就可以在eclipse里面运行调试了。
- 源代码可能包含以下部分:KMeansMapper类实现映射逻辑,KMeansReducer类实现化简逻辑,以及可能的主类(如KMeansDriver)用于驱动整个MapReduce流程。 - 另外,还可能有数据预处理类,用于读取和处理原始数据,...
如Instance表示数据点,Cluster表示聚类,EuclideanDistance计算欧氏距离,RandomClusterGenerator生成随机初始聚类中心,KMeans是K-Means算法的核心类,KMeansCluster和KMeansDriver分别辅助算法的执行和驱动整体...
DCM与PFC融合的CRM混合模式创新实践,DCM CRM混合模式PFC ,DCM; CRM混合模式; PFC,DCM与PFC的混合模式在CRM系统中的应用
Radon-Wigner变换与Wigner-Hough估计在信号参数提取中的应用研究——线性调频信号处理与雷达信号速度补偿的探索,利用Radon—Wigner变,Wigner—Hough估计线性调频信号参数,信号参数估计,雷达信号处理,速度补偿 ,核心关键词:Radon—Wigner变换; Wigner—Hough估计; 线性调频信号参数估计; 信号参数估计; 雷达信号处理; 速度补偿,利用Radon-Wigner变换与Wigner-Hough估计,实现线性调频信号参数快速估计,雷达信号处理中的速度补偿技术
基于三菱PLC与组态王技术的自动化立体车库堆垛书架控制系统研究与应用第1100例实践,No.1100 基于三菱PLC和组态王组态自动化立体车库控制堆垛书架 ,三菱PLC; 组态王组态; 自动化立体车库; 控制; 堆垛书架,基于三菱PLC与组态王控制的立体车库堆垛书架自动化系统
"交错并联Boost PFC仿真电路模型:双闭环控制策略下的输出电压与电感电流分析",交错并联Boost PFC仿真电路模型 采用输出电压外环,电感电流内环的双闭环控制方式 交流侧输入电流畸变小,波形良好,如效果图所示 plecs matlab simulink仿真模型 ,核心关键词: 交错并联Boost; PFC仿真电路模型; 双闭环控制方式(输出电压外环、电感电流内环); 交流侧输入电流畸变小; 波形良好; plecs matlab simulink仿真模型。,基于PLECS与Matlab Simulink的Boost PFC双闭环控制仿真模型
"COMSOL仿真:固体超声导波二维模拟及汉宁窗调制5周期正弦激励信号的添加与中心频率200kHz的位移控制",COMSOL—固体超声导波二维仿真 激励信号为汉宁窗调制的5周期正弦函数,中心频率为200kHz 通过指定位移来添加激励信号 ,COMSOL;固体超声导波;二维仿真;汉宁窗调制;正弦函数;中心频率200kHz;指定位移添加激励信号。,COMSOL固体超声导波二维仿真:汉宁窗调制正弦激励信号添加
MATLAB环境下多元变分模态分解与多通道去趋势波动分析多变量信号去噪技术的研究与应用,MATLAB环境下一种基于多元变分模态分解和多通道去趋势波动分析的多变量信号去噪方法。 算法运行环境为MATLAB r2018a,算法可迁移至金融时间序列,地震信号,语音信号,声信号,生理信号(ECG,EEG,EMG)等信号。 ,多元变分模态分解; 多通道去趋势波动分析; MATLAB r2018a; 金融时间序列; 地震信号; 语音信号; 声信号; 生理信号去噪,MATLAB多模态多通道去噪算法在多元信号处理中的应用
基于COMSOL的高坝三维应力渗流耦合分析程序:突破传统二维限制的数值模拟研究,基于comsol的高坝-应力渗流耦合分析,三维程序,非二维 ,基于Comsol; 高坝-应力渗流耦合分析; 三维程序; 非二维。,基于COMSOL的三维高坝应力渗流耦合分析程序
"利用Matlab的Music算法提升雷达超分辨成像的图像质量及分辨率",matlab的Music算法,可用于雷达超分辨成像,提高图像分辨率 ,Matlab的Music算法; 雷达超分辨成像; 提高图像分辨率,Matlab Music算法:雷达超分辨成像,提升图像分辨率
面向农网变电站低成本巡检监督终端研究与实现.pdf
融合Floyd算法优化的改进A星算法:多方向搜索与路径平滑度提升的代码实现,融合floyd算法的改进A星算法路径规划代码 可备注,可以,可依据需求更改地图 %% 改进A*算法 路径规划 % 改进A*算法 1 8个搜索方向变成 5个 提高搜索方向 % 2 无斜穿障碍物顶点 避免发生碰撞 % 3 基于改进floyd双向平滑度优化,删除中间多余节点,减少转折,增加路径的平滑度 % 4 评价函数:f(n)=g(n)+(1-log(P))*h(n) % P表示起始点与目标点之间的障碍率 % = 障碍物的数量 栅格总数 % 其中r为当前点到目标点的距离,R为起始点到目标点的距离。 % 试验对比如下 ,核心关键词:融合Floyd算法;改进A星算法;路径规划代码;搜索方向优化;无斜穿障碍物顶点;双向平滑度优化;评价函数;P值表示障
个人网站 界面优美 代码简单 适合初学者和大学毕业设计。
"深度学习驱动的MIMO雷达目标检测与二维测角技术",使用深度学习进行MIMO 雷达目标检测,二维测角 ,使用深度学习进行MIMO雷达目标检测; MIMO雷达; 目标检测; 二维测角,深度学习助力MIMO雷达目标二维测角检测
tf.data定义高效的输入流水线
基于三菱FX PLC的组态王五层电梯控制系统设计与实现,No.1294 三菱FX PLC基于组态王五层电梯控制系统 ,三菱FX PLC; 组态王; 五层电梯; 控制系统; 编号1294,"三菱FX PLC五层电梯控制系统"
OFDM系统调制下QPSK与16QAM的误码率比较分析程序,OFDM系统在QPSK与16QAM调制下,误码率比较程序 ,OFDM系统; QPSK调制; 16QAM调制; 误码率比较程序,OFDM系统调制下误码率比较程序:QPSK vs 16QAM
,西门子s7-1200plc控制5轴伺服,采用结构化编程,触摸屏采用威纶通,项目实现以下功能, 1.plc程序结构 采用结构化编程,每一功能为模块化设计,功能:自动-手动-单步-暂停-伺服断电保持-报警功能等等。 每个功能块建好后都能无数次调用。 三轴机械手x轴-y轴-z轴取放料脉冲定位控制台达b2伺服。 台达伺服速度模式应用,扭矩模式应用。 2触摸屏程序结构 手动画面-报警画面-资料数据-历史数据-用户管理-配方设置-伺服自动画面-伺服参数-i o监控等。 3电气图纸 主电路,伺服电路,plc输入输出控制电路等等 plc程序结构清晰,层次分明,注释齐全。 触摸屏程序画面精美。 cad制图精美。 都可以作为后续自己项目的参考模版。 参考本案例程序。 可快速掌握西门子1200控制伺服编程技巧,扩展自己的编程逻辑思维。 节省大量不必要花费的时间,可快速上手。 plc程序博途v14 以上都能打开。