Обучите многоклассовую наивную модель Байеса
возвращает многоклассовую наивную модель Бейеса (Mdl
= fitcnb(Tbl
,ResponseVarName
)Mdl
), обученный предикторами в таблице Tbl
и метки классов в переменной Tbl.ResponseVarName
.
возвращает наивный классификатор Байеса с дополнительными опциями, заданными одним или несколькими Mdl
= fitcnb(___,Name,Value
)Name,Value
аргументы в виде пар, с использованием любого из предыдущих синтаксисов. Например, вы можете задать распределение, чтобы смоделировать данные, предыдущие вероятности для классов или полосу окна сглаживания ядра.
Загрузите набор данных радужки Фишера.
load fisheriris
X = meas(:,3:4);
Y = species;
tabulate(Y)
Value Count Percent setosa 50 33.33% versicolor 50 33.33% virginica 50 33.33%
Программное обеспечение может классифицировать данные более чем с двумя классами с помощью наивных методов Байеса.
Обучите наивный классификатор Байеса. Рекомендуется указать порядок классов.
Mdl = fitcnb(X,Y,'ClassNames',{'setosa','versicolor','virginica'})
Mdl = ClassificationNaiveBayes ResponseName: 'Y' CategoricalPredictors: [] ClassNames: {'setosa' 'versicolor' 'virginica'} ScoreTransform: 'none' NumObservations: 150 DistributionNames: {'normal' 'normal'} DistributionParameters: {3x2 cell} Properties, Methods
Mdl
является обученным ClassificationNaiveBayes
классификатор.
По умолчанию программное обеспечение моделирует распределение предикторов в каждом классе, используя Гауссово распределение, имеющее некоторое среднее и стандартное отклонение. Используйте запись через точку для отображения параметров определенного Гауссова полинома, например, отобразите подгонку для первой функции в setosa
.
setosaIndex = strcmp(Mdl.ClassNames,'setosa');
estimates = Mdl.DistributionParameters{setosaIndex,1}
estimates = 2×1
1.4620
0.1737
Среднее значение 1.4620
и стандартное отклонение 0.1737
.
Постройте график Гауссовых контуров.
figure gscatter(X(:,1),X(:,2),Y); h = gca; cxlim = h.XLim; cylim = h.YLim; hold on Params = cell2mat(Mdl.DistributionParameters); Mu = Params(2*(1:3)-1,1:2); % Extract the means Sigma = zeros(2,2,3); for j = 1:3 Sigma(:,:,j) = diag(Params(2*j,:)).^2; % Create diagonal covariance matrix xlim = Mu(j,1) + 4*[-1 1]*sqrt(Sigma(1,1,j)); ylim = Mu(j,2) + 4*[-1 1]*sqrt(Sigma(2,2,j)); f = @(x,y) arrayfun(@(x0,y0) mvnpdf([x0 y0],Mu(j,:),Sigma(:,:,j)),x,y); fcontour(f,[xlim ylim]) % Draw contours for the multivariate normal distributions end h.XLim = cxlim; h.YLim = cylim; title('Naive Bayes Classifier -- Fisher''s Iris Data') xlabel('Petal Length (cm)') ylabel('Petal Width (cm)') legend('setosa','versicolor','virginica') hold off
Вы можете изменить распределение по умолчанию с помощью аргумента пары "имя-значение" 'DistributionNames'
. Например, если некоторые предикторы категоричны, то можно задать, что они многомерные, полиномиальные случайные переменные, использующие 'DistributionNames','mvmn'
.
Создайте наивный классификатор Байеса для набора данных радужной оболочки глаза Фишера. Кроме того, задайте предыдущие вероятности во время обучения.
Загрузите набор данных радужки Фишера.
load fisheriris X = meas; Y = species; classNames = {'setosa','versicolor','virginica'}; % Class order
X
является числовой матрицей, которая содержит четыре измерения лепестков для 150 ирисов. Y
- массив ячеек из векторов символов, который содержит соответствующие виды радужной оболочки.
По умолчанию предыдущее распределение вероятностей класса является относительным частотным распределением классов в наборе данных. В этом случае априорная вероятность составляет 33% для каждого вида. Однако предположим, что вы знаете, что в населения 50% ирисов сетоса, 20% версиколор и 30% виргиника. Можно включить эту информацию, указав это распределение как предварительную вероятность во время обучения.
Обучите наивный классификатор Байеса. Задайте порядок классов и предшествующее распределение вероятностей классов.
prior = [0.5 0.2 0.3]; Mdl = fitcnb(X,Y,'ClassNames',classNames,'Prior',prior)
Mdl = ClassificationNaiveBayes ResponseName: 'Y' CategoricalPredictors: [] ClassNames: {'setosa' 'versicolor' 'virginica'} ScoreTransform: 'none' NumObservations: 150 DistributionNames: {'normal' 'normal' 'normal' 'normal'} DistributionParameters: {3x4 cell} Properties, Methods
Mdl
является обученным ClassificationNaiveBayes
классификатор, и некоторые его свойства появляются в Командном окне. Программа рассматривает предикторы как независимые, заданные классом, и, по умолчанию, подходит им с помощью нормальных распределений.
Наивный алгоритм Байеса не использует предыдущие вероятности классов во время обучения. Поэтому можно задать предыдущие вероятности классов после обучения с помощью записи через точку. Например, предположим, что вы хотите увидеть различие в эффективности между моделью, которая использует вероятности предыдущего класса по умолчанию, и моделью, которая использует различные prior
.
Создайте новую наивную модель Байеса на основе Mdl
и задайте, что предшествующее распределение вероятностей классов является эмпирическим распределением классов.
defaultPriorMdl = Mdl; FreqDist = cell2table(tabulate(Y)); defaultPriorMdl.Prior = FreqDist{:,3};
Программное обеспечение нормализует вероятности предыдущего класса, чтобы суммировать 1
.
Оцените ошибку перекрестной валидации для обеих моделей с помощью 10-кратной перекрестной валидации.
rng(1); % For reproducibility
defaultCVMdl = crossval(defaultPriorMdl);
defaultLoss = kfoldLoss(defaultCVMdl)
defaultLoss = 0.0533
CVMdl = crossval(Mdl); Loss = kfoldLoss(CVMdl)
Loss = 0.0340
Mdl
работает лучше, чем defaultPriorMdl
.
Загрузите набор данных радужки Фишера.
load fisheriris
X = meas;
Y = species;
Обучите наивный классификатор Байеса, используя каждый предиктор. Рекомендуется указать порядок классов.
Mdl1 = fitcnb(X,Y,... 'ClassNames',{'setosa','versicolor','virginica'})
Mdl1 = ClassificationNaiveBayes ResponseName: 'Y' CategoricalPredictors: [] ClassNames: {'setosa' 'versicolor' 'virginica'} ScoreTransform: 'none' NumObservations: 150 DistributionNames: {'normal' 'normal' 'normal' 'normal'} DistributionParameters: {3x4 cell} Properties, Methods
Mdl1.DistributionParameters
ans=3×4 cell array
{2x1 double} {2x1 double} {2x1 double} {2x1 double}
{2x1 double} {2x1 double} {2x1 double} {2x1 double}
{2x1 double} {2x1 double} {2x1 double} {2x1 double}
Mdl1.DistributionParameters{1,2}
ans = 2×1
3.4280
0.3791
По умолчанию программное обеспечение моделирует распределение предикторов в каждом классе как Гауссов с некоторым средним и стандартным отклонением. Существует четыре предиктора и три уровня классов. Каждая камера в Mdl1.DistributionParameters
соответствует числовому вектору, содержащему среднее и стандартное отклонение каждого распределения, например, среднее и стандартное отклонение для setosa iris sepal ширины 3.4280
и 0.3791
, соответственно.
Оцените матрицу неточностей для Mdl1
.
isLabels1 = resubPredict(Mdl1); ConfusionMat1 = confusionchart(Y,isLabels1);
Элемент (j, k) матричного графика неточностей представляет количество наблюдений, которое программное обеспечение классифицирует как k, но действительно находится в классе j согласно данным.
Переобучите классификатор с помощью распределения Гауссова для предикторов 1 и 2 (длины и ширины сепаля) и плотности нормального ядра по умолчанию для предикторов 3 и 4 (длины и ширины лепестков).
Mdl2 = fitcnb(X,Y,... 'DistributionNames',{'normal','normal','kernel','kernel'},... 'ClassNames',{'setosa','versicolor','virginica'}); Mdl2.DistributionParameters{1,2}
ans = 2×1
3.4280
0.3791
Программное обеспечение не обучает параметры плотности ядра. Скорее программное обеспечение выбирает оптимальную ширину. Однако вы можете задать ширину, используя 'Width'
аргумент пары "имя-значение".
Оцените матрицу неточностей для Mdl2
.
isLabels2 = resubPredict(Mdl2); ConfusionMat2 = confusionchart(Y,isLabels2);
На основе матриц неточностей два классификатора выполняют одинаково в обучающей выборке.
Загрузите набор данных радужки Фишера.
load fisheriris X = meas; Y = species; rng(1); % For reproducibility
Обучите и перекрестная валидация наивного классификатора Байеса с помощью опций по умолчанию и перекрестной валидации k-fold. Рекомендуется указать порядок классов.
CVMdl1 = fitcnb(X,Y,... 'ClassNames',{'setosa','versicolor','virginica'},... 'CrossVal','on');
По умолчанию программное обеспечение моделирует распределение предикторов в каждом классе как Гауссов с некоторым средним и стандартным отклонением. CVMdl1
является ClassificationPartitionedModel
модель.
Создайте наивный шаблон двоичного классификатора Байеса по умолчанию и обучите исправление ошибок, выходные коды мультикласса модель.
t = templateNaiveBayes(); CVMdl2 = fitcecoc(X,Y,'CrossVal','on','Learners',t);
CVMdl2
является ClassificationPartitionedECOC
модель. Можно задать опции для наивных двоичных учащихся Байеса, используя те же аргументы пары "имя-значение", что и для fitcnb
.
Сравните несовпадающую по выборке ошибку классификации k-fold (доля неправильно классифицированных наблюдений).
classErr1 = kfoldLoss(CVMdl1,'LossFun','ClassifErr')
classErr1 = 0.0533
classErr2 = kfoldLoss(CVMdl2,'LossFun','ClassifErr')
classErr2 = 0.0467
Mdl2
имеет более низкую ошибку обобщения.
Некоторые спам-фильтры классифицируют входящее письмо как спам на основе того, сколько раз за слово или пунктуация (называемые лексемы) происходит в электронном письме. Предикторами являются частоты конкретных слов или пунктуаций в электронном письме. Поэтому предикторы составляют полиномиальные случайные переменные.
Этот пример иллюстрирует классификацию с использованием наивных Байеса и полиномиальных предикторов.
Создайте обучающие данные
Предположим, вы наблюдали 1000 писем и классифицировали их как спам или не спам. Сделайте это, случайным образом присвоив -1 или 1 y
для каждого электронного письма.
n = 1000; % Sample size rng(1); % For reproducibility Y = randsample([-1 1],n,true); % Random labels
Чтобы создать данные предиктора, предположим, что в словаре пять лексем и 20 наблюдаемые лексемы на каждый адрес электронной почты. Сгенерируйте данные предиктора из пяти лексем путем создания случайных, полиномиальных отклонений. Относительные частоты для лексем, соответствующих спам-письмам, должны отличаться от электронных писем, которые не являются спамом.
tokenProbs = [0.2 0.3 0.1 0.15 0.25;... 0.4 0.1 0.3 0.05 0.15]; % Token relative frequencies tokensPerEmail = 20; % Fixed for convenience X = zeros(n,5); X(Y == 1,:) = mnrnd(tokensPerEmail,tokenProbs(1,:),sum(Y == 1)); X(Y == -1,:) = mnrnd(tokensPerEmail,tokenProbs(2,:),sum(Y == -1));
Обучите классификатор
Обучите наивный классификатор Байеса. Укажите, что предикторы являются полиномиальными.
Mdl = fitcnb(X,Y,'DistributionNames','mn');
Mdl
является обученным ClassificationNaiveBayes
классификатор.
Оцените эффективность в выборке Mdl
путем оценки ошибки неправильной классификации.
isGenRate = resubLoss(Mdl,'LossFun','ClassifErr')
isGenRate = 0.0200
Коэффициент неправильной классификации в выборке составляет 2%.
Создание новых данных
Случайным образом сгенерируйте отклонения, которые представляют новый пакет электронных писем.
newN = 500; newY = randsample([-1 1],newN,true); newX = zeros(newN,5); newX(newY == 1,:) = mnrnd(tokensPerEmail,tokenProbs(1,:),... sum(newY == 1)); newX(newY == -1,:) = mnrnd(tokensPerEmail,tokenProbs(2,:),... sum(newY == -1));
Оценка эффективности классификатора
Классификация новых писем с помощью обученного наивного классификатора Байеса Mdl
, и определить, обобщается ли алгоритм.
oosGenRate = loss(Mdl,newX,newY)
oosGenRate = 0.0261
Частота неправильной классификации вне выборки составляет 2,6%, что указывает на то, что классификатор обобщается довольно хорошо.
В этом примере показано, как использовать OptimizeHyperparameters
Пара "имя-значение" для минимизации потерь перекрестной валидации в наивном классификаторе Байеса с помощью fitcnb
. В примере используются данные радужки глаза Фишера.
Загрузите данные радужки Фишера.
load fisheriris X = meas; Y = species; classNames = {'setosa','versicolor','virginica'};
Оптимизируйте классификацию с помощью параметров ' auto '.
Для воспроизводимости установите случайный seed и используйте 'expected-improvement-plus'
функция сбора.
rng default Mdl = fitcnb(X,Y,'ClassNames',classNames,'OptimizeHyperparameters','auto',... 'HyperparameterOptimizationOptions',struct('AcquisitionFunctionName',... 'expected-improvement-plus'))
Warning: It is recommended that you first standardize all numeric predictors when optimizing the Naive Bayes 'Width' parameter. Ignore this warning if you have done that.
|=====================================================================================================| | Iter | Eval | Objective | Objective | BestSoFar | BestSoFar | Distribution-| Width | | | result | | runtime | (observed) | (estim.) | Names | | |=====================================================================================================| | 1 | Best | 0.053333 | 0.59202 | 0.053333 | 0.053333 | normal | - | | 2 | Best | 0.046667 | 0.78433 | 0.046667 | 0.049998 | kernel | 0.11903 | | 3 | Accept | 0.053333 | 0.12187 | 0.046667 | 0.046667 | normal | - | | 4 | Accept | 0.086667 | 0.3213 | 0.046667 | 0.046668 | kernel | 2.4506 | | 5 | Accept | 0.046667 | 0.28788 | 0.046667 | 0.046663 | kernel | 0.10449 | | 6 | Accept | 0.073333 | 0.28737 | 0.046667 | 0.046665 | kernel | 0.025044 | | 7 | Accept | 0.046667 | 0.32107 | 0.046667 | 0.046655 | kernel | 0.27647 | | 8 | Accept | 0.046667 | 0.29889 | 0.046667 | 0.046647 | kernel | 0.2031 | | 9 | Accept | 0.06 | 0.33168 | 0.046667 | 0.046658 | kernel | 0.44271 | | 10 | Accept | 0.046667 | 0.3879 | 0.046667 | 0.046618 | kernel | 0.2412 | | 11 | Accept | 0.046667 | 0.32713 | 0.046667 | 0.046619 | kernel | 0.071925 | | 12 | Accept | 0.046667 | 0.28496 | 0.046667 | 0.046612 | kernel | 0.083459 | | 13 | Accept | 0.046667 | 0.30127 | 0.046667 | 0.046603 | kernel | 0.15661 | | 14 | Accept | 0.046667 | 0.38462 | 0.046667 | 0.046607 | kernel | 0.25613 | | 15 | Accept | 0.046667 | 0.31145 | 0.046667 | 0.046606 | kernel | 0.17776 | | 16 | Accept | 0.046667 | 0.29788 | 0.046667 | 0.046606 | kernel | 0.13632 | | 17 | Accept | 0.046667 | 0.3987 | 0.046667 | 0.046606 | kernel | 0.077598 | | 18 | Accept | 0.046667 | 0.29776 | 0.046667 | 0.046626 | kernel | 0.25646 | | 19 | Accept | 0.046667 | 0.3424 | 0.046667 | 0.046626 | kernel | 0.093584 | | 20 | Accept | 0.046667 | 0.30273 | 0.046667 | 0.046627 | kernel | 0.061602 | |=====================================================================================================| | Iter | Eval | Objective | Objective | BestSoFar | BestSoFar | Distribution-| Width | | | result | | runtime | (observed) | (estim.) | Names | | |=====================================================================================================| | 21 | Accept | 0.046667 | 0.31211 | 0.046667 | 0.046627 | kernel | 0.066532 | | 22 | Accept | 0.093333 | 0.33373 | 0.046667 | 0.046618 | kernel | 5.8968 | | 23 | Accept | 0.046667 | 0.33187 | 0.046667 | 0.046619 | kernel | 0.067045 | | 24 | Accept | 0.046667 | 0.3261 | 0.046667 | 0.04663 | kernel | 0.25281 | | 25 | Accept | 0.046667 | 0.33679 | 0.046667 | 0.04663 | kernel | 0.1473 | | 26 | Accept | 0.046667 | 0.27818 | 0.046667 | 0.046631 | kernel | 0.17211 | | 27 | Accept | 0.046667 | 0.31236 | 0.046667 | 0.046631 | kernel | 0.12457 | | 28 | Accept | 0.046667 | 0.43723 | 0.046667 | 0.046631 | kernel | 0.066659 | | 29 | Accept | 0.046667 | 0.29014 | 0.046667 | 0.046631 | kernel | 0.1081 | | 30 | Accept | 0.08 | 0.32716 | 0.046667 | 0.046628 | kernel | 1.1048 |
__________________________________________________________ Optimization completed. MaxObjectiveEvaluations of 30 reached. Total function evaluations: 30 Total elapsed time: 56.4233 seconds Total objective function evaluation time: 10.2689 Best observed feasible point: DistributionNames Width _________________ _______ kernel 0.11903 Observed objective function value = 0.046667 Estimated objective function value = 0.046667 Function evaluation time = 0.78433 Best estimated feasible point (according to models): DistributionNames Width _________________ _______ kernel 0.25613 Estimated objective function value = 0.046628 Estimated function evaluation time = 0.32851
Mdl = ClassificationNaiveBayes ResponseName: 'Y' CategoricalPredictors: [] ClassNames: {'setosa' 'versicolor' 'virginica'} ScoreTransform: 'none' NumObservations: 150 HyperparameterOptimizationResults: [1x1 BayesianOptimization] DistributionNames: {1x4 cell} DistributionParameters: {3x4 cell} Kernel: {1x4 cell} Support: {1x4 cell} Width: [3x4 double] Properties, Methods
Tbl
- Выборочные данныеВыборочные данные, используемых для обучения модели, заданная как таблица. Каждая строка Tbl
соответствует одному наблюдению, и каждый столбец соответствует одной переменной предиктора. Опционально Tbl
может содержать один дополнительный столбец для переменной отклика. Многополюсные переменные и массивы ячеек, отличные от массивов ячеек векторов символов, не разрешены.
Если Tbl
содержит переменную отклика, и необходимо использовать все оставшиеся переменные в Tbl
в качестве предикторов, затем задайте переменную отклика при помощи ResponseVarName
.
Если Tbl
содержит переменную отклика, и необходимо использовать только подмножество остальных переменных в Tbl
в качестве предикторов задайте формулу при помощи formula
.
Если Tbl
не содержит переменную отклика, затем задает переменную отклика при помощи Y
. Длина переменной отклика и количество строк в Tbl
должно быть равным.
Типы данных: table
ResponseVarName
- Имя переменной откликаTbl
Имя переменной отклика, заданное как имя переменной в Tbl
.
Вы должны задать ResponseVarName
как вектор символов или строковый скаляр. Для примера, если переменная отклика Y
хранится как Tbl.Y
, затем укажите его следующим 'Y'
. В противном случае программное обеспечение обрабатывает все столбцы Tbl
, включая Y
, как предикторы при обучении модели.
Переменная отклика должна быть категориальными символьными или строковыми массивами; логический или числовой вектор; или массив ячеек из векторов символов. Если Y
является символьным массивом, тогда каждый элемент переменной отклика должен соответствовать одной строке массива.
Хорошей практикой является определение порядка классов при помощи ClassNames
аргумент имя-значение.
Типы данных: char
| string
formula
- Объяснительная модель переменной отклика и подмножества переменных предиктораОбъяснительная модель переменной отклика и подмножества переменных предиктора, заданная в виде вектора символов или строкового скаляра в форме 'Y~x1+x2+x3'
. В этой форме Y
представляет переменную отклика, и x1
, x2
, и x3
представляют переменные предиктора.
Чтобы задать подмножество переменных в Tbl
в качестве предикторов для настройки модели используйте формулу. Если вы задаете формулу, то программное обеспечение не использует никаких переменных в Tbl
которые не появляются в formula
.
Имена переменных в формуле должны быть обоими именами переменных в Tbl
(Tbl.Properties.VariableNames
) и действительный MATLAB® идентификаторы. Можно проверить имена переменных в Tbl
при помощи isvarname
функция. Если имена переменных недопустимы, можно преобразовать их, используя matlab.lang.makeValidName
функция.
Типы данных: char
| string
Y
- Метки классовМетки класса, для которых обучен наивный классификатор Байеса, заданные как категориальные символьные или строковые массивы, логический или числовой вектор или массив ячеек из векторов символов. Каждый элемент Y
определяет членство класса в соответствующей строке X
. Y
поддерживает уровни классов K.
Если Y
является символьный массив, тогда каждая строка должна соответствовать одной метке класса.
Длина Y
и количество строк X
должен быть эквивалентным.
Типы данных: categorical
| char
| string
| logical
| single
| double
| cell
X
- Данные предиктораДанные предиктора, заданные как числовая матрица.
Каждая строка X
соответствует одному наблюдению (также известному как образец или пример), и каждый столбец соответствует одной переменной (также известной как функция).
Длина Y
и количество строк X
должен быть эквивалентным.
Типы данных: double
Примечание:
Программное обеспечение лечит NaN
, пустой символьный вектор (''
), пустая строка (""
), <missing>
, и <undefined>
элементы как отсутствующие значения данных.
Если Y
содержит отсутствующие значения, затем программа удаляет их и соответствующие строки X
.
Если X
содержит все строки, полностью составленные из отсутствующих значений, затем программа удаляет эти строки и соответствующие элементы Y
.
Если X
содержит отсутствующие значения, и вы задаете 'DistributionNames','mn'
, затем программное обеспечение удаляет эти строки X
и соответствующие элементы Y
.
Если предиктор не представлен в классе, то есть если все его значения NaN
в пределах класса, затем программное обеспечение возвращает ошибку.
Удаление строк X
и соответствующие элементы Y
уменьшает эффективный размер выборки для обучения или перекрестной проверки.
Задайте необязательные разделенные разделенными запятой парами Name,Value
аргументы. Name
- имя аргумента и Value
- соответствующее значение. Name
должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN
.
'DistributionNames','mn','Prior','uniform','KSWidth',0.5
указывает, что распределение данных является полиномиальным, предыдущие вероятности для всех классов равны, и ширина окна сглаживания ядра для всех классов 0.5
модулей.Примечание
Вы не можете использовать какой-либо аргумент пары "имя-значение" перекрестной проверки наряду с 'OptimizeHyperparameters'
аргумент пары "имя-значение". Можно изменить перекрестную валидацию для 'OptimizeHyperparameters'
только при помощи 'HyperparameterOptimizationOptions'
аргумент пары "имя-значение".
'DistributionNames'
- распределения данных'kernel'
| 'mn'
| 'mvmn'
| 'normal'
| строковые массивы | массив ячеек из векторов символовРаспределения данных fitcnb
используется для моделирования данных, заданных как разделенная разделенными запятой парами, состоящая из 'DistributionNames'
и вектор символов или строковый скаляр, строковые массивы или массив ячеек из векторов символов со значениями из этой таблицы.
Значение | Описание |
---|---|
'kernel' | Оценка плотности сглаживания ядра. |
'mn' | Полиномиальное распределение. Если вы задаете mn , тогда все функции являются компонентами полиномиального распределения. Поэтому вы не можете включать 'mn' как элемент массива строковых массивов или массива ячеек из векторов символов. Для получения дополнительной информации смотрите Алгоритмы. |
'mvmn' | Многомерное полиномиальное распределение. Для получения дополнительной информации смотрите Алгоритмы. |
'normal' | Нормальное (Гауссово) распределение. |
Если вы задаете вектор символов или строковый скаляр, то программное обеспечение моделирует все функции, использующие это распределение. Если вы задаете 1-байт- P строковые массивы или массив ячеек из векторов символов, то модели ПО характеризуются j использованием распределения в j элемента массива.
По умолчанию программное обеспечение устанавливает все предикторы, заданные как категориальные предикторы (используя CategoricalPredictors
Аргумент пары "имя-значение") в 'mvmn'
. В противном случае распределение по умолчанию 'normal'
.
Необходимо указать, что по крайней мере один предиктор имеет распределение 'kernel'
чтобы дополнительно задать Kernel
, Support
, или Width
.
Пример: 'DistributionNames','mn'
Пример: 'DistributionNames',{'kernel','normal','kernel'}
'Kernel'
- Более плавный тип ядра'normal'
(по умолчанию) | 'box'
| 'epanechnikov'
| 'triangle'
| строковые массивы | массив ячеек из векторов символовГладкий тип ядра, заданный как разделенная разделенными запятой парами, состоящая из 'Kernel'
и вектор символов или строковый скаляр, строковые массивы или массив ячеек из векторов символов.
В этой таблице представлены доступные опции для настройки области плотности сглаживания ядра. Позвольте I {u} обозначить функцию индикатора.
Значение | Ядро | Формула |
---|---|---|
'box' | Коробка (униформа) |
|
'epanechnikov' | Епанечников |
|
'normal' | Гауссовский |
|
'triangle' | Треугольный |
|
Если вы задаете 1-байтовый P строковые массивы или массив ячеек, причем каждый элемент массива содержит любое значение в таблице, то программное обеспечение обучает классификатор с помощью более гладкого типа ядра в j элемента для j функций в X
. Программа игнорирует элементы Kernel
не соответствует предиктору, распределение которого 'kernel'
.
Необходимо указать, что по крайней мере один предиктор имеет распределение 'kernel'
чтобы дополнительно задать Kernel
, Support
, или Width
.
Пример: 'Kernel',{'epanechnikov','normal'}
'Support'
- Поддержка плотности сглаживания ядра'unbounded'
(по умолчанию) | 'positive'
| строковые массивы | ячеек | число вектора-строкиПоддержка плотности сглаживания ядра, заданная как разделенная разделенными запятой парами, состоящая из 'Support'
и 'positive'
, 'unbounded'
, строковые массивы, массив ячеек или числовой вектор-строка. Программа применяет плотность сглаживания ядра к указанной области.
В этой таблице представлены доступные опции для настройки области плотности сглаживания ядра.
Значение | Описание |
---|---|
1 на 2 числовых векторы-строки | Для примера, [L,U] , где L и U являются конечными нижней и верхней границами, соответственно, для поддержки плотности. |
'positive' | Поддержка плотности - все положительные действительные значения. |
'unbounded' | Поддержка плотности является всеми реальными значениями. |
Если вы задаете 1-байтовый P строковые массивы или массив ячеек, причем каждый элемент в строковом массиве содержит любое текстовое значение в таблице и каждый элемент в массиве ячеек, содержащий любое значение в таблице, то программное обеспечение обучает классификатор с помощью поддержки ядра в j элемента для j функций в X
. Программа игнорирует элементы Kernel
не соответствует предиктору, распределение которого 'kernel'
.
Необходимо указать, что по крайней мере один предиктор имеет распределение 'kernel'
чтобы дополнительно задать Kernel
, Support
, или Width
.
Пример: 'KSSupport',{[-10,20],'unbounded'}
Типы данных: char
| string
| cell
| double
'Width'
- Ширина окна сглаживания ядраШирина окна сглаживания ядра, заданная как разделенная разделенными запятой парами, состоящая из 'Width'
и матрица числовых значений, числовых векторов-столбцов, числовых векторов-строк или скаляров.
Предположим, что существует K уровня классов и P предикторов. В этой таблице представлены доступные опции для настройки ширины окна сглаживания ядра.
Значение | Описание |
---|---|
K -by - P матрица числовых значений | Элемент (k,j) задает ширину для j предиктора в классе k. |
K численный вектор -by-1 | Element k задает ширину для всех предикторов в k классов. |
1-байт- P числовой вектор-строка | Element j задает ширину на всех уровнях классов для j предиктора. |
скаляр | Задает пропускную способность для всех функций во всех классах. |
По умолчанию программа автоматически выбирает ширину по умолчанию для каждой комбинации предиктора и класса с помощью значения, оптимального для Гауссова распределения. Если вы задаете Width
и содержит NaN
s, затем программа выбирает ширины для элементов, содержащих NaN
с.
Необходимо указать, что по крайней мере один предиктор имеет распределение 'kernel'
чтобы дополнительно задать Kernel
, Support
, или Width
.
Пример: 'Width',[NaN NaN]
Типы данных: double
| struct
'CrossVal'
- флаг перекрестной валидации'off'
(по умолчанию) | 'on'
Флаг перекрестной проверки, заданный как разделенная разделенными запятой парами, состоящая из 'Crossval'
и 'on'
или 'off'
.
Если вы задаете 'on'
затем программное обеспечение реализует 10-кратную перекрестную валидацию.
Чтобы переопределить этот параметр перекрестной проверки, используйте один из следующих аргументов пары "имя-значение": CVPartition
, Holdout
, KFold
, или Leaveout
. Чтобы создать перекрестно проверенную модель, можно использовать один аргумент пары "имя-значение" перекрестной валидации только за раз.
Другой способ - выполнить перекрестную проверку позже путем передачи Mdl
кому crossval
.
Пример: 'CrossVal','on'
'CVPartition'
- Раздел перекрестной проверки[]
(по умолчанию) | cvpartition
Объект разделаРаздел перекрестной проверки, заданный как cvpartition
объект раздела, созданный cvpartition
. Объект раздела задает тип перекрестной валидации и индексацию для наборов обучения и валидации.
Чтобы создать перекрестно проверенную модель, можно задать только один из следующих четырех аргументов в виде имя-значение: CVPartition
, Holdout
, KFold
, или Leaveout
.
Пример: Предположим, что вы создаете случайный разбиение для 5-кратной перекрестной валидации при 500 наблюдениях при помощи cvp = cvpartition(500,'KFold',5)
. Затем можно задать перекрестно проверенную модель при помощи 'CVPartition',cvp
.
'Holdout'
- Доля данных для валидации отключенияДоля данных, используемых для валидации удержания, заданная в виде скалярного значения в области значений (0,1). Если вы задаете 'Holdout',p
, затем программное обеспечение завершает следующие шаги:
Случайный выбор и резервирование p*100
% данных в качестве данных валидации и train модели с использованием остальных данных.
Сохраните компактную, обученную модель в Trained
свойство перекрестно проверенной модели.
Чтобы создать перекрестно проверенную модель, можно задать только один из следующих четырех аргументов в виде имя-значение: CVPartition
, Holdout
, KFold
, или Leaveout
.
Пример: 'Holdout',0.1
Типы данных: double
| single
'KFold'
- Количество складок10
(по умолчанию) | положительное целое значение, больше 1Количество складок для использования в перекрестно проверенной модели, заданное как положительное целое значение, больше 1. Если вы задаете 'KFold',k
, затем программное обеспечение завершает следующие шаги:
Случайным образом разделите данные на k
наборы.
Для каждого набора зарезервируйте набор как данные валидации и обучите модель, используя другой k
- 1 комплект.
Сохраните k
компактные, обученные модели в k
-by-1 вектор камеры в Trained
свойство перекрестно проверенной модели.
Чтобы создать перекрестно проверенную модель, можно задать только один из следующих четырех аргументов в виде имя-значение: CVPartition
, Holdout
, KFold
, или Leaveout
.
Пример: 'KFold',5
Типы данных: single
| double
'Leaveout'
- Оставьте один из флагов перекрестной проверки'off'
(по умолчанию) | 'on'
Выходной флаг перекрестной проверки, заданный как 'on'
или 'off'
. Если вы задаете 'Leaveout','on'
, затем для каждого из n наблюдений (где n - количество наблюдений, исключая недостающие наблюдения, заданное в NumObservations
свойство модели), программное обеспечение завершает следующие шаги:
Зарезервируйте одно наблюдение как данные валидации и обучите модель с помощью другого n - 1 наблюдений.
Сохраните n компактные обученные модели в векторе камеры n-на-1 в Trained
свойство перекрестно проверенной модели.
Чтобы создать перекрестно проверенную модель, можно задать только один из следующих четырех аргументов в виде имя-значение: CVPartition
, Holdout
, KFold
, или Leaveout
.
Пример: 'Leaveout','on'
'CategoricalPredictors'
- Категориальный список предикторов'all'
Категориальный список предикторов, заданный как одно из значений в этой таблице.
Значение | Описание |
---|---|
Вектор положительных целых чисел |
Каждая запись в векторе является индексом значением, соответствующим столбцу данных предиктора, который содержит категориальную переменную. Значения индекса находятся между 1 и Если |
Логический вектор |
A |
Матрица символов | Каждая строка матрицы является именем переменной. Имена должны совпадать с записями в PredictorNames . Дополните имена дополнительными пробелами, чтобы каждая строка матрицы символов имела одинаковую длину. |
Строковые массивы или массив ячеек векторов символов | Каждый элемент массива является именем переменной. Имена должны совпадать с записями в PredictorNames . |
'all' | Все предикторы категоричны. |
По умолчанию, если данные предиктора находятся в таблице (Tbl
), fitcnb
принимает, что переменная категориальна, если это логический вектор, категориальный вектор, символьный массив, строковые массивы или массив ячеек из векторов символов. Если данные предиктора являются матрицей (X
), fitcnb
принимает, что все предикторы непрерывны. Чтобы идентифицировать любые другие предикторы как категориальные предикторы, задайте их с помощью 'CategoricalPredictors'
аргумент имя-значение.
Для идентифицированных категориальных предикторов, fitcnb
использует многомерные полиномиальные распределения. Для получения дополнительной информации смотрите DistributionNames
и Алгоритмы.
Пример: 'CategoricalPredictors','all'
Типы данных: single
| double
| logical
| char
| string
| cell
'ClassNames'
- Имена классов, используемых для обученияИмена классов, используемых для обучения, заданные как категориальные символьные или строковые массивы; логический или числовой вектор; или массив ячеек из векторов символов. ClassNames
должен иметь тот совпадающий тип данных, что и переменная отклика в Tbl
или Y
.
Если ClassNames
является символьный массив, тогда каждый элемент должен соответствовать одной строке массива.
Использование ClassNames
кому:
Задайте порядок классов во время обучения.
Задайте порядок любой размерности входного или выходного аргумента, которая соответствует порядку классов. Для примера используйте ClassNames
для определения порядка размерностей Cost
или порядок столбцов классификационных оценок, возвращаемых predict
.
Выберите подмножество классов для обучения. Например, предположим, что набор всех различных имен классов в Y
является {'a','b','c'}
. Чтобы обучить модель с помощью наблюдений из классов 'a'
и 'c'
только, задайте 'ClassNames',{'a','c'}
.
Значение по умолчанию для ClassNames
- набор всех различных имен классов в переменной отклика в Tbl
или Y
.
Пример: 'ClassNames',{'b','g'}
Типы данных: categorical
| char
| string
| logical
| single
| double
| cell
'Cost'
- Стоимость неправильной классификацииСтоимость неправильной классификации точки, заданная как разделенная разделенными запятой парами, состоящая из 'Cost'
и одно из следующих:
Квадратная матрица, где Cost(i,j)
- стоимость классификации точки в класс j
если его класс true i
(т.е. строки соответствуют истинному классу, а столбцы - предсказанному классу). Чтобы задать порядок классов для соответствующих строк и столбцов Cost
, дополнительно задайте ClassNames
аргумент пары "имя-значение".
Структурные S
имеющий два поля: S.ClassNames
содержащие имена групп как переменные того же типа, что и Y
, и S.ClassificationCosts
содержащая матрицу затрат.
Значение по умолчанию является Cost(i,j)=1
если i~=j
, и Cost(i,j)=0
если i=j
.
Пример: 'Cost',struct('ClassNames',{{'b','g'}},'ClassificationCosts',[0 0.5; 1 0])
Типы данных: single
| double
| struct
'PredictorNames'
- Имена переменных предиктораИмена переменных предиктора, заданные как строковые массивы уникальных имен или массив ячеек из уникальных векторов символов. Функциональность PredictorNames
зависит от способа предоставления обучающих данных.
Если вы поставляете X
и Y
, тогда можно использовать PredictorNames
для назначения имен переменным предиктора в X
.
Порядок имен в PredictorNames
должен соответствовать порядку столбцов X
. То есть PredictorNames{1}
- имя X(:,1)
, PredictorNames{2}
- имя X(:,2)
и так далее. Кроме того, size(X,2)
и numel(PredictorNames)
должно быть равным.
По умолчанию PredictorNames
является {'x1','x2',...}
.
Если вы поставляете Tbl
, тогда можно использовать PredictorNames
выбрать, какие переменные предиктора использовать в обучении. То есть, fitcnb
использует только переменные предиктора в PredictorNames
и переменной отклика во время обучения.
PredictorNames
должен быть подмножеством Tbl.Properties.VariableNames
и не может включать имя переменной отклика.
По умолчанию PredictorNames
содержит имена всех переменных предиктора.
Хорошей практикой является определение предикторов для обучения с использованием любой из 'PredictorNames'
или formula
, но не то и другое.
Пример: 'PredictorNames',{'SepalLength','SepalWidth','PetalLength','PetalWidth'}
Типы данных: string
| cell
'Prior'
- Предыдущие вероятности'empirical'
(по умолчанию) | 'uniform'
| вектор скалярных значений | структурыПредыдущие вероятности для каждого класса, заданные как разделенная разделенными запятой парами, состоящая из 'Prior'
и значение в этой таблице.
Значение | Описание |
---|---|
'empirical' | Предшествующие вероятности классов являются относительными частотами классов в Y . |
'uniform' | Все предыдущие вероятности классов равны 1/ K, где K - количество классов. |
числовой вектор | Каждый элемент является классом предыдущей вероятности. Упорядочивайте элементы согласно Mdl .ClassNames или укажите порядок с помощью ClassNames аргумент пары "имя-значение". Программное обеспечение нормализует элементы так, что они суммируются с 1 . |
структура | Структурный
|
Если вы задаете значения для обоих Weights
и Prior
веса перенормированы, чтобы суммировать значение предшествующей вероятности в соответствующем классе.
Пример: 'Prior','uniform'
Типы данных: char
| string
| single
| double
| struct
'ResponseName'
- Имя переменной отклика'Y'
(по умолчанию) | символьный вектор | строковый скалярИмя переменной отклика, заданное как вектор символов или строковый скаляр.
Если вы поставляете Y
, тогда можно использовать 'ResponseName'
чтобы задать имя для переменной отклика.
Если вы поставляете ResponseVarName
или formula
, тогда вы не можете использовать 'ResponseName'
.
Пример: 'ResponseName','response'
Типы данных: char
| string
'ScoreTransform'
- Преобразование счета'none'
(по умолчанию) | 'doublelogit'
| 'invlogit'
| 'ismax'
| 'logit'
| указатель на функцию |...Преобразование счета, заданное как вектор символов, строковый скаляр или указатель на функцию.
В этой таблице результирующие векторы символов и строковые скаляры.
Значение | Описание |
---|---|
'doublelogit' | 1/(1 + e–2x) |
'invlogit' | журнал (x/( 1 - x)) |
'ismax' | Устанавливает счет для класса с самым большим счетом равным 1 и устанавливает счета для всех других классов равным 0 |
'logit' | 1/(1 + e–x) |
'none' или 'identity' | x (без преобразования) |
'sign' | -1 для x < 0 0 для x = 0 1 для x > 0 |
'symmetric' | 2 x – 1 |
'symmetricismax' | Устанавливает счет для класса с самым большим счетом равным 1 и устанавливает счета для всех других классов равной -1 |
'symmetriclogit' | 2/(1 + e–x) – 1 |
Для функции MATLAB или функции, которую вы задаете, используйте указатель на функцию для преобразования счета. Указатель на функцию должен принять матрицу (исходные счета) и вернуть матрицу того же размера (преобразованные счета).
Пример: 'ScoreTransform','logit'
Типы данных: char
| string
| function_handle
'Weights'
- Веса наблюденийTbl
Веса наблюдений, заданные как разделенная разделенными запятой парами, состоящая из 'Weights'
и числовой вектор положительных значений или имени переменной в Tbl
. Программа взвешивает наблюдения в каждой строке X
или Tbl
с соответствующим значением в Weights
. Размер Weights
должно равняться количеству строк X
или Tbl
.
Если вы задаете входные данные как таблицу Tbl
, затем Weights
может быть именем переменной в Tbl
который содержит числовой вектор. В этом случае необходимо задать Weights
как вектор символов или строковый скаляр. Для примера, если вектор весов W
хранится как Tbl.W
, затем укажите его следующим 'W'
. В противном случае программное обеспечение обрабатывает все столбцы Tbl
, включая W
, как предикторы или реакция при обучении модели.
Программное обеспечение нормализует Weights
суммировать до значения предшествующей вероятности в соответствующем классе.
По умолчанию Weights
это таковые
, где (n
,1)n
количество наблюдений в X
или Tbl
.
Типы данных: double
| single
| char
| string
'OptimizeHyperparameters'
- Параметры для оптимизации'none'
(по умолчанию) | 'auto'
| 'all'
| строковые массивы или массив ячеек из допустимых имен параметров | вектор optimizableVariable
объектыОптимизируемые параметры, заданные как разделенная разделенными запятой парами, состоящая из 'OptimizeHyperparameters'
и одно из следующих:
'none'
- Не оптимизировать.
'auto'
- Использовать {'DistributionNames','Width'}
.
'all'
- Оптимизируйте все подходящие параметры.
Строковые массивы или массив ячеек с допустимыми именами параметров.
Вектор optimizableVariable
объекты, как правило, выходные данные hyperparameters
.
Оптимизация пытается минимизировать потери перекрестной валидации (ошибка) для fitcnb
путем изменения параметров. Для получения информации о потерях при перекрестной проверке (хотя и в другом контексте), смотрите Классификационные потери. Чтобы контролировать тип перекрестной валидации и другие аспекты оптимизации, используйте HyperparameterOptimizationOptions
Пара "имя-значение".
Примечание
'OptimizeHyperparameters'
значения переопределяют все значения, которые вы устанавливаете, используя другие аргументы пары "имя-значение". Для примера установка 'OptimizeHyperparameters'
на 'auto'
вызывает 'auto'
значения для применения.
Подходящие параметры для fitcnb
являются:
DistributionNames
— fitcnb
поиск среди 'normal'
и 'kernel'
.
Width
— fitcnb
поиск среди вещественных значений, по умолчанию логарифмический в области значений [MinPredictorDiff/4,max(MaxPredictorRange,MinPredictorDiff)]
.
Kernel
— fitcnb
поиск среди 'normal'
, 'box'
, 'epanechnikov'
, и 'triangle'
.
Установите параметры nondefault путем передачи вектора optimizableVariable
объекты, которые имеют значения nondefault. Для примера,
load fisheriris params = hyperparameters('fitcnb',meas,species); params(2).Range = [1e-2,1e2];
Передайте params
как значение OptimizeHyperparameters
.
По умолчанию итеративное отображение появляется в командной строке, и графики появляются согласно количеству гиперпараметров в оптимизации. Для оптимизации и графиков целевой функцией является журнал ( 1 + потери перекрестной валидации) для регрессии и коэффициент неправильной классификации для классификации. Чтобы управлять итеративным отображением, установите Verbose
поле 'HyperparameterOptimizationOptions'
аргумент пары "имя-значение". Чтобы управлять графиками, установите ShowPlots
поле 'HyperparameterOptimizationOptions'
аргумент пары "имя-значение".
Для получения примера смотрите Оптимизацию Наивного Классификатора Байеса.
Пример: 'auto'
'HyperparameterOptimizationOptions'
- Опции для оптимизацииОпции оптимизации, заданные как разделенная разделенными запятой парами, состоящая из 'HyperparameterOptimizationOptions'
и структуру. Этот аргумент изменяет эффект OptimizeHyperparameters
аргумент пары "имя-значение". Все поля в структуре являются необязательными.
Имя поля | Значения | Дефолт |
---|---|---|
Optimizer |
| 'bayesopt' |
AcquisitionFunctionName |
Функции сбора данных, имена которых включают | 'expected-improvement-per-second-plus' |
MaxObjectiveEvaluations | Максимальное количество вычислений целевой функции. | 30 для 'bayesopt' или 'randomsearch' , и вся сетка для 'gridsearch' |
MaxTime | Временной предел, заданный как положительный действительный. Предел времени в секундах, что измеряется | Inf |
NumGridDivisions | Для 'gridsearch' , количество значений в каждой размерности. Значение может быть вектором положительных целых чисел, дающих количество значений для каждой размерности, или скаляром, который применяется ко всем размерностям. Это поле игнорируется для категориальных переменных. | 10 |
ShowPlots | Логическое значение, указывающее, показывать ли графики. Если true , это поле строит график наилучшего значения целевой функции относительно числа итерации. Если существует один или два параметра оптимизации и если Optimizer является 'bayesopt' , затем ShowPlots также строит график модели целевой функции относительно параметров. | true |
SaveIntermediateResults | Логическое значение, указывающее, сохранять ли результаты при Optimizer является 'bayesopt' . Если true , это поле перезаписывает переменную рабочей области с именем 'BayesoptResults' при каждой итерации. Переменная является BayesianOptimization объект. | false |
Verbose | Отображение в командной строке.
Для получения дополнительной информации смотрите | 1 |
UseParallel | Логическое значение, указывающее, запускать ли байесовскую оптимизацию параллельно, что требует Parallel Computing Toolbox™. Из-за непродуктивности параллельной синхронизации параллельная байесовская оптимизация не обязательно приводит к воспроизводимым результатам. Для получения дополнительной информации см. «Параллельная байесовская оптимизация». | false |
Repartition | Логическое значение, указывающее, следует ли повторять перекрестную валидацию при каждой итерации. Если
| false |
Используйте не более одного из следующих трех имен полей. | ||
CVPartition | A cvpartition объект, созданный cvpartition . | 'Kfold',5 если вы не задаете какое-либо поле перекрестной проверки |
Holdout | Скаляр в области значений (0,1) представляющий фракцию удержания. | |
Kfold | Целое число, больше 1. |
Пример: 'HyperparameterOptimizationOptions',struct('MaxObjectiveEvaluations',60)
Типы данных: struct
Mdl
- Обученная наивная модель классификации БайесаClassificationNaiveBayes
объект модели | ClassificationPartitionedModel
перекрестно проверенный объект моделиОбученная наивная модель классификации Байеса, возвращенная как ClassificationNaiveBayes
объект модели или ClassificationPartitionedModel
перекрестно проверенный объект модели.
Если вы задаете любой из аргументов пары "имя-значение" KFold
, Holdout
, CrossVal
, или CVPartition
, затем Mdl
является ClassificationPartitionedModel
перекрестно проверенный объект модели. В противном случае Mdl
является ClassificationNaiveBayes
объект модели.
Ссылка на свойства Mdl
, используйте запись через точку. Для примера для доступа к предполагаемым параметрам распределения введите Mdl.DistributionParameters
.
В модели bag-of-tokens значение предиктора j является неотрицательным числом вхождений лексемы, j в наблюдении. Количество категорий (интервалов) в полиномиальной модели является количеством различных лексем (количество предикторов).
Naive Bayes является алгоритмом классификации, который применяет оценку плотности к данным.
Алгоритм использует теорему Байеса и (наивно) принимает, что предикторы являются условно независимыми, учитывая класс. Несмотря на то, что предположение обычно нарушается на практике, наивные классификаторы Байеса, как правило, дают апостериорные распределения, которые устойчивы к смещенным оценкам плотности классов, особенно там, где апостериорное значение равно 0,5 (контур решения) [1].
Наивные классификаторы Байеса присваивают наблюдения наиболее вероятному классу (другими словами, maximum a posteriori правилу принятия решений). Явно алгоритм делает следующие шаги:
Оцените плотности предикторов в каждом классе.
Моделируйте апостериорные вероятности согласно правилу Байеса. То есть для всех k = 1,..., K,
где:
Y - случайная переменная, соответствующая индексу класса наблюдения.
X 1,..., XP являются случайными предикторами наблюдения.
- предшествующая вероятность того, что индекс класса k.
Классифицировать наблюдение путем оценки апостериорной вероятности для каждого класса, а затем присвоить наблюдение классу, дающему максимальную апостериорную вероятность.
Если предикторы составляют полиномиальное распределение, то апостериорная вероятность где - функция масс вероятностей полиномиального распределения.
Для классификации основанных на отсчете данных, таких как модель bag-of-tokens, используйте полиномиальное распределение (например, set 'DistributionNames','mn'
).
После обучения модели можно сгенерировать код C/C + +, который предсказывает метки для новых данных. Для генерации кода C/C + + требуется MATLAB Coder™. Для получения дополнительной информации смотрите Введение в генерацию кода .
Если вы задаете 'DistributionNames','mn'
при обучении Mdl
использование fitcnb
, затем программное обеспечение подходит для полиномиального распределения с помощью модели bag-of-tokens. Программа сохраняет вероятность того, что лексема j
появляется в классах k
в свойстве DistributionParameters
. Используя сглаживание добавки [2], предполагаемая вероятность является{k
, j
}
где:
которое является взвешенным количеством вхождений лексемы j в классе k.
nk - количество наблюдений в k классов.
- вес для i наблюдений. Программа нормирует веса внутри класса, так что они суммируются с предшествующей вероятностью для этого класса.
это общее взвешенное количество вхождений всех лексем в k классов.
Если вы задаете 'DistributionNames','mvmn'
при обучении Mdl
использование fitcnb
, затем:
Для каждого предиктора программное обеспечение собирает список уникальных уровней, хранит отсортированный список в CategoricalLevels
, и рассматривает каждый уровень как интервал. Каждая комбинация предиктор/класс является отдельной, независимой полиномиальной случайной переменной.
Для предиктора j
в k классов программное обеспечение подсчитывает образцы каждого категориального уровня с помощью списка, хранящегося в CategoricalLevels
.{j
}
Программа сохраняет вероятность того, что предиктор j
, в классах k
, имеет L уровня в свойстве DistributionParameters
, для всех уровней в {k
, j
}CategoricalLevels
. Используя сглаживание добавки [2], предполагаемая вероятность является{j
}
где:
которое является взвешенным количеством наблюдений, для которых j предиктора равен L в классе k.
nk - количество наблюдений в k классов.
если xij = L, в противном случае 0.
- вес для i наблюдений. Программа нормирует веса внутри класса, так что они суммируются с предшествующей вероятностью для этого класса.
mj - количество различных уровней в j предиктора.
mk - взвешенное количество наблюдений в классе k.
[1] Хасти, Т., Р. Тибширани и Дж. Фридман. Элементы статистического обучения, второе издание. Нью-Йорк: Спрингер, 2008.
[2] Мэннинг, К. Д., П. Рагхаван, и М. Шютце. Введение в информационный поиск, NY: Cambridge University Press, 2008.
Эта функция поддерживает длинные массивы с ограничениями:
Поддерживаемые синтаксисы:
Mdl = fitcnb(Tbl,Y)
Mdl = fitcnb(X,Y)
Mdl = fitcnb(___,Name,Value)
Опции, связанные с плотностями ядра, перекрестной валидацией и оптимизацией гипероптимизации параметров управления, не поддерживаются. Поддерживаемые аргументы пары "имя-значение":
'DistributionNames'
— 'kernel'
значение не поддерживается.
'CategoricalPredictors'
'Cost'
'PredictorNames'
'Prior'
'ResponseName'
'ScoreTransform'
'Weights'
- Значение должно быть длинный массив.
Для получения дополнительной информации см. Раздел «Длинные массивы для данных , которых не помещаютсь в память,».
Чтобы выполнить параллельную оптимизацию гипероптимизации параметров управления, используйте 'HyperparameterOptimizationOptions', struct('UseParallel',true)
аргумент имя-значение в вызове этой функции.
Для получения дополнительной информации об оптимизации параллельной гипероптимизации параметров управления смотрите Parallel Bayesian Optimization.
Общие сведения о параллельных вычислениях см. в разделе Запуск функций MATLAB с поддержкой автоматических параллелей (Parallel Computing Toolbox).
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.