Этот пример показывает полный рабочий процесс для извлечения признаков от данных изображения.
Этот пример использует данные изображения MNIST [1], который состоит из изображений рукописных цифр. Изображения являются 28 28 пикселями в шкале полутонов. Каждое изображение имеет связанную метку от 0 до 9, который является цифрой, которую представляет изображение.
Начните путем получения изображения и пометьте данные из
http://yann.lecun.com/exdb/mnist/
Разархивируйте файлы. Для лучшей эффективности на этом долгом примере используйте тестовые данные в качестве обучающих данных и обучающих данных как тестовые данные.
imageFileName = 't10k-images.idx3-ubyte'; labelFileName = 't10k-labels.idx1-ubyte';
Обработайте файлы, чтобы загрузить их в рабочей области. Код для этой функции обработки появляется в конце этого примера.
[Xtrain,LabelTrain] = processMNISTdata(imageFileName,labelFileName);
Read MNIST image data... Number of images in the dataset: 10000 ... Each image is of 28 by 28 pixels... The image data is read to a matrix of dimensions: 10000 by 784... End of reading image data. Read MNIST label data... Number of labels in the dataset: 10000 ... The label data is read to a matrix of dimensions: 10000 by 1... End of reading label data.
Просмотрите несколько изображений.
rng('default') % For reproducibility numrows = size(Xtrain,1); ims = randi(numrows,4,1); imgs = Xtrain(ims,:); for i = 1:4 pp{i} = reshape(imgs(i,:),28,28); end ppf = [pp{1},pp{2};pp{3},pp{4}]; imshow(ppf);

Существует несколько факторов в выборе количества функций, чтобы извлечь:
Больше функций использует больше памяти и вычислительное время.
Меньше функций может произвести плохой классификатор.
В данном примере выберите 100 признаков.
q = 100;
Существует две функции извлечения признаков, sparsefilt и rica. Начните с sparsefilt функция. Определите номер итераций к 10 так, чтобы экстракция не занимала слишком много времени.
Как правило, вы получаете хорошие результаты путем выполнения sparsefilt алгоритм для нескольких итераций к нескольким сотням итераций. Выполнение алгоритма для слишком многих итераций может привести к уменьшенной точности классификации, типу сверхподходящей проблемы.
Используйте sparsefilt получить разреженную модель фильтрации при использовании 10 итераций.
Mdl = sparsefilt(Xtrain,q,'IterationLimit',10);
Warning: Solver LBFGS was not able to converge to a solution.
sparsefilt предупреждает, что внутренний оптимизатор LBFGS не сходился. Оптимизатор не сходился, потому что вы устанавливаете предел итерации к 10. Тем не менее, можно использовать результат обучить классификатор.
Преобразуйте исходные данные в представление новой возможности.
NewX = transform(Mdl,Xtrain);
Обучите линейный классификатор на основе преобразованных данных и правильных меток классификации в LabelTrain. Точность изученной модели чувствительна к fitcecoc параметр регуляризации Lambda. Попытайтесь найти оптимальное значение для Lambda при помощи OptimizeHyperparameters пара "имя-значение". Следует иметь в виду, что эта оптимизация занимает время. Если у вас есть лицензия Parallel Computing Toolbox™, используйте параллельные вычисления для более быстрого выполнения. Если у вас нет параллельной лицензии, удалите UseParallel вызовы прежде, чем запустить этот скрипт.
t = templateLinear('Solver','lbfgs'); options = struct('UseParallel',true); Cmdl = fitcecoc(NewX,LabelTrain,'Learners',t, ... 'OptimizeHyperparameters',{'Lambda'}, ... 'HyperparameterOptimizationOptions',options);
Copying objective function to workers...
Done copying objective function to workers.
|================================================================================================|
| Iter | Active | Eval | Objective | Objective | BestSoFar | BestSoFar | Lambda |
| | workers | result | | runtime | (observed) | (estim.) | |
|================================================================================================|
| 1 | 6 | Best | 0.5777 | 8.5334 | 0.5777 | 0.5777 | 0.20606 |
| 2 | 5 | Accept | 0.8865 | 8.9062 | 0.2041 | 0.27206 | 8.8234 |
| 3 | 5 | Best | 0.2041 | 9.7024 | 0.2041 | 0.27206 | 0.026804 |
| 4 | 6 | Best | 0.1077 | 14.629 | 0.1077 | 0.10773 | 1.7309e-09 |
| 5 | 6 | Best | 0.0962 | 15.767 | 0.0962 | 0.096203 | 0.0002442 |
| 6 | 6 | Accept | 0.1999 | 6.4363 | 0.0962 | 0.09622 | 0.024862 |
| 7 | 6 | Accept | 0.2074 | 6.4171 | 0.0962 | 0.096222 | 0.029034 |
| 8 | 6 | Accept | 0.1065 | 12.974 | 0.0962 | 0.096222 | 2.037e-08 |
| 9 | 6 | Accept | 0.0977 | 22.976 | 0.0962 | 0.096216 | 8.0495e-06 |
| 10 | 6 | Accept | 0.1237 | 8.5033 | 0.0962 | 0.096199 | 0.0029745 |
| 11 | 6 | Accept | 0.1076 | 10.653 | 0.0962 | 0.096208 | 0.00080903 |
| 12 | 6 | Accept | 0.1034 | 16.761 | 0.0962 | 0.0962 | 3.2145e-07 |
| 13 | 6 | Best | 0.0933 | 16.715 | 0.0933 | 0.093293 | 6.3327e-05 |
| 14 | 6 | Accept | 0.109 | 12.946 | 0.0933 | 0.09328 | 5.7887e-09 |
| 15 | 6 | Accept | 0.0994 | 18.805 | 0.0933 | 0.093312 | 1.8981e-06 |
| 16 | 6 | Accept | 0.106 | 15.088 | 0.0933 | 0.093306 | 7.4684e-08 |
| 17 | 6 | Accept | 0.0952 | 20.372 | 0.0933 | 0.093285 | 2.2831e-05 |
| 18 | 6 | Accept | 0.0933 | 14.528 | 0.0933 | 0.093459 | 0.00013097 |
| 19 | 6 | Accept | 0.1082 | 12.764 | 0.0933 | 0.093458 | 1.0001e-09 |
| 20 | 6 | Best | 0.0915 | 16.157 | 0.0915 | 0.092391 | 8.3234e-05 |
|================================================================================================|
| Iter | Active | Eval | Objective | Objective | BestSoFar | BestSoFar | Lambda |
| | workers | result | | runtime | (observed) | (estim.) | |
|================================================================================================|
| 21 | 6 | Accept | 0.8865 | 6.6373 | 0.0915 | 0.092387 | 1.6749 |
| 22 | 6 | Accept | 0.0929 | 17.306 | 0.0915 | 0.092457 | 0.00010668 |
| 23 | 6 | Accept | 0.0937 | 19.046 | 0.0915 | 0.092535 | 5.0962e-05 |
| 24 | 6 | Accept | 0.0916 | 17.932 | 0.0915 | 0.092306 | 9.023e-05 |
| 25 | 6 | Accept | 0.0935 | 17.53 | 0.0915 | 0.092431 | 0.00011726 |
| 26 | 6 | Accept | 0.1474 | 8.3795 | 0.0915 | 0.092397 | 0.006997 |
| 27 | 6 | Accept | 0.0939 | 19.188 | 0.0915 | 0.092427 | 5.2557e-05 |
| 28 | 6 | Accept | 0.1147 | 10.686 | 0.0915 | 0.092432 | 0.0015036 |
| 29 | 6 | Accept | 0.1049 | 16.609 | 0.0915 | 0.092434 | 1.4871e-07 |
| 30 | 6 | Accept | 0.1069 | 13.929 | 0.0915 | 0.092435 | 1.0899e-08 |
__________________________________________________________
Optimization completed.
MaxObjectiveEvaluations of 30 reached.
Total function evaluations: 30
Total elapsed time: 83.1976 seconds.
Total objective function evaluation time: 416.8767
Best observed feasible point:
Lambda
__________
8.3234e-05
Observed objective function value = 0.0915
Estimated objective function value = 0.09245
Function evaluation time = 16.1569
Best estimated feasible point (according to models):
Lambda
_________
9.023e-05
Estimated objective function value = 0.092435
Estimated function evaluation time = 17.0972


