Класс: Элемент Выбор NCARexression
Прогнозирование ответов с использованием регрессионной модели анализа компонентов соседства (NCA)
ypred = predict(mdl,X)
ypred = predict(mdl,X) вычисляет прогнозируемые значения отклика, ypred, соответствующие строкам X, с использованием модели mdl.
mdl - модель анализа компонентов окрестности для регрессии;FeatureSelectionNCARegression объектМодель анализа компонентов окрестности для регрессии, заданная как FeatureSelectionNCARegression объект.
X - Значения предикторных переменныхЗначения предикторных переменных, определенные как матрица n-by-p, где n - количество наблюдений, а p - число предикторных переменных.
Типы данных: single | double
ypred - Прогнозируемые значения откликаПрогнозируемые значения отклика, заданные как вектор n-by-1, где n - количество наблюдений.
loss и predictЗагрузите образцы данных.
Загрузите данные по жилью [1] из репозитория машинного обучения UCI [2]. В наборе данных 506 наблюдений. Первые 13 столбцов содержат предикторные значения, а последний столбец содержит ответные значения. Цель состоит в том, чтобы предсказать медианную стоимость домов, занятых владельцами в пригородном Бостоне, в зависимости от 13 предикторов.
Загрузите данные и определите вектор отклика и матрицу предиктора.
load('housing.data');
X = housing(:,1:13);
y = housing(:,end);Разделите данные на обучающие и тестовые наборы, используя 4-й предиктор в качестве переменной группировки для стратифицированного разбиения. Это гарантирует, что каждый раздел будет включать одинаковое количество наблюдений от каждой группы.
rng(1) % For reproducibility cvp = cvpartition(X(:,4),'Holdout',56); Xtrain = X(cvp.training,:); ytrain = y(cvp.training,:); Xtest = X(cvp.test,:); ytest = y(cvp.test,:);
cvpartition случайным образом присваивает 56 наблюдений тестовому набору, а остальные данные - обучающему набору.
Выполнение выбора элементов с использованием настроек по умолчанию
Выбор элемента с использованием модели NCA для регрессии. Стандартизация значений предиктора.
nca = fsrnca(Xtrain,ytrain,'Standardize',1);Постройте график весов элементов.
figure()
plot(nca.FeatureWeights,'ro')
Ожидается, что вес неактуальных признаков приблизится к нулю. fsrnca определяет два элемента как не относящиеся к делу.
Вычислите потери регрессии.
L = loss(nca,Xtest,ytest,'LossFunction','mad')
L = 2.5394
Вычислите прогнозируемые значения отклика для тестового набора и постройте их график в зависимости от фактического отклика.
ypred = predict(nca,Xtest); figure() plot(ypred,ytest,'bo') xlabel('Predicted response') ylabel('Actual response')

Идеальная посадка по сравнению с фактическими значениями образует 45-градусную прямую линию. На этом графике прогнозируемые и фактические значения отклика, по-видимому, разбросаны вокруг этой линии. Настройка значения λ (параметр регуляризации) обычно помогает улучшить производительность.
Настройка параметра регуляризации с помощью 10-кратной перекрестной проверки
Настройка означает нахождение значения λ, которое приведет к минимальной потере регрессии. Ниже приведены шаги настройки с использованием 10-кратной перекрестной проверки:
1. Сначала разбейте данные на 10 складок. Для каждой складки, cvpartition присваивает 1/10 данных в качестве обучающего набора и 9/10 данных в качестве тестового набора.
n = length(ytrain);
cvp = cvpartition(Xtrain(:,4),'kfold',10);
numvalidsets = cvp.NumTestSets;Назначьте значения λ для поиска. Создайте массив для хранения значений потерь.
lambdavals = linspace(0,2,30)*std(ytrain)/n; lossvals = zeros(length(lambdavals),numvalidsets);
2. Обучайте модель анализа компонента окрестности (nca) для каждого значения λ, используя обучающий набор в каждой складке.
3. Подгонка модели регрессии гауссова процесса (gpr) с использованием выбранных элементов. Затем вычислите потери регрессии для соответствующего тестового набора в гибке с помощью модели gpr. Запишите значение потери.
4. Повторите это для каждого значения λ и каждого сворачивания.
for i = 1:length(lambdavals) for k = 1:numvalidsets X = Xtrain(cvp.training(k),:); y = ytrain(cvp.training(k),:); Xvalid = Xtrain(cvp.test(k),:); yvalid = ytrain(cvp.test(k),:); nca = fsrnca(X,y,'FitMethod','exact',... 'Lambda',lambdavals(i),... 'Standardize',1,'LossFunction','mad'); % Select features using the feature weights and a relative % threshold. tol = 1e-3; selidx = nca.FeatureWeights > tol*max(1,max(nca.FeatureWeights)); % Fit a non-ARD GPR model using selected features. gpr = fitrgp(X(:,selidx),y,'Standardize',1,... 'KernelFunction','squaredexponential','Verbose',0); lossvals(i,k) = loss(gpr,Xvalid(:,selidx),yvalid); end end
Вычислите средние потери, полученные из сгибов для каждого значения λ. Постройте график средней потери по отношению к значениям λ.
meanloss = mean(lossvals,2); figure; plot(lambdavals,meanloss,'ro-'); xlabel('Lambda'); ylabel('Loss (MSE)'); grid on;

Найдите значение λ, которое создает минимальное значение потерь.
[~,idx] = min(meanloss); bestlambda = lambdavals(idx)
bestlambda = 0.0251
Выбор элемента для регрессии выполняется с использованием наилучшего значения λ. Стандартизация значений предиктора.
nca2 = fsrnca(Xtrain,ytrain,'Standardize',1,'Lambda',bestlambda,... 'LossFunction','mad');
Постройте график весов элементов.
figure()
plot(nca.FeatureWeights,'ro')
Вычислите потери с помощью новой модели nca на тестовых данных, которая не используется для выбора элементов.
L2 = loss(nca2,Xtest,ytest,'LossFunction','mad')
L2 = 2.0560
Настройка параметра регуляризации помогает идентифицировать соответствующие функции и уменьшает потери.
Постройте график между прогнозируемыми и фактическими значениями отклика в тестовом наборе.
ypred = predict(nca2,Xtest);
figure;
plot(ypred,ytest,'bo');
Прогнозируемые значения отклика, по-видимому, также ближе к фактическим значениям.
Ссылки
[1] Харрисон, Д. и Д. Л., Рубинфельд. «Гедонические цены и спрос на чистый воздух». Дж. Энвирон. Экономика и управление. Vol.5, 1978, стр. 81-102.
[2] Лихман, M. UCI Machine Learning Repository, Ирвайн, Калифорния: Калифорнийский университет, Школа информации и компьютерных наук, 2013. https://archive.ics.uci.edu/ml.
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.