1984e52f31d596840cfa51b1238e1c43d2e1918f8saberian/*
2984e52f31d596840cfa51b1238e1c43d2e1918f8saberian * Copyright (C) 2011 The Android Open Source Project
3984e52f31d596840cfa51b1238e1c43d2e1918f8saberian *
4984e52f31d596840cfa51b1238e1c43d2e1918f8saberian * Licensed under the Apache License, Version 2.0 (the "License");
5984e52f31d596840cfa51b1238e1c43d2e1918f8saberian * you may not use this file except in compliance with the License.
6984e52f31d596840cfa51b1238e1c43d2e1918f8saberian * You may obtain a copy of the License at
7984e52f31d596840cfa51b1238e1c43d2e1918f8saberian *
8984e52f31d596840cfa51b1238e1c43d2e1918f8saberian *      http://www.apache.org/licenses/LICENSE-2.0
9984e52f31d596840cfa51b1238e1c43d2e1918f8saberian *
10984e52f31d596840cfa51b1238e1c43d2e1918f8saberian * Unless required by applicable law or agreed to in writing, software
11984e52f31d596840cfa51b1238e1c43d2e1918f8saberian * distributed under the License is distributed on an "AS IS" BASIS,
12984e52f31d596840cfa51b1238e1c43d2e1918f8saberian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13984e52f31d596840cfa51b1238e1c43d2e1918f8saberian * See the License for the specific language governing permissions and
14984e52f31d596840cfa51b1238e1c43d2e1918f8saberian * limitations under the License.
15984e52f31d596840cfa51b1238e1c43d2e1918f8saberian */
16984e52f31d596840cfa51b1238e1c43d2e1918f8saberian
17984e52f31d596840cfa51b1238e1c43d2e1918f8saberian
18984e52f31d596840cfa51b1238e1c43d2e1918f8saberianpackage android.bordeaux.learning;
19984e52f31d596840cfa51b1238e1c43d2e1918f8saberian
20984e52f31d596840cfa51b1238e1c43d2e1918f8saberianimport java.util.HashMap;
21984e52f31d596840cfa51b1238e1c43d2e1918f8saberianimport java.util.Map;
22984e52f31d596840cfa51b1238e1c43d2e1918f8saberianimport android.util.Log;
23984e52f31d596840cfa51b1238e1c43d2e1918f8saberian
24984e52f31d596840cfa51b1238e1c43d2e1918f8saberian/**
25984e52f31d596840cfa51b1238e1c43d2e1918f8saberian * A simple impelentation of histograms with sparse enteries using HashMap.
26984e52f31d596840cfa51b1238e1c43d2e1918f8saberian * User can push examples or extract probabilites from this histogram.
27984e52f31d596840cfa51b1238e1c43d2e1918f8saberian */
28984e52f31d596840cfa51b1238e1c43d2e1918f8saberianpublic class predictorHist {
29984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    private HashMap<String, Integer> mCountHist;
30984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    private int mSampleCount;
31984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    String TAG = "PredicrtHist";
32984e52f31d596840cfa51b1238e1c43d2e1918f8saberian
33984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    public predictorHist() {
34984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        mCountHist = new HashMap<String, Integer>();
35984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        mSampleCount = 0;
36984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    }
37984e52f31d596840cfa51b1238e1c43d2e1918f8saberian
38984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    // reset histogram
39984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    public void ResetPredictorHist() {
40984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        mCountHist.clear();
41984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        mSampleCount = 0;
42984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    }
43984e52f31d596840cfa51b1238e1c43d2e1918f8saberian
44984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    // getters
45984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    public final HashMap<String, Integer> getHist() {
46984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        return mCountHist;
47984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    }
48984e52f31d596840cfa51b1238e1c43d2e1918f8saberian
49984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    public int getHistCounts() {
50984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        return mSampleCount;
51984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    }
52984e52f31d596840cfa51b1238e1c43d2e1918f8saberian
53984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    //setter
54984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    public void set(HashMap<String, Integer> hist) {
55984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        ResetPredictorHist();
56984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        for (Map.Entry<String, Integer> x : hist.entrySet()) {
57984e52f31d596840cfa51b1238e1c43d2e1918f8saberian            mCountHist.put(x.getKey(), x.getValue());
58984e52f31d596840cfa51b1238e1c43d2e1918f8saberian            mSampleCount = mSampleCount + x.getValue();
59984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        }
60984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    }
61984e52f31d596840cfa51b1238e1c43d2e1918f8saberian
62984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    /**
63984e52f31d596840cfa51b1238e1c43d2e1918f8saberian     * pushes a new example to the histogram
64984e52f31d596840cfa51b1238e1c43d2e1918f8saberian     */
65984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    public void pushSample( String fs) {
66984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        int histValue = 1;
67984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        if (mCountHist.get(fs) != null )
68984e52f31d596840cfa51b1238e1c43d2e1918f8saberian            histValue = histValue + mCountHist.get(fs);
69984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        mCountHist.put(fs,histValue);
70984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        mSampleCount++;
71984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    }
72984e52f31d596840cfa51b1238e1c43d2e1918f8saberian
73984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    /**
74984e52f31d596840cfa51b1238e1c43d2e1918f8saberian     * return probabilty of an exmple using the histogram
75984e52f31d596840cfa51b1238e1c43d2e1918f8saberian     */
76984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    public float getProbability(String fs) {
77984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        float res = 0;
78984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        if (mCountHist.get(fs) != null )
79984e52f31d596840cfa51b1238e1c43d2e1918f8saberian            res = ((float) mCountHist.get(fs)) / ((float)mSampleCount);
80984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        return res;
81984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    }
82984e52f31d596840cfa51b1238e1c43d2e1918f8saberian}
83