Проверяйте ошибку классификатора, когда применился к тестовым данным. Во-первых, загрузите тестовые данные.
imageFileName = 'train-images.idx3-ubyte'; labelFileName = 'train-labels.idx1-ubyte'; [Xtest,LabelTest] = processMNISTdata(imageFileName,labelFileName);
Read MNIST image data... Number of images in the dataset: 60000 ... Each image is of 28 by 28 pixels... The image data is read to a matrix of dimensions: 60000 by 784... End of reading image data. Read MNIST label data... Number of labels in the dataset: 60000 ... The label data is read to a matrix of dimensions: 60000 by 1... End of reading label data.
Вычислите потерю классификации при применении классификатора к тестовым данным.
TestX = transform(Mdl,Xtest); Loss = loss(Cmdl,TestX,LabelTest)
Loss =
0.1009
Это преобразование приводило к лучшему классификатору, чем один обученный на исходных данных? Создайте классификатор на основе исходных обучающих данных и оцените его потерю.
Omdl = fitcecoc(Xtrain,LabelTrain,'Learners',t, ... 'OptimizeHyperparameters',{'Lambda'}, ... 'HyperparameterOptimizationOptions',options); Losso = loss(Omdl,Xtest,LabelTest)
Copying objective function to workers...
Done copying objective function to workers.
|================================================================================================|
| Iter | Active | Eval | Objective | Objective | BestSoFar | BestSoFar | Lambda |
| | workers | result | | runtime | (observed) | (estim.) | |
|================================================================================================|
| 1 | 5 | Best | 0.0779 | 46.965 | 0.0779 | 0.0779 | 5.7933e-08 |
| 2 | 5 | Accept | 0.0779 | 47.003 | 0.0779 | 0.0779 | 3.8643e-09 |
| 3 | 5 | Accept | 0.0779 | 47.068 | 0.0779 | 0.0779 | 1.3269e-06 |
| 4 | 6 | Accept | 0.078 | 60.714 | 0.0779 | 0.077925 | 3.0332e-05 |
| 5 | 6 | Accept | 0.0787 | 133.21 | 0.0779 | 0.0779 | 0.011605 |
| 6 | 6 | Best | 0.0775 | 135.97 | 0.0775 | 0.077983 | 0.00020291 |
| 7 | 6 | Accept | 0.0779 | 44.642 | 0.0775 | 0.077971 | 5.735e-08 |
| 8 | 6 | Accept | 0.0785 | 123.19 | 0.0775 | 0.0775 | 0.024589 |
| 9 | 6 | Accept | 0.0779 | 43.574 | 0.0775 | 0.0775 | 1.0042e-09 |
| 10 | 6 | Accept | 0.0779 | 43.038 | 0.0775 | 0.0775 | 4.7227e-06 |
| 11 | 6 | Best | 0.0774 | 137.51 | 0.0774 | 0.077451 | 0.00021639 |
| 12 | 6 | Accept | 0.0779 | 44.07 | 0.0774 | 0.077452 | 6.7132e-09 |
| 13 | 6 | Accept | 0.0779 | 44.822 | 0.0774 | 0.077453 | 2.873e-07 |
| 14 | 6 | Best | 0.0744 | 233.12 | 0.0744 | 0.074402 | 6.805 |
| 15 | 6 | Accept | 0.0778 | 140.49 | 0.0744 | 0.074406 | 0.66889 |
| 16 | 6 | Accept | 0.0774 | 149.32 | 0.0744 | 0.074405 | 0.0002769 |
| 17 | 6 | Accept | 0.0774 | 155 | 0.0744 | 0.074404 | 0.00046083 |
| 18 | 6 | Accept | 0.0765 | 152.63 | 0.0744 | 0.074687 | 0.00027101 |
| 19 | 6 | Accept | 0.0768 | 156.32 | 0.0744 | 0.077558 | 0.00026573 |
| 20 | 6 | Best | 0.0725 | 255.51 | 0.0725 | 0.073249 | 9.9961 |
|================================================================================================|
| Iter | Active | Eval | Objective | Objective | BestSoFar | BestSoFar | Lambda |
| | workers | result | | runtime | (observed) | (estim.) | |
|================================================================================================|
| 21 | 6 | Best | 0.0723 | 221.5 | 0.0723 | 0.073161 | 4.212 |
| 22 | 6 | Accept | 0.0732 | 259.51 | 0.0723 | 0.073166 | 9.9916 |
| 23 | 6 | Best | 0.072 | 261.94 | 0.072 | 0.072848 | 9.9883 |
| 24 | 6 | Accept | 0.0778 | 122.56 | 0.072 | 0.072854 | 0.13413 |
| 25 | 6 | Accept | 0.0733 | 258.54 | 0.072 | 0.072946 | 9.9904 |
| 26 | 6 | Accept | 0.0746 | 244.53 | 0.072 | 0.073144 | 7.0911 |
| 27 | 6 | Accept | 0.0779 | 44.573 | 0.072 | 0.073134 | 2.1183e-08 |
| 28 | 6 | Accept | 0.078 | 45.478 | 0.072 | 0.073126 | 1.1663e-05 |
| 29 | 6 | Accept | 0.0779 | 43.954 | 0.072 | 0.073118 | 1.336e-07 |
| 30 | 6 | Accept | 0.0779 | 44.574 | 0.072 | 0.073112 | 1.7282e-09 |
__________________________________________________________
Optimization completed.
MaxObjectiveEvaluations of 30 reached.
Total function evaluations: 30
Total elapsed time: 690.8688 seconds.
Total objective function evaluation time: 3741.3176
Best observed feasible point:
Lambda
______
9.9883
Observed objective function value = 0.072
Estimated objective function value = 0.073112
Function evaluation time = 261.9357
Best estimated feasible point (according to models):
Lambda
______
9.9961
Estimated objective function value = 0.073112
Estimated function evaluation time = 257.9556
Losso =
0.0865


