mahout系列:minhash聚类

Map:

Vector featureVector = features.get();
    if (featureVector.size() < minVectorSize) {
      return;
    }
    // Initialize the MinHash values to highest
    for (int i = 0; i < numHashFunctions; i++) {
      minHashValues[i] = Integer.MAX_VALUE;
    }

    for (int i = 0; i < numHashFunctions; i++) {
      for (Vector.Element ele : featureVector.nonZeroes()) {
        int value = hashValue ? (int) ele.get() : ele.index();
        bytesToHash[0] = (byte) (value >> 24);
        bytesToHash[1] = (byte) (value >> 16);
        bytesToHash[2] = (byte) (value >> 8);
        bytesToHash[3] = (byte) value;
        int hashIndex = hashFunction[i].hash(bytesToHash);
        //if our new hash value is less than the old one, replace the old one
        if (minHashValues[i] > hashIndex) {
          minHashValues[i] = hashIndex;
        }
      }
    }
    // output the cluster information
    for (int i = 0; i < numHashFunctions; i++) {
      StringBuilder clusterIdBuilder = new StringBuilder();
      for (int j = 0; j < keyGroups; j++) {
        clusterIdBuilder.append(minHashValues[(i + j) % numHashFunctions]).append('-');
      }
      //remove the last dash
      clusterIdBuilder.deleteCharAt(clusterIdBuilder.length() - 1);

      cluster.set(clusterIdBuilder.toString());

      if (debugOutput) {
        vector.set(featureVector);
        context.write(cluster, vector);
      } else {
        context.write(cluster, item);
      }
    }
protected void reduce(Text cluster, Iterable<Writable> points, Context context)
   throws IOException, InterruptedException {
   Collection<Writable> pointList = Lists.newArrayList();
   for (Writable point : points) {
     if (debugOutput) {
       Vector pointVector = ((VectorWritable) point).get().clone();
       Writable writablePointVector = new VectorWritable(pointVector);
       pointList.add(writablePointVector);
     } else {
       Writable pointText = new Text(point.toString());
       pointList.add(pointText);
     }
   }
   if (pointList.size() >= minClusterSize) {
     context.getCounter(Clusters.ACCEPTED).increment(1);
     for (Writable point : pointList) {
       context.write(cluster, point);
     }
   } else {
     context.getCounter(Clusters.DISCARDED).increment(1);
   }
 }

查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/sjjg/

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索cluster
, context
, knn 聚类 分类
, value
, minhash
Writable
,以便于您获取更多的相关知识。

时间: 2024-10-01 16:08:57

mahout系列:minhash聚类的相关文章

mahout系列:谱聚类

