Класс: Линейный
Потери регрессии для моделей линейной регрессии
возвращает MSE для данных предиктора в L = loss(Mdl,Tbl,ResponseVarName)Tbl и истинные ответы в Tbl.ResponseVarName.
указывает параметры, использующие один или несколько аргументов пары имя-значение в дополнение к любой из комбинаций входных аргументов в предыдущих синтаксисах. Например, укажите, что столбцы в данных предиктора соответствуют наблюдениям, или укажите функцию регрессионных потерь.L = loss(___,Name,Value)
Mdl - Модель линейной регрессииRegressionLinear объект моделиМодель линейной регрессии, заданная как RegressionLinear объект модели. Можно создать RegressionLinear объект модели с использованием fitrlinear.
X - Данные предиктораДанные предиктора, заданные как полная или разреженная матрица n-by-p. Эта ориентация X указывает, что строки соответствуют отдельным наблюдениям, а столбцы - отдельным переменным предиктора.
Примечание
Если вы ориентируете матрицу предиктора так, чтобы наблюдения соответствовали столбцам, и укажите 'ObservationsIn','columns', то вы можете испытать значительное сокращение времени вычислений.
Длина Y и число замечаний в X должно быть равным.
Типы данных: single | double
Tbl - Образцы данныхОбразец данных, используемых для обучения модели, указанный как таблица. Каждая строка Tbl соответствует одному наблюдению, и каждый столбец соответствует одной прогнозирующей переменной. Дополнительно, Tbl может содержать дополнительные столбцы для переменной ответа и весов наблюдения. Tbl должен содержать все предикторы, используемые для обучения Mdl. Многозначные переменные и массивы ячеек, отличные от массивов ячеек символьных векторов, не допускаются.
Если Tbl содержит переменную ответа, используемую для обучения Mdl, то указывать не нужно ResponseVarName или Y.
Если вы тренируетесь Mdl используя образцы данных, содержащиеся в таблице, затем входные данные для loss также должен находиться в таблице.
ResponseVarName - Имя переменной ответаTblИмя переменной ответа, указанное как имя переменной в Tbl. Переменная ответа должна быть числовым вектором.
При указании ResponseVarName, то необходимо указать его как вектор символа или скаляр строки. Например, если переменная ответа сохранена как Tbl.Y, затем укажите ResponseVarName как 'Y'. В противном случае программа обрабатывает все столбцы Tbl, в том числе Tbl.Y, как предикторы.
Типы данных: char | string
Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.
'LossFun' - Функция потерь'mse' (по умолчанию) | 'epsiloninsensitive' | дескриптор функцииФункция потерь, заданная как разделенная запятыми пара, состоящая из 'LossFun' и встроенное имя или дескриптор функции потери.
В следующей таблице перечислены доступные функции потерь. Укажите соответствующее значение. Также в таблице + b.
β - вектор p-коэффициентов.
x - это наблюдение из переменных p-предиктора.
b - скалярное смещение.
| Стоимость | Описание |
|---|---|
'epsiloninsensitive' | Эпсилон-нечувствительные потери: f (x) | − |
'mse' | MSE: (x)] 2 |
'epsiloninsensitive' подходит только для учащихся SVM.
Укажите собственную функцию с помощью нотации дескриптора функции.
Пусть n - количество наблюдений в X. Ваша функция должна иметь эту подпись
lossvalue = lossfun(Y,Yhat,W)Выходной аргумент lossvalue является скаляром.
Выберите имя функции (lossfun).
Y представляет собой n-мерный вектор наблюдаемых ответов. loss передает входной аргумент Y в для Y.
Yhat - n-мерный вектор предсказанных откликов, аналогичный выходному сигналу predict.
W является n-на-1 числовым вектором весов наблюдения.
Укажите свою функцию с помощью 'LossFun',@.lossfun
Типы данных: char | string | function_handle
'ObservationsIn' - Измерение наблюдения данных предиктора'rows' (по умолчанию) | 'columns'Измерение наблюдения данных предиктора, указанное как 'rows' или 'columns'.
Примечание
Если вы ориентируете матрицу предиктора так, чтобы наблюдения соответствовали столбцам, и укажите 'ObservationsIn','columns', то вы можете испытать значительное сокращение времени вычислений. Невозможно указать 'ObservationsIn','columns' для данных предиктора в таблице.
Типы данных: char | string
'Weights' - Наблюдательные весаones(size(X,1),1) (по умолчанию) | числовой вектор | имя переменной в TblВеса наблюдения, указанные как разделенная запятыми пара, состоящая из 'Weights' и числовой вектор или имя переменной в Tbl.
При указании Weights как числовой вектор, то размер Weights должно быть равно количеству наблюдений в X или Tbl.
При указании Weights как имя переменной в Tbl, то имя должно быть символьным вектором или строковым скаляром. Например, если веса сохранены как Tbl.W, затем укажите Weights как 'W'. В противном случае программа обрабатывает все столбцы Tbl, в том числе Tbl.W, как предикторы.
При поставке весов loss вычисляет взвешенную регрессионную потерю и нормализует Weights для суммирования в 1.
Типы данных: double | single
L - Регрессионные потериПримечание
Если Mdl.FittedLoss является 'mse', то член потери в целевой функции составляет половину MSE. loss возвращает MSE по умолчанию. Поэтому, если вы используете loss для проверки ошибки повторного замещения (обучения) существует несоответствие между результатами MSE и оптимизации, что fitrlinear возвращает.
Моделирование 10000 наблюдений из этой модели
2x200 + e.
является редкой матрицей 10000 на 1000 с 10%-ми отличными от нуля стандартными нормальными элементами.
e - случайная нормальная ошибка со средним значением 0 и стандартным отклонением 0,3.
rng(1) % For reproducibility
n = 1e4;
d = 1e3;
nz = 0.1;
X = sprandn(n,d,nz);
Y = X(:,100) + 2*X(:,200) + 0.3*randn(n,1);Тренировка модели линейной регрессии. Зарезервировать 30% наблюдений в виде выборки.
CVMdl = fitrlinear(X,Y,'Holdout',0.3);
Mdl = CVMdl.Trained{1}Mdl =
RegressionLinear
ResponseName: 'Y'
ResponseTransform: 'none'
Beta: [1000x1 double]
Bias: -0.0066
Lambda: 1.4286e-04
Learner: 'svm'
Properties, Methods
CVMdl является RegressionPartitionedLinear модель. Он содержит свойство Trained, который представляет собой массив ячеек 1 на 1, содержащий RegressionLinear модель, которую программное обеспечение обучило с использованием обучающего набора.
Извлеките данные обучения и тестирования из определения раздела.
trainIdx = training(CVMdl.Partition); testIdx = test(CVMdl.Partition);
Оценка MSE обучающего и тестового образца.
mseTrain = loss(Mdl,X(trainIdx,:),Y(trainIdx))
mseTrain = 0.1496
mseTest = loss(Mdl,X(testIdx,:),Y(testIdx))
mseTest = 0.1798
Потому что есть одна сила регуляризации в Mdl, mseTrain и mseTest числовые скаляры.
Моделирование 10000 наблюдений из этой модели
2x200 + e.
является редкой матрицей 10000 на 1000 с 10%-ми отличными от нуля стандартными нормальными элементами.
e - случайная нормальная ошибка со средним значением 0 и стандартным отклонением 0,3.
rng(1) % For reproducibility n = 1e4; d = 1e3; nz = 0.1; X = sprandn(n,d,nz); Y = X(:,100) + 2*X(:,200) + 0.3*randn(n,1); X = X'; % Put observations in columns for faster training
Тренировка модели линейной регрессии. Зарезервировать 30% наблюдений в виде выборки.
CVMdl = fitrlinear(X,Y,'Holdout',0.3,'ObservationsIn','columns'); Mdl = CVMdl.Trained{1}
Mdl =
RegressionLinear
ResponseName: 'Y'
ResponseTransform: 'none'
Beta: [1000x1 double]
Bias: -0.0066
Lambda: 1.4286e-04
Learner: 'svm'
Properties, Methods
CVMdl является RegressionPartitionedLinear модель. Он содержит свойство Trained, который представляет собой массив ячеек 1 на 1, содержащий RegressionLinear модель, которую программное обеспечение обучило с использованием обучающего набора.
Извлеките данные обучения и тестирования из определения раздела.
trainIdx = training(CVMdl.Partition); testIdx = test(CVMdl.Partition);
Создайте анонимную функцию, измеряющую потери Хубера ( = 1), то есть
где
- остаток для наблюдения j. Пользовательские функции потери должны быть написаны в определенной форме. Правила записи пользовательской функции потери см. в разделе 'LossFun' аргумент пары имя-значение.
huberloss = @(Y,Yhat,W)sum(W.*((0.5*(abs(Y-Yhat)<=1).*(Y-Yhat).^2) + ...
((abs(Y-Yhat)>1).*abs(Y-Yhat)-0.5)))/sum(W);Оцените потери регрессии обучающего набора и тестового набора с помощью функции потерь Huber.
eTrain = loss(Mdl,X(:,trainIdx),Y(trainIdx),'LossFun',huberloss,... 'ObservationsIn','columns')
eTrain = -0.4186
eTest = loss(Mdl,X(:,testIdx),Y(testIdx),'LossFun',huberloss,... 'ObservationsIn','columns')
eTest = -0.4010
Моделирование 10000 наблюдений из этой модели
2x200 + e.
редкая матрица 10000 на 1000 с 10%-ми отличными от нуля стандартными нормальными элементами.
e - случайная нормальная ошибка со средним значением 0 и стандартным отклонением 0,3.
rng(1) % For reproducibility
n = 1e4;
d = 1e3;
nz = 0.1;
X = sprandn(n,d,nz);
Y = X(:,100) + 2*X(:,200) + 0.3*randn(n,1);Создайте набор из 15 логарифмически разнесенных уровней регуляции от до .
Lambda = logspace(-4,-1,15);
Удерживайте 30% данных для тестирования. Определите индексы тестового образца.
cvp = cvpartition(numel(Y),'Holdout',0.30);
idxTest = test(cvp);Тренировка модели линейной регрессии с использованием штрафов лассо с сильными сторонами в Lambda. Укажите сильные стороны регуляризации, оптимизируя целевую функцию с помощью SpaRSA и раздел данных. Чтобы увеличить скорость выполнения, транспонируйте данные предиктора и укажите, что наблюдения находятся в столбцах.
X = X'; CVMdl = fitrlinear(X,Y,'ObservationsIn','columns','Lambda',Lambda,... 'Solver','sparsa','Regularization','lasso','CVPartition',cvp); Mdl1 = CVMdl.Trained{1}; numel(Mdl1.Lambda)
ans = 15
Mdl1 является RegressionLinear модель. Поскольку Lambda является 15-мерным вектором уровней регуляризации, вы можете думать о Mdl1 как 15 обученных моделей, по одной на каждую силу регуляризации.
Оцените среднюю квадратичную ошибку тестовой выборки для каждой регуляризованной модели.
mse = loss(Mdl1,X(:,idxTest),Y(idxTest),'ObservationsIn','columns');
Более высокие значения Lambda привести к предикторной переменной разреженности, которая является хорошим качеством регрессионной модели. Переподготовка модели с использованием всего набора данных и всех ранее использовавшихся опций, за исключением спецификации раздела данных. Определите количество ненулевых коэффициентов на модель.
Mdl = fitrlinear(X,Y,'ObservationsIn','columns','Lambda',Lambda,... 'Solver','sparsa','Regularization','lasso'); numNZCoeff = sum(Mdl.Beta~=0);
На том же рисунке постройте график MSE и частоты ненулевых коэффициентов для каждой силы регуляризации. Постройте график всех переменных на шкале журнала.
figure; [h,hL1,hL2] = plotyy(log10(Lambda),log10(mse),... log10(Lambda),log10(numNZCoeff)); hL1.Marker = 'o'; hL2.Marker = 'o'; ylabel(h(1),'log_{10} MSE') ylabel(h(2),'log_{10} nonzero-coefficient frequency') xlabel('log_{10} Lambda') hold off

Выберите индекс или индексы Lambda которые уравновешивают минимальную ошибку классификации и предиктор-переменную разреженность (например, Lambda(11)).
idx = 11; MdlFinal = selectModels(Mdl,idx);
MdlFinal является обученным RegressionLinear объект модели, использующий Lambda(11) в качестве силы регуляризации.
Примечания и ограничения по использованию:
loss не поддерживает высокий table данные.
Дополнительные сведения см. в разделе Массивы Tall.
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.