Классификатор на основе разреженной фильтрации имеет несколько более высокую потерю, чем классификатор на основе исходных данных. Однако классификатор использует только 100 функций, а не 784 функции в исходных данных, и намного быстрее, чтобы создать. Попытайтесь сделать лучший разреженный классификатор фильтрации путем увеличения q от 100 до 200, который все еще далеко меньше 784.
q = 200; Mdl2 = sparsefilt(Xtrain,q,'IterationLimit',10); NewX = transform(Mdl2,Xtrain); TestX = transform(Mdl2,Xtest); Cmdl = fitcecoc(NewX,LabelTrain,'Learners',t, ... 'OptimizeHyperparameters',{'Lambda'}, ... 'HyperparameterOptimizationOptions',options); Loss2 = loss(Cmdl,TestX,LabelTest)
Warning: Solver LBFGS was not able to converge to a solution.
Copying objective function to workers...
Done copying objective function to workers.
|================================================================================================|
| Iter | Active | Eval | Objective | Objective | BestSoFar | BestSoFar | Lambda |
| | workers | result | | runtime | (observed) | (estim.) | |
|================================================================================================|
| 1 | 5 | Best | 0.8865 | 7.3578 | 0.8865 | 0.8865 | 1.93 |
| 2 | 5 | Accept | 0.8865 | 7.3408 | 0.8865 | 0.8865 | 2.5549 |
| 3 | 6 | Best | 0.0693 | 9.0077 | 0.0693 | 0.069376 | 9.9515e-09 |
| 4 | 5 | Accept | 0.0705 | 9.1067 | 0.0693 | 0.069374 | 1.2123e-08 |
| 5 | 5 | Accept | 0.1489 | 9.5685 | 0.0693 | 0.069374 | 0.015542 |
| 6 | 6 | Accept | 0.8865 | 7.5032 | 0.0693 | 0.06943 | 4.7067 |
| 7 | 6 | Accept | 0.071 | 8.8044 | 0.0693 | 0.069591 | 5.0861e-09 |
| 8 | 6 | Accept | 0.0715 | 8.9517 | 0.0693 | 0.070048 | 1.001e-09 |
| 9 | 6 | Accept | 0.0833 | 14.393 | 0.0693 | 0.069861 | 0.0014191 |
| 10 | 6 | Best | 0.0594 | 25.565 | 0.0594 | 0.059458 | 6.767e-05 |
| 11 | 6 | Accept | 0.0651 | 20.074 | 0.0594 | 0.059463 | 8.078e-07 |
| 12 | 6 | Accept | 0.0695 | 14.495 | 0.0594 | 0.059473 | 1.0381e-07 |
| 13 | 6 | Accept | 0.1042 | 12.085 | 0.0594 | 0.059386 | 0.0039745 |
| 14 | 6 | Accept | 0.065 | 20.235 | 0.0594 | 0.059416 | 0.00031759 |
| 15 | 6 | Accept | 0.0705 | 10.929 | 0.0594 | 0.059416 | 3.6503e-08 |
| 16 | 6 | Accept | 0.0637 | 30.593 | 0.0594 | 0.059449 | 8.8718e-06 |
| 17 | 6 | Accept | 0.064 | 25.084 | 0.0594 | 0.059464 | 2.6286e-06 |
| 18 | 6 | Accept | 0.0605 | 31.964 | 0.0594 | 0.059387 | 2.459e-05 |
| 19 | 6 | Accept | 0.0606 | 23.149 | 0.0594 | 0.059312 | 0.0001464 |
| 20 | 6 | Accept | 0.0602 | 32.178 | 0.0594 | 0.059874 | 4.1437e-05 |
|================================================================================================|
| Iter | Active | Eval | Objective | Objective | BestSoFar | BestSoFar | Lambda |
| | workers | result | | runtime | (observed) | (estim.) | |
|================================================================================================|
| 21 | 6 | Accept | 0.0594 | 27.686 | 0.0594 | 0.059453 | 8.0717e-05 |
| 22 | 6 | Accept | 0.0612 | 33.427 | 0.0594 | 0.059476 | 1.6878e-05 |
| 23 | 6 | Accept | 0.0673 | 17.444 | 0.0594 | 0.059475 | 3.1788e-07 |
| 24 | 6 | Best | 0.0593 | 26.262 | 0.0593 | 0.05944 | 7.8179e-05 |
| 25 | 6 | Accept | 0.248 | 7.6345 | 0.0593 | 0.059409 | 0.095654 |
| 26 | 6 | Accept | 0.0598 | 28.536 | 0.0593 | 0.059465 | 5.0819e-05 |
| 27 | 6 | Accept | 0.0701 | 9.0545 | 0.0593 | 0.059466 | 1.8937e-09 |
| 28 | 5 | Accept | 0.7081 | 7.1176 | 0.0593 | 0.059372 | 0.30394 |
| 29 | 5 | Accept | 0.0676 | 11.782 | 0.0593 | 0.059372 | 6.1136e-08 |
| 30 | 3 | Accept | 0.06 | 23.556 | 0.0593 | 0.059422 | 0.00010144 |
| 31 | 3 | Accept | 0.0725 | 16.069 | 0.0593 | 0.059422 | 0.00069403 |
| 32 | 3 | Accept | 0.1928 | 8.3732 | 0.0593 | 0.059422 | 0.040402 |
__________________________________________________________
Optimization completed.
MaxObjectiveEvaluations of 30 reached.
Total function evaluations: 32
Total elapsed time: 97.7946 seconds.
Total objective function evaluation time: 545.3255
Best observed feasible point:
Lambda
__________
7.8179e-05
Observed objective function value = 0.0593
Estimated objective function value = 0.059422
Function evaluation time = 26.2624
Best estimated feasible point (according to models):
Lambda
__________
7.8179e-05
Estimated objective function value = 0.059422
Estimated function evaluation time = 26.508
Loss2 =
0.0682


