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