Класс: FeatureSelectionNCARegression
Оцените точность изученных весов функции на тестовых данных
err = loss(mdl,X,Y)
err = loss(mdl,X,Y,Name,Value)
возвращает среднеквадратическую ошибку как меру точности в err
= loss(mdl
,X
,Y
)err
, для модели mdl
, значения предиктора в X
, и значения ответа в Y
.
возвращает меру точности, err
= loss(mdl
,X
,Y
,Name,Value
)err
, с дополнительной опцией, заданной Name,Value
парный аргумент.
mdl
— Аналитическая модель компонента окружения для регрессииFeatureSelectionNCARegression
объектАналитическая модель компонента окружения для регрессии, заданной как FeatureSelectionNCARegression
объект.
X
— Значения переменного предиктораЗначения переменного предиктора, заданные как n-by-p матрица, где n является количеством наблюдений и p, являются количеством переменных предикторов.
Типы данных: single
| double
Y
— Значения ответаЗначения ответа, заданные как числовой вектор действительных чисел длины n, где n является количеством наблюдений.
Типы данных: single
| double
Задайте дополнительные разделенные запятой пары Name,Value
аргументы. Name
имя аргумента и Value
соответствующее значение. Name
должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN
.
'LossFunction'
— Тип функции потерь'mse'
(значение по умолчанию) | 'mad'
Тип функции потерь, заданный как разделенная запятой пара, состоящая из 'Loss Function'
и одно из следующих.
Тип функции потерь | Описание |
---|---|
'mse' | Среднеквадратическая ошибка |
'mad' | Следует иметь в виду абсолютное отклонение |
Пример: 'LossFunction','mse'
err
— Меньше-лучшая мера по точности для изученных весов функцииМеньше-лучшая мера по точности для изученных весов функции, возвращенных как скалярное значение. Можно задать меру точности с помощью LossFunction
аргумент пары "имя-значение".
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] Харрисон, D. и D.L., Рубинфельд. "Гедонистические цены и спрос на чистый воздух". J. Окружить. Экономика & управление. Vol.5, 1978, стр 81-102.
[2] Личмен, M. Репозиторий Машинного обучения UCI, Ирвин, CA: Калифорнийский университет, Школа Информатики и вычислительной техники, 2013. https://archive.ics.uci.edu/ml.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.