На этот раз потеря классификации ниже, чем тот из исходного классификатора данных.
Попробуйте другую функцию извлечения признаков, rica. Извлеките 200 функций, создайте классификатор и исследуйте его потерю на тестовых данных. Используйте больше итераций для rica функция, потому что rica может выполнить лучше с большим количеством итераций, чем sparsefilt использование.
Часто до извлечения признаков, вы "предварительно белите" входные данные как шаг предварительной обработки данных. Шаг перед отбеливанием включает два, преобразовывает, декорреляция и стандартизация, которые заставляют предикторы иметь нулевое среднее значение и единичную ковариацию. rica поддержки только стандартизация преобразовывают. Вы используете Standardize аргумент пары "имя-значение", чтобы заставить предикторы иметь нулевое среднее значение и модульное отклонение. В качестве альтернативы можно преобразовать изображения для контрастной нормализации индивидуально путем применения zscore преобразование прежде, чем вызвать sparsefilt или rica.
Mdl3 = rica(Xtrain,q,'IterationLimit',400,'Standardize',true); NewX = transform(Mdl3,Xtrain); TestX = transform(Mdl3,Xtest); Cmdl = fitcecoc(NewX,LabelTrain,'Learners',t, ... 'OptimizeHyperparameters',{'Lambda'}, ... 'HyperparameterOptimizationOptions',options); Loss3 = loss(Cmdl,TestX,LabelTest)
Warning: Solver LBFGS was not able to converge to a solution.
Copying objective function to workers...
Done copying objective function to workers.
|================================================================================================|
| Iter | Active | Eval | Objective | Objective | BestSoFar | BestSoFar | Lambda |
| | workers | result | | runtime | (observed) | (estim.) | |
|================================================================================================|
| 1 | 6 | Best | 0.1179 | 12.012 | 0.1179 | 0.1179 | 8.4727 |
| 2 | 6 | Best | 0.082 | 13.384 | 0.082 | 0.083897 | 4.3291e-09 |
| 3 | 6 | Best | 0.0809 | 18.917 | 0.0809 | 0.080902 | 1.738e-05 |
| 4 | 6 | Accept | 0.0821 | 19.172 | 0.0809 | 0.08091 | 3.8101e-06 |
| 5 | 6 | Accept | 0.0921 | 14.445 | 0.0809 | 0.086349 | 2.3753 |
| 6 | 6 | Accept | 0.0809 | 13.393 | 0.0809 | 0.083836 | 1.3757e-08 |
| 7 | 6 | Best | 0.076 | 28.075 | 0.076 | 0.081808 | 0.00027773 |
| 8 | 6 | Best | 0.0758 | 29.686 | 0.0758 | 0.078829 | 0.00068195 |
| 9 | 6 | Accept | 0.0829 | 13.373 | 0.0758 | 0.078733 | 1.7543e-07 |
| 10 | 6 | Accept | 0.0826 | 14.031 | 0.0758 | 0.078512 | 1.0045e-09 |
| 11 | 6 | Accept | 0.0817 | 13.662 | 0.0758 | 0.078077 | 2.4568e-08 |
| 12 | 6 | Accept | 0.0799 | 19.311 | 0.0758 | 0.077658 | 1.4061e-05 |
| 13 | 6 | Best | 0.065 | 25.148 | 0.065 | 0.064974 | 0.060326 |
| 14 | 6 | Accept | 0.0787 | 23.434 | 0.065 | 0.064947 | 0.00012407 |
| 15 | 6 | Accept | 0.072 | 19.167 | 0.065 | 0.064997 | 0.43899 |
| 16 | 6 | Accept | 0.073 | 28.39 | 0.065 | 0.065053 | 0.0023721 |
| 17 | 6 | Accept | 0.0787 | 29.887 | 0.065 | 0.064928 | 0.00042914 |
| 18 | 6 | Accept | 0.0662 | 26.374 | 0.065 | 0.064295 | 0.0077638 |
| 19 | 6 | Accept | 0.0652 | 24.937 | 0.065 | 0.064502 | 0.087389 |
| 20 | 6 | Accept | 0.0655 | 25.416 | 0.065 | 0.064762 | 0.072931 |
|================================================================================================|
| Iter | Active | Eval | Objective | Objective | BestSoFar | BestSoFar | Lambda |
| | workers | result | | runtime | (observed) | (estim.) | |
|================================================================================================|
| 21 | 6 | Best | 0.0645 | 25.529 | 0.0645 | 0.064691 | 0.059245 |
| 22 | 6 | Accept | 0.065 | 23.832 | 0.0645 | 0.06474 | 0.025521 |
| 23 | 6 | Accept | 0.0819 | 20.343 | 0.0645 | 0.064732 | 7.2593e-07 |
| 24 | 6 | Accept | 0.0664 | 23.732 | 0.0645 | 0.064718 | 0.1534 |
| 25 | 6 | Accept | 0.0651 | 24.796 | 0.0645 | 0.064693 | 0.038371 |
| 26 | 6 | Accept | 0.0651 | 25.449 | 0.0645 | 0.064613 | 0.014318 |
| 27 | 6 | Accept | 0.0652 | 25.092 | 0.0645 | 0.064713 | 0.037107 |
| 28 | 6 | Accept | 0.0645 | 24.404 | 0.0645 | 0.0647 | 0.042959 |
| 29 | 6 | Accept | 0.0649 | 24.704 | 0.0645 | 0.064729 | 0.042776 |
| 30 | 6 | Accept | 0.0652 | 24.341 | 0.0645 | 0.064786 | 0.035788 |
__________________________________________________________
Optimization completed.
MaxObjectiveEvaluations of 30 reached.
Total function evaluations: 30
Total elapsed time: 124.9755 seconds.
Total objective function evaluation time: 654.4364
Best observed feasible point:
Lambda
________
0.059245
Observed objective function value = 0.0645
Estimated objective function value = 0.064932
Function evaluation time = 25.5294
Best estimated feasible point (according to models):
Lambda
________
0.042776
Estimated objective function value = 0.064786
Estimated function evaluation time = 24.7849
Loss3 =
0.0749