1.构造亲和矩阵W 2.构造度矩阵D 3.拉普拉斯矩阵L 4.计算L矩阵的第二小特征值(谱)对应的特征向量Fiedler 向量 5.以Fiedler向量作为kmean聚类的初始中心,用kmeans聚类 亲和矩阵 :W_ij=exp(-(d(s_i,s_j)/2o^2))             d (s_i,s_j)  = ||s_i,s_j||.    o 为事先设定的参数. 度矩阵:D_ii  =sum(w_i) 规范相似矩阵:D^(-1/2)*W*D^(1/2) ,即:W(i,j)/(D(

Mahout系列:kmeans 聚类

Kmeans是最经典的聚类算法之一,它的优美简单.快速高效被广泛使用. Kmeans算法描述 输入:簇的数目k:包含n个对象的数据集D. 输出:k个簇的集合. 方法: 从D中任意选择k个对象作为初始簇中心: repeat; 根据簇中对象的均值,将每个对象指派到 最相似的簇: 更新簇均值,即计算每个簇中对象的均值: 计算准则函数: until准则函数不 在发生变化. Kmeans 算法的优缺点: 1)优点 (1)k-平均算法是解决聚类问题的一种经典算法,算法简单.快速. (2)对处理 大数据集,该

Mahout系列:canopy 算法

Canopy 算法,流程简单,容易实现,一下是算法 (1)设样本集合为S,确定两个阈值t1和t2,且t1>t2. (2)任取一个样本点p属于S,作为一个Canopy,记为C,从S中移除p. (3)计算S中所有点到p的距离dist (4)若dist<t1,则将相应点归到C,作为弱关联. (5)若dist<t2,则将相应点移出S,作为强关联. (6)重复(2)~(5),直至S为空. 上面的过程可以看出,dist<t2的点属于有且仅有一个簇,t2<dist<t1 的点可能属于

Mahout系列:相似度

Mahout推荐系统中有许多相似度实现,这些组件实现了计算不能User之间或Item之间的相似度.对 于数据量以及数据类型不同的数据源,需要不同的相似度计算方法来提高推荐性能,在mahout提供了 大量用于计算相似度的组件,这些组件分别实现了不同的相似度计算方. User 相似度: Item 相似度: 皮尔森相关度 类名:PearsonCorrelationSimilarity 原理:用来反映两个变量线性相关程度的统计量 范围:[-1,1],绝对值越大,说明相关性越强,负相关对于推荐的意义小.

Mahout系列:距离度量

x = (x1,...,xn) 和y = (y1,...,yn) 之间的距离为 (1)欧氏距离   EuclideanDistanceMeasure (2)曼哈顿距离  ManhattanDistanceMeasure (3)马氏距离MahalanobisDistanceMeasure 马氏距离是由印度统计学家马哈拉诺比斯提出的,表示数据的协方差距离.它 是一种有效的计算两个未知样本集的相似度的方法.与欧氏距离不同的是它考虑到各种特性之间的联 系(例如:一条关于身高的信息会带来一条关于体重的信息

mahout系列:Dirichlet 分布

Dirichlet分布可以看做是分布之上的分布.如何理解这句话,我们可以先举个例子:假设我们有 一个骰子,其有六面,分别为{1,2,3,4,5,6}.现在我们做了10000次投掷的实验,得到的实验结果是 六面分别出现了{2000,2000,2000,2000,1000,1000}次,如果用每一面出现的次数与试验总数的比值估 计这个面出现的概率,则我们得到六面出现的概率,分别为{0.2,0.2,0.2,0.2,0.1,0.1}.现在,我们 还不满足,我们想要做10000次试验,每次试验中我们都投掷

MinHash原理与应用

MinHash首先它是一种基于 Jaccard Index 相似度的算法,也是一种LSH的降维的方法,应用于大数据集的相似度检索.推荐系统.下边按我的理解介绍下MinHash. 举例A,B 两个集合: A = {s1, s3, s6, s8, s9} B = {s3, s4, s7, s8, s10} 根据Jaccard Index公式,A,B的相似度 S(A,B) = |A∩B|/|A∪B| = 2/8 = 0.25 当然直接计算两个集合的交集与并集,是很耗计算资源的,特别是在海量数据场景下不

Mahout和Hadoop:机器学习的基本原理

计算技术通常用来分析数据,而理解数据则依赖于机器学习.多年来,对于大多数开发者来说,机器学习却是非常遥远.一直是难以企及的. 这可能是现在收益最高,也是最受欢迎的一项技术之一.毫无疑问--作为开发人员,机器学习是一个能够大展身手的舞台. 图1:机器学习的构成 机器学习是简单数据检索与存储的合理扩展.通过开发各种组件,使计算机更加智能学习和发生行为. 机器学习使得挖掘历史数据和预测未来趋势成为可能.你可能还没意识到,但的确已经在使用机器学习,并受益颇多.与机器学习有关的例子很多,如搜索引擎产生结果

《R与Hadoop大数据分析实战》一1.7 Hadoop的子项目

1.7 Hadoop的子项目 Mahout是一个很强大的数据挖掘库,其中包含大部分与数据挖掘有关的机器学习算法,可实现聚类.分类.回归分析及统计建模等,可用于智能应用,它也是一个不错的机器学习库. Apache Mahout是一个商用软件,需要Apache软件分发的许可证.Apache Mahout的目标是建立一个充满活力.反应灵敏.多样化的社区,以方便对项目本身以及潜在使用案例的讨论. 使用Mahout的一些公司如下: Amazon:这是一个提供个性化推荐的购物网站. AOL:这是一个有购物建