Класс: FeatureSelectionNCAClassification
Предскажите ответы с помощью классификатора анализа компонента окружения (NCA)
[labels,postprobs,classnames]
= predict(mdl,X)
[
вычисляет предсказанные метки, labels
,postprobs
,classnames
]
= predict(mdl
,X
)labels
, соответствие строкам X
, использование модели mdl
.
mdl
— Аналитическая модель компонента окружения для классификацииFeatureSelectionNCAClassification
объектАналитическая модель компонента окружения для классификации в виде FeatureSelectionNCAClassification
объект.
X
— Значения переменного предиктораЗначения переменного предиктора в виде n-by-p матрица, где n является количеством наблюдений и p, являются количеством переменных предикторов.
Типы данных: single
| double
labels
— Предсказанные метки классаПредсказанные метки класса, соответствующие строкам X
, возвращенный как категориальный, логический, или числовой вектор, массив ячеек из символьных векторов длины n или символьный массив со строками n. n является количеством наблюдений. Тип labels
совпадает с Y
используемый в обучении.
postprobs
— Апостериорные вероятностиАпостериорные вероятности, возвращенные как n-by-c матрица, где n является количеством наблюдений и c, являются количеством классов. Апостериорная вероятность, postprobs(i,:)
, представляет членство наблюдения в X(i,:)
в классах 1 через c.
classnames
— Имена классовИмена классов, соответствующие апостериорным вероятностям, возвращенным как массив ячеек из символьных векторов. Каждый вектор символов является именем класса, соответствующим столбцу postprobs
.
Загрузите выборочные данные.
load('twodimclassdata.mat');
Этот набор данных симулирован с помощью схемы, описанной в [1]. Это - проблема классификации 2D классов в двух измерениях. Данные из первого класса (класс-1) чертятся от двух двумерных нормальных распределений или с равной вероятностью, где, и. Точно так же данные из второго класса (класс 1) чертятся от двух двумерных нормальных распределений или с равной вероятностью, где, и. Параметры нормального распределения раньше создавали этот результат набора данных в более высоких кластерах в данных, чем данные, используемые в [1].
Создайте график рассеивания данных, сгруппированных классом.
figure gscatter(X(:,1),X(:,2),y) xlabel('x1') ylabel('x2')
Добавьте 100 несоответствующих опций к. Сначала сгенерируйте данные из Нормального распределения со средним значением 0 и отклонением 20.
n = size(X,1);
rng('default')
XwithBadFeatures = [X,randn(n,100)*sqrt(20)];
Нормируйте данные так, чтобы все точки были между 0 и 1.
XwithBadFeatures = bsxfun(@rdivide,... bsxfun(@minus,XwithBadFeatures,min(XwithBadFeatures,[],1)), ... range(XwithBadFeatures,1)); X = XwithBadFeatures;
Подбирайте модель анализа компонента окружения (NCA) к данным с помощью Lambda
по умолчанию (параметр регуляризации) значение. Используйте решатель LBFGS и отобразите информацию о сходимости.
ncaMdl = fscnca(X,y,'FitMethod','exact','Verbose',1, ... 'Solver','lbfgs');
o Solver = LBFGS, HessianHistorySize = 15, LineSearchMethod = weakwolfe |====================================================================================================| | ITER | FUN VALUE | NORM GRAD | NORM STEP | CURV | GAMMA | ALPHA | ACCEPT | |====================================================================================================| | 0 | 9.519258e-03 | 1.494e-02 | 0.000e+00 | | 4.015e+01 | 0.000e+00 | YES | | 1 | -3.093574e-01 | 7.186e-03 | 4.018e+00 | OK | 8.956e+01 | 1.000e+00 | YES | | 2 | -4.809455e-01 | 4.444e-03 | 7.123e+00 | OK | 9.943e+01 | 1.000e+00 | YES | | 3 | -4.938877e-01 | 3.544e-03 | 1.464e+00 | OK | 9.366e+01 | 1.000e+00 | YES | | 4 | -4.964759e-01 | 2.901e-03 | 6.084e-01 | OK | 1.554e+02 | 1.000e+00 | YES | | 5 | -4.972077e-01 | 1.323e-03 | 6.129e-01 | OK | 1.195e+02 | 5.000e-01 | YES | | 6 | -4.974743e-01 | 1.569e-04 | 2.155e-01 | OK | 1.003e+02 | 1.000e+00 | YES | | 7 | -4.974868e-01 | 3.844e-05 | 4.161e-02 | OK | 9.835e+01 | 1.000e+00 | YES | | 8 | -4.974874e-01 | 1.417e-05 | 1.073e-02 | OK | 1.043e+02 | 1.000e+00 | YES | | 9 | -4.974874e-01 | 4.893e-06 | 1.781e-03 | OK | 1.530e+02 | 1.000e+00 | YES | | 10 | -4.974874e-01 | 9.404e-08 | 8.947e-04 | OK | 1.670e+02 | 1.000e+00 | YES | Infinity norm of the final gradient = 9.404e-08 Two norm of the final step = 8.947e-04, TolX = 1.000e-06 Relative infinity norm of the final gradient = 9.404e-08, TolFun = 1.000e-06 EXIT: Local minimum found.
Постройте веса функции. Веса несоответствующих функций должны быть очень близко к нулю.
figure semilogx(ncaMdl.FeatureWeights,'ro') xlabel('Feature index') ylabel('Feature weight') grid on
Предскажите классы с помощью модели NCA и вычислите матрицу беспорядка.
ypred = predict(ncaMdl,X); confusionchart(y,ypred)
Матрица беспорядка показывает, что 40 из данных, которые находятся в классе-1, предсказаны, как принадлежащий классу-1. 60 данных из класса-1 предсказаны, чтобы быть в классе 1. Точно так же 94 из данных из класса 1 предсказаны, чтобы быть от класса 1 и 6 их, предсказаны, чтобы быть от класса-1. Точность предсказания для класса-1 не хороша.
Все веса очень близко к нулю, который указывает, что значение используемых в обучении модель является слишком большим. Когда, все веса функций приближаются к нулю. Следовательно, важно настроить параметр регуляризации в большинстве случаев, чтобы обнаружить соответствующие функции.
Используйте пятикратную перекрестную проверку, чтобы настроиться для выбора признаков при помощи fscnca
. Настройка означает находить значение, которое произведет минимальную потерю классификации. Настроить перекрестную проверку использования:
1. Разделите данные в пять сгибов. Для каждого сгиба, cvpartition
присвоения четыре пятых данных как набор обучающих данных и одна пятая данных как набор тестов. Снова для каждого сгиба, cvpartition
создает стратифицированный раздел, где каждый раздел имеет примерно ту же пропорцию классов.
cvp = cvpartition(y,'kfold',5);
numtestsets = cvp.NumTestSets;
lambdavalues = linspace(0,2,20)/length(y);
lossvalues = zeros(length(lambdavalues),numtestsets);
2. Обучите анализ компонента окружения (nca) модель для каждого значения с помощью набора обучающих данных в каждом сгибе.
3. Вычислите потерю классификации для соответствующего набора тестов в сгибе с помощью nca модели. Запишите значение потерь.
4. Повторите этот процесс для всех сгибов и всех значений.
for i = 1:length(lambdavalues) for k = 1:numtestsets % Extract the training set from the partition object Xtrain = X(cvp.training(k),:); ytrain = y(cvp.training(k),:); % Extract the test set from the partition object Xtest = X(cvp.test(k),:); ytest = y(cvp.test(k),:); % Train an NCA model for classification using the training set ncaMdl = fscnca(Xtrain,ytrain,'FitMethod','exact', ... 'Solver','lbfgs','Lambda',lambdavalues(i)); % Compute the classification loss for the test set using the NCA % model lossvalues(i,k) = loss(ncaMdl,Xtest,ytest, ... 'LossFunction','quadratic'); end end
Постройте средние значения потерь сгибов по сравнению со значениями. Если значение, которое соответствует минимальным потерям, падает на контур протестированных значений, область значений значений должна быть пересмотрена.
figure plot(lambdavalues,mean(lossvalues,2),'ro-') xlabel('Lambda values') ylabel('Loss values') grid on
Найдите значение, которое соответствует минимальной средней потере.
[~,idx] = min(mean(lossvalues,2)); % Find the index bestlambda = lambdavalues(idx) % Find the best lambda value
bestlambda = 0.0037
Подбирайте модель NCA ко всем данным с помощью оптимального значения. Используйте решатель LBFGS и отобразите информацию о сходимости.
ncaMdl = fscnca(X,y,'FitMethod','exact','Verbose',1, ... 'Solver','lbfgs','Lambda',bestlambda);
o Solver = LBFGS, HessianHistorySize = 15, LineSearchMethod = weakwolfe |====================================================================================================| | ITER | FUN VALUE | NORM GRAD | NORM STEP | CURV | GAMMA | ALPHA | ACCEPT | |====================================================================================================| | 0 | -1.246913e-01 | 1.231e-02 | 0.000e+00 | | 4.873e+01 | 0.000e+00 | YES | | 1 | -3.411330e-01 | 5.717e-03 | 3.618e+00 | OK | 1.068e+02 | 1.000e+00 | YES | | 2 | -5.226111e-01 | 3.763e-02 | 8.252e+00 | OK | 7.825e+01 | 1.000e+00 | YES | | 3 | -5.817731e-01 | 8.496e-03 | 2.340e+00 | OK | 5.591e+01 | 5.000e-01 | YES | | 4 | -6.132632e-01 | 6.863e-03 | 2.526e+00 | OK | 8.228e+01 | 1.000e+00 | YES | | 5 | -6.135264e-01 | 9.373e-03 | 7.341e-01 | OK | 3.244e+01 | 1.000e+00 | YES | | 6 | -6.147894e-01 | 1.182e-03 | 2.933e-01 | OK | 2.447e+01 | 1.000e+00 | YES | | 7 | -6.148714e-01 | 6.392e-04 | 6.688e-02 | OK | 3.195e+01 | 1.000e+00 | YES | | 8 | -6.149524e-01 | 6.521e-04 | 9.934e-02 | OK | 1.236e+02 | 1.000e+00 | YES | | 9 | -6.149972e-01 | 1.154e-04 | 1.191e-01 | OK | 1.171e+02 | 1.000e+00 | YES | | 10 | -6.149990e-01 | 2.922e-05 | 1.983e-02 | OK | 7.365e+01 | 1.000e+00 | YES | | 11 | -6.149993e-01 | 1.556e-05 | 8.354e-03 | OK | 1.288e+02 | 1.000e+00 | YES | | 12 | -6.149994e-01 | 1.147e-05 | 7.256e-03 | OK | 2.332e+02 | 1.000e+00 | YES | | 13 | -6.149995e-01 | 1.040e-05 | 6.781e-03 | OK | 2.287e+02 | 1.000e+00 | YES | | 14 | -6.149996e-01 | 9.015e-06 | 6.265e-03 | OK | 9.974e+01 | 1.000e+00 | YES | | 15 | -6.149996e-01 | 7.763e-06 | 5.206e-03 | OK | 2.919e+02 | 1.000e+00 | YES | | 16 | -6.149997e-01 | 8.374e-06 | 1.679e-02 | OK | 6.878e+02 | 1.000e+00 | YES | | 17 | -6.149997e-01 | 9.387e-06 | 9.542e-03 | OK | 1.284e+02 | 5.000e-01 | YES | | 18 | -6.149997e-01 | 3.250e-06 | 5.114e-03 | OK | 1.225e+02 | 1.000e+00 | YES | | 19 | -6.149997e-01 | 1.574e-06 | 1.275e-03 | OK | 1.808e+02 | 1.000e+00 | YES | |====================================================================================================| | ITER | FUN VALUE | NORM GRAD | NORM STEP | CURV | GAMMA | ALPHA | ACCEPT | |====================================================================================================| | 20 | -6.149997e-01 | 5.764e-07 | 6.765e-04 | OK | 2.905e+02 | 1.000e+00 | YES | Infinity norm of the final gradient = 5.764e-07 Two norm of the final step = 6.765e-04, TolX = 1.000e-06 Relative infinity norm of the final gradient = 5.764e-07, TolFun = 1.000e-06 EXIT: Local minimum found.
Постройте веса функции.
figure semilogx(ncaMdl.FeatureWeights,'ro') xlabel('Feature index') ylabel('Feature weight') grid on
fscnca
правильно выясняет, что первые две функции релевантны и что остальные не. Первые две функции весьма отдельным образом информативны, но, когда взято вместе приводят к модели точной классификации.
Предскажите классы с помощью новой модели и вычислите точность.
ypred = predict(ncaMdl,X); confusionchart(y,ypred)
Матрица беспорядка показывает, что точность предсказания для класса-1 улучшилась. 88 из данных из класса-1 предсказаны, чтобы быть от –1, и 12 из них предсказаны, чтобы быть от класса 1. 92 данных из класса 1, предсказаны, чтобы быть от класса 1 и 8 их, предсказаны, чтобы быть от класса-1.
Ссылки
[1] Ян, W., К. Ван, В. Цзо. "Выбор признаков компонента окружения для высоко-размерных данных". Журнал компьютеров. Издание 7, номер 1, январь 2012.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.