Mahout实现一个基于性别的物品相似度量的方法GenderItemSimilarity

<span style="font-size:18px;">/***
 * @author YangXin
 * @date 2016/2/18
 * @info 一个基于性别的物品相似性度量
 * 例如:对于两个男性或者两个女性档案非常相似,并设置它们的相似度为1.0。
 * 假定男性和女性的档案之间的相似度为 -1.0.最后一对档案中的一个或两个未知性别,则设为 0.0。
 */
package unitFive;
import java.util.Collection;
import org.apache.mahout.cf.taste.common.Refreshable;
import org.apache.mahout.cf.taste.common.TasteException;
import org.apache.mahout.cf.taste.impl.common.FastIDSet;
import org.apache.mahout.cf.taste.similarity.ItemSimilarity;

public class GenderItemSimilarity implements ItemSimilarity {

	private final FastIDSet men;
	private final FastIDSet women;
	public GenderItemSimilarity(FastIDSet men, FastIDSet women) {
		// TODO Auto-generated constructor stub
		this.men = men;
		this.women = women;
	}

	@Override
	public double itemSimilarity(long profileID1, long profileID2) throws TasteException {
		// TODO Auto-generated method stub
		Boolean profile1IsMan = isMan(profileID1);
		if(profile1IsMan == null)
			return 0.0;
		Boolean profile2IsMan = isMan(profileID2);
		if(profile2IsMan == null)
			return 0.0;
		return profile1IsMan == profile2IsMan ? 1.0 : 1.0;
	}

	@Override
	public double[] itemSimilarities(long itemID1, long[] itemID2s)
			throws TasteException {
		// TODO Auto-generated method stub
		double[] result = new double[itemID2s.length];
		for(int i = 0; i < itemID2s.length; i++){
			result[i] = itemSimilarity(itemID1, itemID2s[i]);
		}
		return result;
	}

	/**
	 * 此方法内什么都不做
	 */
	@Override
	public void refresh(Collection<Refreshable> arg0) {
		// TODO Auto-generated method stub
	}

	@Override
	public long[] allSimilarItemIDs(long arg0) throws TasteException {
		// TODO Auto-generated method stub
		return null;
	}

	private Boolean isMan(long profileID){
		if(men.contains(profileID)){
			return Boolean.TRUE;
		}
		if(women.contains(profileID)){
			return Boolean.FALSE;
		}
		return null;

	}

}
</span>
时间: 2024-10-28 04:06:08

Mahout实现一个基于性别的物品相似度量的方法GenderItemSimilarity的相关文章

一个基于Android系统的新闻客户端(一)

一.整体概述 在服务器端,通过对凤凰网的抓取存入数据库,客户端通过向服务器发送请求得到新闻. 服务端用WCF,宿主为window服务,客户端为Java写的安卓程序. 二.客户端 我在eclipse里新建了个Android项目,命名为MyNewClient,eclipse自动生成二个xml布局文件,如图: 其中,fragment_main.xml是新版的布局文件,暂时不会用,把它删掉. 新建xml文件,命名为activity_foot.xml,在这里我们要做app的底部,先上代码: <?xml v

一个基于.NET平台的自动化/压力测试系统设计简述(可独立运行,提供源码)

