-
Notifications
You must be signed in to change notification settings - Fork 1
/
trainClassifier.m
93 lines (84 loc) · 5.21 KB
/
trainClassifier.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
function [trainedClassifier, validationAccuracy, validationPredictions, validationScores] = trainClassifier(trainingData)
% trainClassifier(trainingData)
% returns a trained classifier and its accuracy.
% This code recreates the classification model trained in
% Classification Learner app.
%
% Input:
% trainingData: the training data of same data type as imported
% in the app (table or matrix).
%
% Output:
% trainedClassifier: a struct containing the trained classifier.
% The struct contains various fields with information about the
% trained classifier.
%
% trainedClassifier.predictFcn: a function to make predictions
% on new data. It takes an input of the same form as this training
% code (table or matrix) and returns predictions for the response.
% If you supply a matrix, include only the predictors columns (or
% rows).
%
% validationAccuracy: a double containing the accuracy in
% percent. In the app, the History list displays this
% overall accuracy score for each model.
%
% Use the code to train the model with new data.
% To retrain your classifier, call the function from the command line
% with your original data or new data as the input argument trainingData.
%
% For example, to retrain a classifier trained with the original data set
% T, enter:
% [trainedClassifier, validationAccuracy] = trainClassifier(T)
%
% To make predictions with the returned 'trainedClassifier' on new data T,
% use
% yfit = trainedClassifier.predictFcn(T)
%
% To automate training the same classifier with new data, or to learn how
% to programmatically train classifiers, examine the generated code.
% Auto-generated by MATLAB on 23-Mar-2018 14:23:58
% Extract predictors and response
% This code processes the data into the right shape for training the
% classifier.
inputTable = trainingData;
predictorNames = {...
'imMat1', 'imMat2', 'imMat3', 'imMat4', 'imMat5', 'imMat6', 'imMat7', 'imMat8', 'imMat9', ...
'imMat10', 'imMat11', 'imMat12', 'imMat13', 'imMat14', 'imMat15', 'imMat16', 'imMat17', 'imMat18', 'imMat19', 'imMat20', ...
'imMat21', 'imMat22', 'imMat23', 'imMat24', 'imMat25', 'imMat26', 'imMat27', 'imMat28', 'imMat29', 'imMat30', 'imMat31', 'imMat32', 'imMat33', 'imMat34', 'imMat35', 'imMat36', 'imMat37', 'imMat38', 'imMat39', 'imMat40', ...
'imMat41', 'imMat42', 'imMat43', 'imMat44', 'imMat45', 'imMat46', 'imMat47'...
};
predictors = inputTable(:, predictorNames);
response = inputTable.Var48;
isCategoricalPredictor = [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false];
% Train a classifier
% This code specifies all the classifier options and trains the classifier.
classificationKNN = fitcknn(...
predictors, ...
response, ...
'Distance', 'Euclidean', ...
'Exponent', [], ...
'NumNeighbors', 1, ...
'DistanceWeight', 'Equal', ...
'Standardize', true, ...
'ClassNames', {'cyst'; 'prcc'});
% Create the result struct with predict function
predictorExtractionFcn = @(t) t(:, predictorNames);
knnPredictFcn = @(x) predict(classificationKNN, x);
trainedClassifier.predictFcn = @(x) knnPredictFcn(predictorExtractionFcn(x));
% Add additional fields to the result struct
trainedClassifier.RequiredVariables = {...
'imMat1', 'imMat2', 'imMat3', 'imMat4', 'imMat5', 'imMat6', 'imMat7', 'imMat8', 'imMat9', ...
'imMat10', 'imMat11', 'imMat12', 'imMat13', 'imMat14', 'imMat15', 'imMat16', 'imMat17', 'imMat18', 'imMat19', 'imMat20', ...
'imMat21', 'imMat22', 'imMat23', 'imMat24', 'imMat25', 'imMat26', 'imMat27', 'imMat28', 'imMat29', 'imMat30', 'imMat31', 'imMat32', 'imMat33', 'imMat34', 'imMat35', 'imMat36', 'imMat37', 'imMat38', 'imMat39', 'imMat40', ...
'imMat41', 'imMat42', 'imMat43', 'imMat44', 'imMat45', 'imMat46', 'imMat47'...
};
trainedClassifier.ClassificationKNN = classificationKNN;
trainedClassifier.About = 'This struct is a trained classifier exported from Classification Learner R2016b.';
trainedClassifier.HowToPredict = sprintf('To make predictions on a new table, T, use: \n yfit = c.predictFcn(T) \nreplacing ''c'' with the name of the variable that is this struct, e.g. ''trainedClassifier''. \n \nThe table, T, must contain the variables returned by: \n c.RequiredVariables \nVariable formats (e.g. matrix/vector, datatype) must match the original training data. \nAdditional variables are ignored. \n \nFor more information, see <a href="matlab:helpview(fullfile(docroot, ''stats'', ''stats.map''), ''appclassification_exportmodeltoworkspace'')">How to predict using an exported model</a>.');
% Perform cross-validation
partitionedModel = crossval(trainedClassifier.ClassificationKNN, 'KFold', 10);
% Compute validation accuracy
validationAccuracy = 1 - kfoldLoss(partitionedModel, 'LossFun', 'ClassifError');
% Compute validation predictions and scores
[validationPredictions, validationScores] = kfoldPredict(partitionedModel);