rica- основанный классификатор имеет несколько более высокую тестовую потерю по сравнению с разреженным классификатором фильтрации.
Функции извлечения признаков имеют немного настраивающихся параметров. Один параметр, который может влиять на результаты, является количеством требуемых функций. Смотрите, как хорошо классификаторы работают когда на основе 1 000 функций, а не 200 функций, которые ранее попробовали или 784 функций в исходных данных. Использование большего количества функций, чем появляется в исходных данных, называется "сверхполным" изучением. С другой стороны использование меньшего количества функций называется изучением "undercomplete". Сверхполное изучение может привести к увеличенной точности классификации, в то время как изучение undercomplete может сохранить память и время.
q = 1000; Mdl4 = sparsefilt(Xtrain,q,'IterationLimit',10); NewX = transform(Mdl4,Xtrain); TestX = transform(Mdl4,Xtest); Cmdl = fitcecoc(NewX,LabelTrain,'Learners',t, ... 'OptimizeHyperparameters',{'Lambda'}, ... 'HyperparameterOptimizationOptions',options); Loss4 = loss(Cmdl,TestX,LabelTest)
Warning: Solver LBFGS was not able to converge to a solution.
Copying objective function to workers...
Done copying objective function to workers.
|================================================================================================|
| Iter | Active | Eval | Objective | Objective | BestSoFar | BestSoFar | Lambda |
| | workers | result | | runtime | (observed) | (estim.) | |
|================================================================================================|
| 1 | 6 | Best | 0.5293 | 39.885 | 0.5293 | 0.5293 | 0.20333 |
| 2 | 6 | Accept | 0.8022 | 43.475 | 0.5293 | 0.66575 | 0.77337 |
| 3 | 6 | Best | 0.0406 | 52.594 | 0.0406 | 0.11113 | 9.1082e-09 |
| 4 | 6 | Best | 0.0403 | 54.73 | 0.0403 | 0.060037 | 2.3947e-09 |
| 5 | 6 | Accept | 0.0695 | 124.96 | 0.0403 | 0.040319 | 0.001361 |
| 6 | 6 | Accept | 0.0406 | 53.691 | 0.0403 | 0.040207 | 1.0005e-09 |
| 7 | 6 | Best | 0.0388 | 178.69 | 0.0388 | 0.038811 | 1.4358e-06 |
| 8 | 6 | Accept | 0.0615 | 138.53 | 0.0388 | 0.038817 | 0.00088731 |
| 9 | 6 | Best | 0.0385 | 61.81 | 0.0385 | 0.038557 | 7.4709e-08 |
| 10 | 6 | Accept | 0.0399 | 54.198 | 0.0385 | 0.038555 | 2.1909e-08 |
| 11 | 6 | Accept | 0.0402 | 234.55 | 0.0385 | 0.038639 | 0.000101 |
| 12 | 6 | Accept | 0.0431 | 198.09 | 0.0385 | 0.038636 | 0.00018896 |
| 13 | 6 | Accept | 0.0393 | 75.811 | 0.0385 | 0.039016 | 1.1597e-07 |
| 14 | 6 | Accept | 0.0387 | 61.281 | 0.0385 | 0.038908 | 7.0518e-08 |
| 15 | 6 | Accept | 0.0393 | 125.73 | 0.0385 | 0.038931 | 2.8429e-07 |
| 16 | 6 | Accept | 0.0397 | 89.804 | 0.0385 | 0.039106 | 1.4603e-07 |
| 17 | 6 | Accept | 0.0391 | 126.88 | 0.0385 | 0.039081 | 3.0065e-07 |
| 18 | 6 | Accept | 0.0398 | 56.157 | 0.0385 | 0.039123 | 4.1563e-08 |
| 19 | 6 | Accept | 0.0406 | 55.25 | 0.0385 | 0.039122 | 1.0014e-09 |
| 20 | 6 | Accept | 0.0385 | 272.92 | 0.0385 | 0.039127 | 9.568e-06 |
|================================================================================================|
| Iter | Active | Eval | Objective | Objective | BestSoFar | BestSoFar | Lambda |
| | workers | result | | runtime | (observed) | (estim.) | |
|================================================================================================|
| 21 | 6 | Accept | 0.0412 | 55.191 | 0.0385 | 0.039124 | 3.3737e-09 |
| 22 | 6 | Accept | 0.0394 | 229.72 | 0.0385 | 0.039117 | 3.2757e-06 |
| 23 | 6 | Best | 0.0379 | 295.55 | 0.0379 | 0.039116 | 2.8439e-05 |
| 24 | 6 | Accept | 0.0394 | 168.74 | 0.0379 | 0.039111 | 9.778e-07 |
| 25 | 6 | Accept | 0.039 | 281.91 | 0.0379 | 0.039112 | 8.0694e-06 |
| 26 | 6 | Accept | 0.8865 | 54.865 | 0.0379 | 0.038932 | 9.9885 |
| 27 | 6 | Accept | 0.0381 | 300.7 | 0.0379 | 0.037996 | 2.6027e-05 |
| 28 | 6 | Accept | 0.0406 | 54.611 | 0.0379 | 0.037996 | 1.6057e-09 |
| 29 | 6 | Accept | 0.1272 | 76.648 | 0.0379 | 0.037997 | 0.012507 |
| 30 | 6 | Accept | 0.0403 | 57.931 | 0.0379 | 0.037997 | 4.9907e-08 |
__________________________________________________________
Optimization completed.
MaxObjectiveEvaluations of 30 reached.
Total function evaluations: 30
Total elapsed time: 724.6036 seconds.
Total objective function evaluation time: 3674.8899
Best observed feasible point:
Lambda
__________
2.8439e-05
Observed objective function value = 0.0379
Estimated objective function value = 0.03801
Function evaluation time = 295.5515
Best estimated feasible point (according to models):
Lambda
__________
2.6027e-05
Estimated objective function value = 0.037997
Estimated function evaluation time = 297.6756
Loss4 =
0.0440


Классификатор на основе сверхполной разреженной фильтрации с 1 000 извлеченных функций имеет самую низкую тестовую потерю любого классификатора, все же протестированного.
Mdl5 = rica(Xtrain,q,'IterationLimit',400,'Standardize',true); NewX = transform(Mdl5,Xtrain); TestX = transform(Mdl5,Xtest); Cmdl = fitcecoc(NewX,LabelTrain,'Learners',t, ... 'OptimizeHyperparameters',{'Lambda'}, ... 'HyperparameterOptimizationOptions',options); Loss5 = loss(Cmdl,TestX,LabelTest)
Warning: Solver LBFGS was not able to converge to a solution.
Copying objective function to workers...
Done copying objective function to workers.
|================================================================================================|
| Iter | Active | Eval | Objective | Objective | BestSoFar | BestSoFar | Lambda |
| | workers | result | | runtime | (observed) | (estim.) | |
|================================================================================================|
| 1 | 6 | Best | 0.0764 | 46.206 | 0.0764 | 0.0764 | 8.4258e-09 |
| 2 | 6 | Accept | 0.077 | 141.95 | 0.0764 | 0.0767 | 6.9536e-06 |
| 3 | 6 | Accept | 0.0771 | 146.87 | 0.0764 | 0.076414 | 7.3378e-06 |
| 4 | 6 | Best | 0.0709 | 182.51 | 0.0709 | 0.0709 | 0.48851 |
| 5 | 6 | Accept | 0.0764 | 46.923 | 0.0709 | 0.070903 | 5.0695e-09 |
| 6 | 6 | Best | 0.068 | 294.89 | 0.068 | 0.068004 | 0.0029652 |
| 7 | 6 | Accept | 0.125 | 99.095 | 0.068 | 0.068001 | 9.9814 |
| 8 | 6 | Accept | 0.0693 | 321.66 | 0.068 | 0.067999 | 0.0015167 |
| 9 | 6 | Accept | 0.0882 | 138.03 | 0.068 | 0.068 | 1.8203 |
| 10 | 6 | Accept | 0.0753 | 285.07 | 0.068 | 0.067991 | 0.00042423 |
| 11 | 6 | Accept | 0.0764 | 47.704 | 0.068 | 0.067984 | 1.6326e-07 |
| 12 | 6 | Accept | 0.0763 | 46.514 | 0.068 | 0.06798 | 1.0048e-09 |
| 13 | 6 | Best | 0.0643 | 252.2 | 0.0643 | 0.0643 | 0.095965 |
| 14 | 6 | Accept | 0.0766 | 168.37 | 0.0643 | 0.0643 | 9.1336e-07 |
| 15 | 6 | Accept | 0.0753 | 153.29 | 0.0643 | 0.064301 | 4.8641e-05 |
| 16 | 6 | Accept | 0.0662 | 256.65 | 0.0643 | 0.064298 | 0.0093576 |
| 17 | 6 | Best | 0.0632 | 224.2 | 0.0632 | 0.063226 | 0.031314 |
| 18 | 6 | Accept | 0.0673 | 219.59 | 0.0632 | 0.063201 | 0.20528 |
| 19 | 6 | Accept | 0.0637 | 244.17 | 0.0632 | 0.063208 | 0.075001 |
| 20 | 6 | Accept | 0.064 | 234.85 | 0.0632 | 0.06321 | 0.081232 |
|================================================================================================|
| Iter | Active | Eval | Objective | Objective | BestSoFar | BestSoFar | Lambda |
| | workers | result | | runtime | (observed) | (estim.) | |
|================================================================================================|
| 21 | 6 | Accept | 0.0646 | 242.2 | 0.0632 | 0.063315 | 0.078081 |
| 22 | 6 | Accept | 0.0633 | 217.97 | 0.0632 | 0.063233 | 0.039495 |
| 23 | 6 | Accept | 0.0643 | 224.22 | 0.0632 | 0.063496 | 0.052107 |
| 24 | 6 | Accept | 0.0761 | 45.102 | 0.0632 | 0.063509 | 4.3946e-08 |
| 25 | 6 | Accept | 0.0645 | 221.24 | 0.0632 | 0.063778 | 0.044455 |
| 26 | 6 | Accept | 0.0763 | 44.572 | 0.0632 | 0.063778 | 1.9139e-09 |
| 27 | 6 | Accept | 0.0639 | 216.9 | 0.0632 | 0.063791 | 0.041759 |
| 28 | 6 | Accept | 0.0766 | 45.609 | 0.0632 | 0.06379 | 2.0642e-08 |
| 29 | 6 | Accept | 0.0765 | 121.35 | 0.0632 | 0.063789 | 3.5882e-07 |
| 30 | 6 | Accept | 0.0636 | 215.47 | 0.0632 | 0.063755 | 0.038062 |
__________________________________________________________
Optimization completed.
MaxObjectiveEvaluations of 30 reached.
Total function evaluations: 30
Total elapsed time: 952.7987 seconds.
Total objective function evaluation time: 5145.3787
Best observed feasible point:
Lambda
________
0.031314
Observed objective function value = 0.0632
Estimated objective function value = 0.063828
Function evaluation time = 224.2018
Best estimated feasible point (according to models):
Lambda
________
0.044455
Estimated objective function value = 0.063755
Estimated function evaluation time = 219.4845
Loss5 =
0.0748