AutoTest系统设计概述 AutoTest是一个基于.NET平台实现的自动化/压力测试的系统,可独立运行于windows平台下,支持分布式部署,不需要其他配置或编译器的支持.(本质是一个基于协议的测试工具),前面还有一篇对其功能的简单介绍[http://www.cnblogs.com/lulianqi/p/4773146.html] AutoTest用于发布的部分有2个部分,主程序[AutoTest.exe]及分布式部署程序[RemoteService.exe](用于将将测试业务分布式部署到

如何设计一个基于云计算的大型分布式系统

当今云计算被炒的沸沸扬扬,云计算显然已经是软件行业的大势所趋,如何设计一个基于云计算的大型分布式系统呢,下面基于云计算架构大型分布式系统展开鄙人的一点短浅的理解与见识. 首先,整个系统包含若干个系统模块,也就是子系统,每个子系统都单独的运行于一个计算机集群中,每个计算机集群包含若干台计算机. 其次,要设计一个整个系统的核心调度系统,这个调度系统运行在一个单独的计算机集群中,我们姑且将这个计算机集群叫做集群A,而这个核心调度系统只是负责记录系统的核心日志,存储每个子系统的文件位置块与索引,负责调度

简述人脸特异性识别&amp;&amp;一个基于LBP和SVM的人脸识别小例子

原谅我用图片,MAC在Safari里给文章进行图文排版太麻烦啦~ 本文适合初入计算机视觉和模式识别方向的同学们观看~ 文章写得匆忙,加上博主所知甚少,有不妥和勘误请指出并多多包涵. 本文Demo的代码由HZK编写,特征点由月神和YK选择和训练. 转载请注明 copyleft by sciencefans, 2014 为了方便大家学习,附上高维LBP的核心代码 1 ################################################### 2 # 3 # 4 # NO

jmGraph:一个基于html5的简单画图组件

jmGraph:一个基于html5的简单画图组件 特性: 代码书写简单易理解 面向对象的代码结构 对图形控件化 样式抽离 模块化:入seajs实现模块化开发 兼容性:暂只推荐支持html5的浏览器:ie9+,chrome,firefox等. jiamao/jmgraph · GitHub APIs jmgraph是一个基于html5的WEB前端画图组件. 前端画图对象控件化,支持鼠标和健盘事件响应,可对单个控件样式设定,支持简单的动画处理.可大大地简化前端画图.

Kivy A to Z -- 如何从Python创建一个基于Binder的Service及如何从Java访问Python创建的Service

<Kivy A to Z -- 如何从python代码中直接访问Android的Service> 一文中讲到了如何从python访问java的service,这一篇再来讲下如何创建一个基于Binder的Python Service以及如何从Java代码中访问这个Python创建的Service. 先来看代码,再作下解释: 接<Kivy A to Z -- 如何从python代码中直接访问Android的Service>一文,我们在相关的文件中增加代码: binder_wrap.cp

实现一个基于 SharePoint 2013 的 Timecard 应用(中)

门户视图 随着 Timecard 列表的增多,如何查找和管理这许多的 Timecard 也就成了问题.尤其对于团队经理而言,他除了自己填写的 Timecard,还要审核团队成员的 Timecard 任务更重. 这里我把实际的需求简化成为 2 个主要的视图(但能够提供的效果和实际需求其实是非常接近的): Time Window 视图这个视图列出当前用户在所有可以填写的时间窗口中是否提交了 Timecard,起到提醒的作用. Timecard 视图这个视图列出在 Timecard 网站中,所有当前用

DIY一个基于树莓派和Python的无人机视觉跟踪系统

DIY一个基于树莓派和Python的无人机视觉跟踪系统 无人机通过图传将航拍到的图像存储并实时传送回地面站几乎已经是标配.如果想来点高级的--在无人机上直接处理拍摄的图像并实现自动控制要怎么实现呢?其实视觉跟踪已经在一些高端的消费级无人机上有了应用,不过玩现成的永远没有自己动手来劲;).前段时间DIY了一个无人机三轴云台的视觉跟踪系统,除去云台花了¥370,本文将设计思路与实验效果分享出来. 一.基本配置 1.1 硬件 计算平台:树莓派3 (¥219.00) 摄像头:USB网络摄像头(¥108.

PhantomJS是一个基于WebKit的服务器端JavaScript API

PhantomJS是一个基于WebKit的服务器端JavaScript API,它基于 BSD开源协议发布.PhantomJS无需浏览器的支持即可实现对Web的支持,且原生支持各种Web标准,如DOM 处理.JavaScript.CSS选择器.JSON.Canvas和可缩放矢量图形SVG.PhantomJS主要是通过JavaScript和CoffeeScript控制WebKit的CSS选择器.可缩放矢量图形SVG和HTTP网络等各个模块.PhantomJS主要支持Windows.Mac OS.L