001/** 002 * 003 */ 004package org.dllearner.algorithms.isle.metrics; 005 006import org.dllearner.algorithms.isle.index.Index; 007import org.semanticweb.owlapi.model.OWLEntity; 008 009/** 010 * Chi Squared 011 * @author Andre Melo 012 * 013 */ 014public class ChiSquareRelevanceMetric extends AbstractRelevanceMetric { 015 016 public ChiSquareRelevanceMetric(Index index) { 017 super(index); 018 } 019 020 private double chiSquareIteration(double fXY, double e_fXY) { 021 return Math.pow(fXY - e_fXY, 2)/e_fXY; 022 } 023 024 @Override 025 public synchronized double getRelevance(OWLEntity entityA, OWLEntity entityB){ 026 double fA = index.getNumberOfDocumentsFor(entityA); 027 double fB = index.getNumberOfDocumentsFor(entityB); 028 double N = index.getTotalNumberOfDocuments(); 029 030 if (N==0 || fA==0 || fB==0) 031 return 0; 032 033 double fAB = index.getNumberOfDocumentsFor(entityA, entityB); 034 035 double e_fAB = fA*fB/N; // Expected frequency of A and B assuming independence 036 037 double chi2 = 0; 038 039 // X=A and Y=B 040 chi2 += chiSquareIteration(fAB, e_fAB); 041 // X=A and Y=not B 042 chi2 += chiSquareIteration(fA-fAB, fA-e_fAB); 043 // X=not A and Y=B 044 chi2 += chiSquareIteration(fB-fAB, fB-e_fAB); 045 // X=not A and Y=not B 046 chi2 += chiSquareIteration(N-fA-fB+fAB, N-fA-fB+e_fAB); 047 048 return chi2; 049 } 050 051 @Override 052 public synchronized double getNormalizedRelevance(OWLEntity entityA, OWLEntity entityB){ 053 return Double.NaN; 054 } 055 056}