001/* 002 * Copyright (c) 2015-2020, Oracle and/or its affiliates. All rights reserved. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 017package org.tribuo.classification.sgd; 018 019import com.oracle.labs.mlrg.olcut.util.Pair; 020import org.tribuo.common.sgd.SGDObjective; 021import org.tribuo.math.la.SGDVector; 022import org.tribuo.math.util.VectorNormalizer; 023 024/** 025 * An interface for single label prediction objectives. 026 * <p> 027 * An objective knows if it generates a probabilistic model or not, 028 * and what kind of normalization needs to be applied to produce probability values. 029 */ 030public interface LabelObjective extends SGDObjective<Integer> { 031 032 /** 033 * Scores a prediction, returning the loss and a vector of per label gradients. 034 * 035 * @deprecated In 4.1, to migrate to the new name {@link #lossAndGradient}. 036 * @param truth The true label id. 037 * @param prediction The prediction for each label id. 038 * @return The score and per label gradient. 039 */ 040 @Deprecated 041 Pair<Double, SGDVector> valueAndGradient(int truth, SGDVector prediction); 042 043 @Override 044 default Pair<Double, SGDVector> lossAndGradient(Integer truth, SGDVector prediction) { 045 return valueAndGradient(truth, prediction); 046 } 047 048 /** 049 * Generates a new {@link VectorNormalizer} which normalizes the predictions into [0,1]. 050 * @return The vector normalizer for this objective. 051 */ 052 public VectorNormalizer getNormalizer(); 053 054 /** 055 * Does the objective function score probabilities or not? 056 * @return boolean. 057 */ 058 public boolean isProbabilistic(); 059 060}