All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.shijingsh.ai.evaluate.ranking.AUCEvaluator Maven / Gradle / Ivy

The newest version!
package com.shijingsh.ai.evaluate.ranking;

import java.util.HashSet;
import java.util.Set;

import com.shijingsh.ai.evaluate.RankingEvaluator;

import com.shijingsh.ai.evaluate.RankingEvaluator;
import it.unimi.dsi.fastutil.ints.IntList;
import it.unimi.dsi.fastutil.ints.IntSet;

/**
 * ROC曲线下的面积评估器
 *
 * 
 * AUC = Area Under roc Curve(ROC曲线下面积)
 * http://www.cnblogs.com/lixiaolun/p/4053499.html
 * 
* * @author Birdy */ public class AUCEvaluator extends RankingEvaluator { public AUCEvaluator(int size) { super(size); } @Override protected float measure(IntSet checkCollection, IntList rankList) { // 推荐物品集合(大小不能超过TopN) int evaluateSize = rankList.size(); if (evaluateSize > size) { rankList = rankList.subList(0, size); } int hitCount = 0, missCount = 0; Set recommendItems = new HashSet<>(); for (int itemIndex : rankList) { recommendItems.add(itemIndex); if (checkCollection.contains(itemIndex)) { hitCount++; } else { missCount++; } } int evaluateSum = (checkCollection.size() + evaluateSize - rankList.size() - hitCount) * hitCount; if (evaluateSum == 0) { return 0.5F; } int hitSum = 0; hitCount = 0; for (Integer itemIndex : checkCollection) { if (!recommendItems.contains(itemIndex)) { hitSum += hitCount; } else { hitCount++; } } hitSum += hitCount * (evaluateSize - missCount); return (hitSum + 0F) / evaluateSum; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy