16b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua/*
26b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua * Copyright (C) 2011 The Android Open Source Project
36b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua *
46b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua * Licensed under the Apache License, Version 2.0 (the "License");
56b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua * you may not use this file except in compliance with the License.
66b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua * You may obtain a copy of the License at
76b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua *
86b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua *      http://www.apache.org/licenses/LICENSE-2.0
96b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua *
106b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua * Unless required by applicable law or agreed to in writing, software
116b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua * distributed under the License is distributed on an "AS IS" BASIS,
126b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
136b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua * See the License for the specific language governing permissions and
146b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua * limitations under the License.
156b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua */
166b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua
176b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua
186b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Huapackage android.bordeaux.learning;
196b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua
206b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua/**
216b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua * Wrapper for multiclass passive aggressive classifier.
226b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua * version 1 supports indexed sparse feature only.
236b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua */
246b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Huapublic class MulticlassPA {
256b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua
266b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua    public MulticlassPA(int numClasses, int numDimensions, float aggressiveness) {
276b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua      nativeClassifier = initNativeClassifier(numClasses, numDimensions,
286b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua                                              aggressiveness);
296b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua    }
306b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua
316b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua    /**
326b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua     * Train on one example
336b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua     */
346b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua    public boolean sparseTrainOneExample(int[] index_array,
356b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua                                       float[] float_array,
366b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua                                       int target) {
376b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua        return nativeSparseTrainOneExample(
386b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua                index_array, float_array, target, nativeClassifier);
396b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua    }
406b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua
416b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua    /**
426b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua     * Train on one example
436b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua     */
446b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua    public int sparseGetClass(int[] index_array, float[] float_array) {
456b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua        return nativeSparseGetClass(index_array, float_array, nativeClassifier);
466b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua    }
476b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua
486b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua    static {
496b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua        System.loadLibrary("bordeaux");
506b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua    }
516b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua
5255f6e8b32805d662fe05e2e3a8ea6dd9d303a324Marcus Oakland    private long nativeClassifier;
536b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua
546b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua    /*
556b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua     * Initialize native classifier
566b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua     */
5755f6e8b32805d662fe05e2e3a8ea6dd9d303a324Marcus Oakland    private native long initNativeClassifier(int num_classes, int num_dims, float aggressiveness);
586b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua
5955f6e8b32805d662fe05e2e3a8ea6dd9d303a324Marcus Oakland    private native void deleteNativeClassifier(long classPtr);
606b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua
616b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua    private native boolean nativeSparseTrainOneExample(int[] index_array,
626b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua                                                     float[] float_array,
6355f6e8b32805d662fe05e2e3a8ea6dd9d303a324Marcus Oakland                                                     int target, long classPtr);
646b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua
656b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua    private native int nativeSparseGetClass(int[] index_array,
666b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua                                            float[] float_array,
6755f6e8b32805d662fe05e2e3a8ea6dd9d303a324Marcus Oakland                                            long classPtr);
686b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua}
69