Классификатор на основе RICA с 1 000 извлеченных функций имеет подобную тестовую потерю для классификатора RICA на основе 200 извлеченных функций.
bayesoptФункции извлечения признаков имеют эти настраивающие параметры:
Предел итерации
Функция, любой rica или sparsefilt
Параметр Lambda
Количество изученных функций q
fitcecoc параметр регуляризации также влияет на точность изученного классификатора. Включайте тот параметр в список гиперпараметров также.
Чтобы искать среди доступных параметров эффективно, попробуйте bayesopt. Используйте следующую целевую функцию, которая включает параметры, переданные из рабочей области.
function objective = filterica(x,Xtrain,Xtest,LabelTrain,LabelTest,winit) initW = winit(1:size(Xtrain,2),1:x.q); if char(x.solver) == 'r' Mdl = rica(Xtrain,x.q,'Lambda',x.lambda,'IterationLimit',x.iterlim, ... 'InitialTransformWeights',initW,'Standardize',true); else Mdl = sparsefilt(Xtrain,x.q,'Lambda',x.lambda,'IterationLimit',x.iterlim, ... 'InitialTransformWeights',initW); end NewX = transform(Mdl,Xtrain); TestX = transform(Mdl,Xtest); t = templateLinear('Lambda',x.lambdareg,'Solver','lbfgs'); Cmdl = fitcecoc(NewX,LabelTrain,'Learners',t); objective = loss(Cmdl,TestX,LabelTest);
Чтобы удалить источники изменения, зафиксируйте начальную матрицу веса преобразования.
W = randn(1e4,1e3);
Создайте гиперпараметры для целевой функции.
iterlim = optimizableVariable('iterlim',[5,500],'Type','integer'); lambda = optimizableVariable('lambda',[0,10]); solver = optimizableVariable('solver',{'r','s'},'Type','categorical'); qvar = optimizableVariable('q',[10,1000],'Type','integer'); lambdareg = optimizableVariable('lambdareg',[1e-6,1],'Transform','log'); vars = [iterlim,lambda,solver,qvar,lambdareg];
Запустите оптимизацию без предупреждений, которые происходят, когда внутренняя оптимизация не выполнение до завершения. Запуститесь для 60 итераций вместо значения по умолчанию 30, чтобы дать оптимизации лучший шанс определения местоположения хорошего значения.
warning('off','stats:classreg:learning:fsutils:Solver:LBFGSUnableToConverge'); results = bayesopt(@(x) filterica(x,Xtrain,Xtest,LabelTrain,LabelTest,W),vars, ... 'UseParallel',true,'MaxObjectiveEvaluations',60); warning('on','stats:classreg:learning:fsutils:Solver:LBFGSUnableToConverge');
Copying objective function to workers...
Done copying objective function to workers.
|============================================================================================================================================================|
| Iter | Active | Eval | Objective | Objective | BestSoFar | BestSoFar | iterlim | lambda | solver | q | lambdareg |
| | workers | result | | runtime | (observed) | (estim.) | | | | | |
|============================================================================================================================================================|
| 1 | 6 | Best | 0.16408 | 33.743 | 0.16408 | 0.16408 | 140 | 9.4661 | s | 98 | 0.0007106 |
| 2 | 6 | Best | 0.079213 | 51.975 | 0.079213 | 0.09064 | 10 | 9.466 | r | 685 | 0.010462 |
| 3 | 6 | Best | 0.074897 | 82.031 | 0.074897 | 0.074983 | 32 | 3.7554 | r | 689 | 0.13737 |
| 4 | 6 | Accept | 0.07546 | 93.221 | 0.074897 | 0.075073 | 178 | 3.9741 | r | 196 | 0.1829 |
| 5 | 6 | Accept | 0.13924 | 30.444 | 0.074897 | 0.074933 | 282 | 0.36123 | r | 33 | 0.99029 |
| 6 | 6 | Accept | 0.083964 | 133 | 0.074897 | 0.074933 | 58 | 9.7653 | r | 685 | 0.0014623 |
| 7 | 6 | Accept | 0.08128 | 33.609 | 0.074897 | 0.074957 | 8 | 5.6351 | r | 519 | 0.0065822 |
| 8 | 6 | Accept | 0.090751 | 203.96 | 0.074897 | 0.074913 | 131 | 0.73308 | r | 577 | 2.1172e-05 |
| 9 | 6 | Accept | 0.090001 | 172.38 | 0.074897 | 0.074904 | 146 | 8.1899 | r | 454 | 1.4417e-05 |
| 10 | 6 | Accept | 0.080191 | 316.8 | 0.074897 | 0.074897 | 164 | 0.48783 | r | 727 | 0.004936 |
| 11 | 6 | Best | 0.060472 | 40.777 | 0.060472 | 0.060731 | 5 | 2.3201 | s | 530 | 1.1957e-06 |
| 12 | 6 | Accept | 0.079027 | 45.841 | 0.060472 | 0.060632 | 8 | 0.55541 | r | 696 | 0.030914 |
| 13 | 6 | Accept | 0.074823 | 237.43 | 0.060472 | 0.06067 | 109 | 4.5352 | r | 781 | 0.12274 |
| 14 | 6 | Accept | 0.84009 | 85.121 | 0.060472 | 0.060468 | 306 | 0.59533 | s | 148 | 0.89675 |
| 15 | 6 | Accept | 0.15637 | 200.13 | 0.060472 | 0.060451 | 90 | 3.0192 | s | 999 | 0.0043768 |
| 16 | 6 | Accept | 0.69006 | 14.273 | 0.060472 | 0.06047 | 6 | 9.4568 | s | 407 | 0.13833 |
| 17 | 6 | Accept | 0.093035 | 205.83 | 0.060472 | 0.060469 | 263 | 2.3083 | r | 308 | 1.0016e-06 |
| 18 | 6 | Accept | 0.18753 | 6.0238 | 0.060472 | 0.060527 | 36 | 9.806 | s | 24 | 8.3653e-06 |
| 19 | 6 | Accept | 0.119 | 749.98 | 0.060472 | 0.060751 | 482 | 0.51927 | s | 818 | 1.5416e-06 |
| 20 | 6 | Accept | 0.076414 | 751.21 | 0.060472 | 0.060754 | 387 | 9.9936 | r | 784 | 0.26786 |
|============================================================================================================================================================|
| Iter | Active | Eval | Objective | Objective | BestSoFar | BestSoFar | iterlim | lambda | solver | q | lambdareg |
| | workers | result | | runtime | (observed) | (estim.) | | | | | |
|============================================================================================================================================================|
| 21 | 6 | Accept | 0.099332 | 7.2298 | 0.060472 | 0.060828 | 20 | 0.78894 | s | 49 | 1.0335e-06 |
| 22 | 6 | Accept | 0.090139 | 7.9815 | 0.060472 | 0.060858 | 11 | 3.2973 | r | 88 | 2.7437e-06 |
| 23 | 6 | Accept | 0.076696 | 323.64 | 0.060472 | 0.060872 | 120 | 1.9199 | r | 999 | 0.2537 |
| 24 | 6 | Accept | 0.098003 | 50.544 | 0.060472 | 0.060876 | 492 | 1.7197 | r | 27 | 0.00020896 |
| 25 | 6 | Accept | 0.10383 | 56.568 | 0.060472 | 0.06101 | 11 | 5.256 | s | 971 | 0.00054471 |
| 26 | 6 | Accept | 0.14405 | 30.426 | 0.060472 | 0.060797 | 477 | 5.5475 | r | 12 | 0.022342 |
| 27 | 6 | Accept | 0.09046 | 53.398 | 0.060472 | 0.060815 | 13 | 2.1216 | r | 986 | 1.1811e-06 |
| 28 | 6 | Best | 0.051641 | 99.452 | 0.051641 | 0.051368 | 23 | 2.6976 | s | 985 | 1.0558e-06 |
| 29 | 6 | Accept | 0.10016 | 6.4162 | 0.051641 | 0.051365 | 6 | 3.7223 | r | 69 | 9.2926e-05 |
| 30 | 6 | Accept | 0.10943 | 40.676 | 0.051641 | 0.051391 | 488 | 5.2092 | r | 19 | 2.4162e-05 |
| 31 | 6 | Accept | 0.086761 | 7.8419 | 0.051641 | 0.051393 | 24 | 6.5535 | r | 42 | 0.0013244 |
| 32 | 6 | Best | 0.0504 | 96.816 | 0.0504 | 0.050526 | 14 | 9.929 | s | 1000 | 2.8809e-06 |
| 33 | 6 | Accept | 0.088789 | 81.158 | 0.0504 | 0.050525 | 14 | 1.0441 | r | 927 | 0.00021061 |
| 34 | 6 | Accept | 0.083083 | 887.17 | 0.0504 | 0.05052 | 351 | 6.8834 | r | 978 | 0.0026404 |
| 35 | 6 | Best | 0.050023 | 99.493 | 0.050023 | 0.050372 | 19 | 9.9813 | s | 899 | 1.0257e-06 |
| 36 | 6 | Accept | 0.053338 | 113.36 | 0.050023 | 0.050499 | 7 | 4.7855 | s | 984 | 1.8611e-06 |
| 37 | 6 | Accept | 0.089024 | 70.047 | 0.050023 | 0.0505 | 15 | 8.8301 | r | 984 | 6.0636e-06 |
| 38 | 6 | Accept | 0.052029 | 95.822 | 0.050023 | 0.050551 | 7 | 9.759 | s | 996 | 3.7871e-06 |
| 39 | 6 | Accept | 0.085992 | 73.422 | 0.050023 | 0.050528 | 5 | 2.7837 | r | 968 | 0.004483 |
| 40 | 6 | Accept | 0.091159 | 5.8348 | 0.050023 | 0.05052 | 15 | 8.7732 | r | 37 | 0.084632 |
|============================================================================================================================================================|
| Iter | Active | Eval | Objective | Objective | BestSoFar | BestSoFar | iterlim | lambda | solver | q | lambdareg |
| | workers | result | | runtime | (observed) | (estim.) | | | | | |
|============================================================================================================================================================|
| 41 | 6 | Best | 0.046444 | 152.93 | 0.046444 | 0.047062 | 30 | 4.0843 | s | 997 | 7.279e-06 |
| 42 | 6 | Accept | 0.052712 | 58.107 | 0.046444 | 0.04698 | 12 | 0.99592 | s | 652 | 1.0258e-06 |
| 43 | 6 | Accept | 0.058005 | 91.928 | 0.046444 | 0.047263 | 10 | 5.511 | s | 1000 | 2.4589e-05 |
| 44 | 6 | Accept | 0.055413 | 103.25 | 0.046444 | 0.047306 | 7 | 5.6791 | s | 953 | 1.4656e-06 |
| 45 | 6 | Accept | 0.052517 | 96.201 | 0.046444 | 0.049604 | 10 | 5.9403 | s | 996 | 1.0525e-05 |
| 46 | 6 | Accept | 0.089527 | 76.617 | 0.046444 | 0.046888 | 20 | 1.0744 | r | 965 | 0.96766 |
| 47 | 6 | Accept | 0.050062 | 99.709 | 0.046444 | 0.046735 | 12 | 9.9236 | s | 975 | 4.5916e-06 |
| 48 | 6 | Accept | 0.21166 | 90.117 | 0.046444 | 0.049716 | 495 | 1.1996 | s | 86 | 0.00022338 |
| 49 | 6 | Accept | 0.054535 | 79.1 | 0.046444 | 0.046679 | 6 | 0.22929 | s | 967 | 7.6974e-06 |
| 50 | 6 | Accept | 0.12385 | 964.74 | 0.046444 | 0.049963 | 474 | 4.7085 | s | 991 | 8.6984e-05 |
| 51 | 6 | Accept | 0.052016 | 76.098 | 0.046444 | 0.049914 | 10 | 1.0798 | s | 922 | 1.133e-06 |
| 52 | 6 | Accept | 0.048984 | 95.054 | 0.046444 | 0.049891 | 12 | 4.69 | s | 976 | 1.0189e-06 |
| 53 | 6 | Accept | 0.1948 | 889.11 | 0.046444 | 0.047903 | 466 | 7.9582 | s | 986 | 0.0012319 |
| 54 | 6 | Accept | 0.10652 | 5.076 | 0.046444 | 0.047961 | 10 | 5.9107 | r | 40 | 0.52677 |
| 55 | 6 | Accept | 0.074194 | 319.41 | 0.046444 | 0.04981 | 130 | 2.6437 | s | 997 | 7.8756e-06 |
| 56 | 6 | Accept | 0.1014 | 45.184 | 0.046444 | 0.049828 | 480 | 6.1835 | r | 24 | 2.0019e-06 |
| 57 | 6 | Accept | 0.33214 | 3.1996 | 0.046444 | 0.049785 | 12 | 7.4538 | s | 13 | 0.016248 |
| 58 | 6 | Accept | 0.054348 | 96.616 | 0.046444 | 0.050832 | 12 | 2.8605 | s | 987 | 4.7951e-06 |
| 59 | 6 | Accept | 0.71471 | 3.0555 | 0.046444 | 0.050852 | 10 | 9.8909 | s | 24 | 0.21362 |
| 60 | 6 | Accept | 0.074353 | 67.118 | 0.046444 | 0.05084 | 8 | 5.5275 | s | 986 | 8.9716e-05 |
__________________________________________________________
Optimization completed.
MaxObjectiveEvaluations of 60 reached.
Total function evaluations: 60
Total elapsed time: 1921.1117 seconds.
Total objective function evaluation time: 9107.7006
Best observed feasible point:
iterlim lambda solver q lambdareg
_______ ______ ______ ___ _________
30 4.0843 s 997 7.279e-06
Observed objective function value = 0.046444
Estimated objective function value = 0.053743
Function evaluation time = 152.932
Best estimated feasible point (according to models):
iterlim lambda solver q lambdareg
_______ ______ ______ ___ _________
10 1.0798 s 922 1.133e-06
Estimated objective function value = 0.05084
Estimated function evaluation time = 90.9315

