# margin

Class: CompactClassificationSVM

Classification margins for support vector machine classifiers

## Syntax

• `m = margin(SVMModel,X,Y)` example

## Description

example

````m = margin(SVMModel,X,Y)` returns the classification margins (`m`) for the trained support vector machine (SVM) classifier `SVMModel` using the predictor data `X` and class labels `Y`.```

## Input Arguments

collapse all

### `SVMModel` — SVM classifier`ClassificationSVM` classifier | `CompactClassificationSVM` classifier

SVM classifier, specified as a `ClassificationSVM` classifier or `CompactClassificationSVM` classifier returned by `fitcsvm` or `compact`, respectively.

### `X` — Predictor datanumeric matrix

Predictor data, specified as a numeric matrix.

Each row of `X` corresponds to one observation (also known as an instance or example), and each column corresponds to one variable (also known as a feature). The variables making up the columns of `X` should be the same as the variables that trained the `SVMModel` classifier.

The length of `Y` and the number of rows of `X` must be equal.

If you set `'Standardize',true` in `fitcsvm` to train `SVMModel`, then the software standardizes the columns of `X` using the corresponding means in `SVMModel.Mu` and standard deviations in `SVMModel.Sigma`.

Data Types: `double` | `single`

### `Y` — Class labelscategorical array | character array | logical vector | vector of numeric values | cell array of strings

Class labels, specified as a categorical or character array, logical or numeric vector, or cell array of strings. `Y` must be the same as the data type of `SVMModel.ClassNames`.

The length of `Y` and the number of rows of `X` must be equal.

## Output Arguments

collapse all

### `m` — Classification marginsnumeric vector

Classification margins, returned as a numeric vector.

`m` has the same length as `Y`. The software estimates each entry of `m` using the trained SVM classifier `SVMModel`, the corresponding row of `X`, and the true class label `Y`.

## Definitions

### Classification Margin

The classification margins are, for each observation, the difference between the score for the true class and maximal score for the false classes. Provided that they are on the same scale, margins serve as a classification confidence measure, i.e., among multiple classifiers, those that yield larger margins are better [2].

### Classification Edge

The edge is the weighted mean of the classification margins.

The weights are the prior class probabilities. If you supply weights, then the software normalizes them to sum to the prior probabilities in the respective classes. The software uses the renormalized weights to compute the weighted mean.

One way to choose among multiple classifiers, e.g., to perform feature selection, is to choose the classifier that yields the highest edge.

### Score

The SVM score for classifying observation x is the signed distance from x to the decision boundary ranging from -∞ to +∞. A positive score for a class indicates that x is predicted to be in that class, a negative score indicates otherwise.

The score is also the numerical, predicted response for x, $f\left(x\right)$, computed by the trained SVM classification function

$f\left(x\right)=\sum _{j=1}^{n}{\alpha }_{j}{y}_{j}G\left({x}_{j},x\right)+b,$

where $\left({\alpha }_{1},...,{\alpha }_{n},b\right)$ are the estimated SVM parameters, $G\left({x}_{j},x\right)$ is the dot product in the predictor space between x and the support vectors, and the sum includes the training set observations.

If G(xj,x) = xjx (the linear kernel), then the score function reduces to

$f\left(x\right)=\left(x/s\right)\prime \beta +b.$

s is the kernel scale and β is the vector of fitted linear coefficients.

## Examples

collapse all

### Estimate Test Sample Classification Margins of SVM Classifiers

Load the `ionosphere` data set.

```load ionosphere rng(1); % For reproducibility ```

Train an SVM classifier. Specify a 15% holdout sample for testing. It is good practice to specify the class order and standardize the data.

```CVSVMModel = fitcsvm(X,Y,'Holdout',0.15,'ClassNames',{'b','g'},... 'Standardize',true); CompactSVMModel = CVSVMModel.Trained{1}; ... % Extract the trained, compact classifier testInds = test(CVSVMModel.Partition); % Extract the test indices XTest = X(testInds,:); YTest = Y(testInds,:); ```

`CVSVMModel` is a `ClassificationPartitionedModel` classifier. It contains the property `Trained`, which is a 1-by-1 cell array holding a `CompactClassificationSVM` classifier that the software trained using the training set.

Estimate the test sample classification margins.

```m = margin(CompactSVMModel,XTest,YTest); m(10:20) ```
```ans = 3.5461 5.5939 4.9948 4.5611 -4.7963 5.5127 -2.8776 1.8673 9.4986 9.5018 20.9954 ```

An observation margin is the observed true class score minus the maximum false class score among all scores in the respective class. Classifiers that yield relatively large margins are desirable.

### Select SVM Classifier Features by Examining Test Sample Margins

The classifier margins measure, for each observation, the difference between the true class observed score and the maximal false class score for a particular class. One way to perform feature selection is to compare test sample margins from multiple models. Based solely on this criterion, the model with the highest margins is the best model.

Load the `ionosphere` data set.

```load ionosphere rng(1); % For reproducibility ```

Partition the data set into training and test sets. Specify a 15% holdout sample for testing.

```Partition = cvpartition(Y,'Holdout',0.15); testInds = test(Partition); % Indices for the test set XTest = X(testInds,:); YTest = Y(testInds,:); ```

Partition defines the data set partition.

Define these two data sets:

• `fullX` contains all predictors (except the removed column of 0s).

• `partX` contains the last 20 predictors.

```fullX = X; partX = X(:,end-20:end); ```

Train SVM classifiers for each predictor set. Specify the partition definition.

```FullCVSVMModel = fitcsvm(fullX,Y,'CVPartition',Partition); PartCVSVMModel = fitcsvm(partX,Y,'CVPartition',Partition); FCSVMModel = FullCVSVMModel.Trained{1}; PCSVMModel = PartCVSVMModel.Trained{1}; ```

`FullCVSVMModel` and `PartCVSVMModel` are `ClassificationPartitionedModel` classifiers. They contain the property `Trained`, which is a 1-by-1 cell array holding a `CompactClassificationSVM` classifier that the software trained using the training set.

Estimate the test sample margins for each classifier.

```fullM = margin(FCSVMModel,XTest,YTest); partM = margin(PCSVMModel,XTest(:,end-20:end),YTest); n = size(XTest,1); p = sum(fullM < partM)/n ```
```p = 0.2500 ```

Approximately 25% of the margins from the full model are less than those from the model with fewer predictors. This suggests that the model trained using all of the predictors is better.

## Algorithms

For binary classification, the software defines the margin for observation j, mj, as

${m}_{j}=2{y}_{j}f\left({x}_{j}\right),$

where yj ∊ {-1,1}, and f(xj) is the predicted score of observation j for the positive class. However, the literature commonly uses mj = yjf(xj) to define the margin.

## References

[1] Christianini, N., and J. C. Shawe-Taylor. An Introduction to Support Vector Machines and Other Kernel-Based Learning Methods. Cambridge, UK: Cambridge University Press, 2000.

[2] Hu, Q. X. Che, L. Zhang, and D. Yu. "Feature Evaluation and Selection Based on Neighborhood Soft Margin." Neurocomputing. Vol. 73, 2010, pp. 2114–2124.