16b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua/*
26b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua * Copyright (C) 2012 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// This file contains a few utilities for MulticlassPA
186b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua
196b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua#include "learning/multiclass_pa/util.h"
206b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua
216b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua#include <string>
226b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua
236b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua#include "learning/multiclass_pa/multiclass_pa.h"
246b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua#include "learning/multiclass_pa/multiclass_pa_max.h"
256b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua#include "learning/multiclass_pa/multiclass_pa_opt.h"
266b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua#include "learning/multiclass_pa/multiclass_warp.h"
276b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua#include "strings/strutil.h"
286b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua
296b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Huanamespace learning_multiclass_pa {
306b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua
316b4eebc73439cbc3ddfb547444a341d1f9be7996Wei HuaMulticlassPA* CreateMulticlassPA(const string& version,
326b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua                                 int32 num_classes,
336b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua                                 int32 num_dimensions,
346b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua                                 float aggressiveness) {
356b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua  MulticlassPA* machine = NULL;
366b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua  if (StringCaseEqual(version, "max")) {
376b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua    machine = reinterpret_cast<MulticlassPA*>(
386b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua      new MulticlassPAMax(num_classes, num_dimensions, aggressiveness));
396b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua  } else if (StringCaseEqual(version, "opt")) {
406b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua    machine = reinterpret_cast<MulticlassPA*>(
416b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua      new MulticlassPAOpt(num_classes, num_dimensions, aggressiveness));
426b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua  } else if (StringCaseEqual(version, "random")) {
436b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua    machine = new MulticlassPA(num_classes, num_dimensions, aggressiveness);
446b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua  } else if (StringCaseEqual(version, "warp")) {
456b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua    machine = reinterpret_cast<MulticlassPA*>(
466b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua      new MulticlassWarp(num_classes, num_dimensions, aggressiveness));
476b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua  } else {
486b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua    LOG(ERROR) << "Machine type (" << version << ") unknown";
496b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua  }
506b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua  return machine;
516b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua}
526b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua}  // namespace learning_multiclass_pa
53