Получившийся классификатор не имеет, лучше (понижают) потерю, чем классификатор с помощью sparsefilt для 1 000 функций, обученных 10 итерациям.
Просмотрите коэффициенты фильтра для лучших гиперпараметров что bayesopt найденный. Получившиеся изображения показывают формы извлеченных функций. Эти формы являются распознаваемыми как фрагменты рукописных цифр.
Xtbl = results.XAtMinObjective; Q = Xtbl.q; initW = W(1:size(Xtrain,2),1:Q); if char(Xtbl.solver) == 'r' Mdl = rica(Xtrain,Q,'Lambda',Xtbl.lambda,'IterationLimit',Xtbl.iterlim, ... 'InitialTransformWeights',initW,'Standardize',true); else Mdl = sparsefilt(Xtrain,Q,'Lambda',Xtbl.lambda,'IterationLimit',Xtbl.iterlim, ... 'InitialTransformWeights',initW); end Wts = Mdl.TransformWeights; Wts = reshape(Wts,[28,28,Q]); [dx,dy,~,~] = size(Wts); for f = 1:Q Wvec = Wts(:,:,f); Wvec = Wvec(:); Wvec =(Wvec - min(Wvec))/(max(Wvec) - min(Wvec)); Wts(:,:,f) = reshape(Wvec,dx,dy); end m = ceil(sqrt(Q)); n = m; img = zeros(m*dx,n*dy); f = 1; for i = 1:m for j = 1:n if (f <= Q) img((i-1)*dx+1:i*dx,(j-1)*dy+1:j*dy,:) = Wts(:,:,f); f = f+1; end end end imshow(img);
Warning: Solver LBFGS was not able to converge to a solution.

