Hadoop里的数据挖掘应用-Mahout——学习笔记<三>

之前有幸在MOOC学院抽中小象学院hadoop体验课。 
这是小象学院hadoop2.X的笔记

由于平时对数据挖掘做的比较多,所以优先看Mahout方向视频。

Mahout有很好的扩展性与容错性(基于HDFS&MapReduce开发),实现了大部分常用的数据挖掘算法(聚类、分类、推荐算法)不过数据挖掘调参和业务理解是关键,个人觉得真正想学习的话,还是看正规机器学习的课程比较好。

这里省略了大部分比较技术那一块的笔记。。。

虽然mahout在速度上有天然优势。但R/Python其实也在接入hadoop,如RHadoop等 
而且正如[别老扯什么Hadoop了,你的数据根本不够大](http://geek.csdn.net/news/detail/2780) 这里提到的,在轻量级数据上,还是没有太大必要折腾hadoop,在hadoop上用mahout的前提应该是数据量非常大

不在博客园上阅读时才会看到的,这篇博文归http://www.cnblogs.com/weibaar 所有

仅保证在博客园博客上的排版干净利索还有代码块与图片正确显示,他站请保留作者信息尊重版权啊

一、课程概述

1、综合介绍 
2、聚类算法 
3、分类算法 
4、推荐算法

二、聚类算法

聚类应用场景如新闻聚类(多少条与之相关)。最常用的是k-means聚类 
基本流程应该是指定聚类次数,定位中心点,计算平均距离,最后实现产品分类。 
在Mahout里

1、提取feature

对新闻正文分词,对词编码,如doc1有哪些词出现,转化为0-1多维向量

2、feature向量化,多维的向量

之前的多维向量浪费空间,需要换一种表达方式,mahout里提供lucene或其他工具把这些feature转化为向量格式 
总之要实现有序的、节省空间的feature,最后储存为SequenceFile格式。

3、用kmeans实施聚类

bin/mahout kmeans \ 并可调相应格式

另外,mahout提供多种向量之间距离计算org.apache.mahout.distance

因此kmeans参数调优,有一个方法是对向量距离计算方法调优

cannopy算法:寻找最优的初始点

一般配合其他聚类方法使用 
如cannopy算法可以协助kmeans确定初始点

就是先随机选一个点,计算不同距离的点的个数,然后迭代计算,最后可以找出一个包含度较高的初始点 
(kmeans默认用随机点,指定canopy的话可以寻找最优的初始点,这个改进应该也是调参之一)

三、分类算法

属于有监督的机器学习算法,分类已经实现订好了,现在看什么因素是可以让我们快速定位其为该分类的数据 
所以应用步骤应该是,用训练集获得分类模型,测试调优后用于线上产品里

再调用其他的参数引用分类模型

模型评估常用的两个指标:confusion混淆矩阵 & AUC

不在博客园上阅读时才会看到的,这篇博文归http://www.cnblogs.com/weibaar 所有

仅保证在博客园博客上的排版干净利索还有代码块与图片正确显示,他站请保留作者信息尊重版权啊

四、推荐算法

用户,对什么物品,打多少分 
preference:倾向度,可以用user-item矩阵进行评分

就是用用户对其他物品的打分(基于相似用户的打分,重点是查找用户相似度)以及其他用户对该item的打分(重点查找相似的物品,用商品相似度作为权重填充)

User-based的推荐效果更好,用户效果好 
Item-based的效果较差,但是计算效率高,适合实时推荐系统

Mahout有自带一个Taste推荐系统实现。基于java,协同过滤,属于可靠高效的推荐引擎

时间: 2024-11-03 21:57:20

Hadoop里的数据挖掘应用-Mahout——学习笔记<三>的相关文章

Ajax学习笔记(三)

三.jQuery库详解 1.使用jQuery之后,javascript操作的不再是HTML元素对应的DOM对象,而是包装DOM对象的jQuery对象.js通过调用jQuery对象的方法来改变它所包装的DOM对象的属性,从而实现动态更新HTML页面. 由此可见,使用jQuery动态更新HTML页面只需以下两个步骤: (1)获取jQuery对象.jQuery对象通常是DOM对象的包装 (2)调用jQuery对象的方法来改变自身.当jQuery对象被改变时,jQuery包装的DOM对象随之改变,HTM

Caliburn.Micro学习笔记(三)----事件聚合IEventAggregator和 Ihandle&lt;T&gt;

Caliburn.Micro学习笔记(三)----事件聚合IEventAggregator和 Ihandle<T> 今天 说一下Caliburn.Micro的IEventAggregator和IHandle<T>分成两篇去讲这一篇写一个简单的例子 看一它的的实现和源码 下一篇用它们做一个多语言的demo 这两个是事件的订阅和广播,很强大,但用的时候要小心发生不必要的冲突. 先看一下它的实现思想 在Caliburn.Micro里EventAggregator要以单例的形式出现这样可以

加壳学习笔记(三)-简单的脱壳思路&amp;调试思路

首先一些windows的常用API: GetWindowTextA:以ASCII的形式的输入框 GetWindowTextW:以Unicaode宽字符的输入框 GetDlgItemTextA:以ASCII的形式的输入框 GetDlgItemTextW:以Unicaode宽字符的输入框 这些函数在使用的时候会有些参数提前入栈,如这函数要求的参数是字符串数目.还有大小写啦之类的东西,这些东西是要在调用该函数之前入栈,也就是依次push,就是说一般前面几个push接着一个call,那前面的push可能

【Unity 3D】学习笔记三十四:游戏元素——常用编辑器组件

常用编辑器组件 unity的特色之一就是编辑器可视化,很多常用的功能都可以在编辑器中完成.常用的编辑器可分为两种:原有组件和拓展组件.原有组件是编辑器原生的一些功能,拓展组件是编辑器智商通过脚本拓展的新功能. 摄像机 摄像机是unity最为核心组件之一,游戏界面中显示的一切内容都得需要摄像机来照射才能显示.摄像机组件的参数如下: clear flags:背景显示内容,默认的是skybox.前提是必须在render settings 中设置天空盒子材质. background:背景显示颜色,如果没

【Unity 3D】学习笔记三十七:物理引擎——碰撞与休眠

碰撞与休眠 上一篇笔记说过,当给予游戏对象刚体这个组件以后,那么这个组件将存在碰撞的可能性.一旦刚体开始运动,那么系统方法便会监视刚体的碰撞状态.一般刚体的碰撞分为三种:进入碰撞,碰撞中,和碰撞结束.关于休眠可以理解成为让游戏对象变成静止状态.如果给某个游戏对象休眠的状态,那么这个物体将立马静止,不再运动. 碰撞 首先学习下碰撞几个重要的方法: OnCollisionEnter(  ):刚体开始接触的时候,立即调用. OnCollisionStay(  ):碰撞过程中,每帧都会调用此方法,直到撞

【Unity 3D】学习笔记三十三:游戏元素——天空盒子

天空盒子 一般的3D游戏都会有着北京百年一遇的蓝天,让人惊叹不已.其实天空这个效果没有什么神秘的只需用到天空盒子这个组件就行,可以将天空设想成一个巨大的盒子,这个盒子将整个游戏视图和所有的游戏元素包含其中.在unity中制作天空盒子非常方便,只需要像设置其他组件一样设置下就行了.在制作天空盒子之前,我们需要搜集一些天空的贴图,不过,unity很方便的为开发者提供了天空盒子的资源包.首先在project视图中点击鼠标右键,然后选择import package--skyboxes即可添加天空盒子的资

【Unity 3D】学习笔记三十二:游戏元素——游戏光源

游戏光源 在3D游戏中,光源是一个非常具有特色的游戏组件.用来提升游戏画面质感的.如果没有加入光源,游戏场景可能就会显得很昏暗.在unity中提供了三种不同的光源类型:点光源,聚光灯,平行光. 点光源 顾名思义,点光源是从一个点向周围散发出光的光源,就像电灯一样.创建点光源在hierarchy视图中点击create--point light: 创建完以后,点击点光源对象,在右侧inspector视图中可以看到点光源的所有信息: type:光源的类型.有point(点光源),directional

angular学习笔记(三十)-指令(7)-compile和link(2)

继续上一篇:angular学习笔记(三十)-指令(7)-compile和link(1) 上一篇讲了compile函数的基本概念,接下来详细讲解compile和link的执行顺序. 看一段三个指令嵌套的代码: html: <body> <div ng-controller="compileCtrl"> <level-one> <level-two> <level-three> hello,{{name}} </level-

angular学习笔记(三十)-指令(2)

本篇主要讲解指令中的 restrict属性, replace属性, template属性 这三个属性 一. restrict: 字符串.定义指令在视图中的使用方式,一共有四种使用方式: 1. 元素: E 2. 属性: A 3. 样式类: C 4. 注释: M restrict的值可以是上面四个字母的任意一个或多个的组合. 不指定的话默认为A. 二. replace: 布尔值.是否将指令元素替换,可以有两个值: 1.true: 替换整个使用指令的元素 2.false: 不替换整个使用指令的元素,而