Код функции, которая считывает данные в рабочую область:
function [X,L] = processMNISTdata(imageFileName,labelFileName) [fileID,errmsg] = fopen(imageFileName,'r','b'); if fileID < 0 error(errmsg); end %% % First read the magic number. This number is 2051 for image data, and % 2049 for label data magicNum = fread(fileID,1,'int32',0,'b'); if magicNum == 2051 fprintf('\nRead MNIST image data...\n') end %% % Then read the number of images, number of rows, and number of columns numImages = fread(fileID,1,'int32',0,'b'); fprintf('Number of images in the dataset: %6d ...\n',numImages); numRows = fread(fileID,1,'int32',0,'b'); numCols = fread(fileID,1,'int32',0,'b'); fprintf('Each image is of %2d by %2d pixels...\n',numRows,numCols); %% % Read the image data X = fread(fileID,inf,'unsigned char'); %% % Reshape the data to array X X = reshape(X,numCols,numRows,numImages); X = permute(X,[2 1 3]); %% % Then flatten each image data into a 1 by (numRows*numCols) vector, and % store all the image data into a numImages by (numRows*numCols) array. X = reshape(X,numRows*numCols,numImages)'; fprintf(['The image data is read to a matrix of dimensions: %6d by %4d...\n',... 'End of reading image data.\n'],size(X,1),size(X,2)); %% % Close the file fclose(fileID); %% % Similarly, read the label data. [fileID,errmsg] = fopen(labelFileName,'r','b'); if fileID < 0 error(errmsg); end magicNum = fread(fileID,1,'int32',0,'b'); if magicNum == 2049 fprintf('\nRead MNIST label data...\n') end numItems = fread(fileID,1,'int32',0,'b'); fprintf('Number of labels in the dataset: %6d ...\n',numItems); L = fread(fileID,inf,'unsigned char'); fprintf(['The label data is read to a matrix of dimensions: %6d by %2d...\n',... 'End of reading label data.\n'],size(L,1),size(L,2)); fclose(fileID);
[1] Yann LeCun (Бегущий Институт, NYU) и Коринна Кортес (Google Labs, Нью-Йорк) обладает авторским правом набора данных MNIST, который является производной работой от исходных наборов данных NIST. Набор данных MNIST сделан доступным в соответствии с Долей Приписывания Creative Commons Одинаково 3,0 лицензии, https://creativecommons.org/licenses/by-sa/3.0/
rica | sparsefilt | ReconstructionICA | SparseFiltering