使用交叉验证估计损失
用十倍交叉验证计算回归模型的均方误差。
加载carsmall
数据集。将加速度、马力、重量和每加仑(MPG)英里值放入矩阵中数据
.删除包含南
价值观。
负载carsmalldata =[加速度马力重量MPG];数据(任何(isnan(数据),2 ),:) = [];
的最后一列数据
,对应于英里/加仑
,作为响应变量y
.的其他列数据
作为预测数据X
.添加一列1到X
当你的回归函数使用回归
,如本例所示。
笔记:回归
当您只需要回归模型的系数估计或残差时,很有用。如果您需要进一步调查拟合的回归模型,请通过使用创建线性回归模型对象fitlm
.有关使用的示例fitlm
和crossval
,请参阅使用交叉验证计算平均绝对误差.
(y =数据:4);X = [ones(length(y),1) data(:,1:3)];
创建自定义函数REGF.
(在本例的最后)。这个函数对训练数据拟合一个回归模型,然后在测试集上计算预测值。
笔记:如果使用此示例的实时脚本文件,则REGF.
函数已经包含在文件的末尾。否则,您需要在。m文件的末尾创建这个函数,或者将其作为文件添加到MATLAB®路径中。
计算带有预测数据的回归模型的默认10倍交叉验证均方误差X
和响应变量y
.
rng (“默认”)%的再现性cvmse = crossval(mse的, X, y,“Predfun”@regf)
cvMSE = 17.5399
这段代码创建了这个函数REGF.
.
函数yfit = regf(Xtrain,ytrain,Xtest) b =回归(ytrain,Xtrain);yfit = Xtest * b;结束
通过使用10倍交叉验证,计算在数值和分类预测数据上训练的逻辑回归模型的误分类误差。
加载病人
数据集。指定数值变量舒张压
和收缩系统
和分类变量性别
作为预测器,并指定吸烟者
作为响应变量。
负载病人X1 =舒张压;X2 =分类(性别);X3 =收缩压;y =吸烟者;
创建自定义函数Classf.
(在本例的最后)。此功能适合训练数据的逻辑回归模型,然后对测试数据进行分类。
笔记:如果使用此示例的实时脚本文件,则Classf.
函数已经包含在文件的末尾。否则,您需要在。m文件的末尾创建这个函数,或者将其作为文件添加到MATLAB®路径中。
用预测数据计算模型的10倍交叉验证误分类误差X1
,X2
,X3
和响应变量y
.指定“分层”,y
以确保训练和测试集的吸烟者比例大致相同。
rng (“默认”)%的再现性呃= crossval (“宏”,x1,x2,x3,y,“Predfun”@classf,'分层', y)
err = 0.1100.
这段代码创建了这个函数Classf.
.
函数pred = classf(x1train,x2train,x3train,x3test,x2test,x3test)xtrain = table(x1train,x2train,x3train,ytrain,......'variablenames',{舒张压的,'性别','收缩',“抽烟”});Xtest =表(X1test X2test X3test,......'variablenames',{舒张压的,'性别','收缩'});modelspec =吸烟者~舒张期+性别+收缩期;mdl = fitglm (Xtrain modelspec,'分配',“二”);Xtest yfit =预测(mdl);= (yfit > 0.5);结束
对于给定数量的星团,计算交叉验证的观测值与其最近的星团中心之间的距离的平方和。比较1到10个集群的结果。
加载fisheriris
数据集。X
是矩阵量
,其中包含150种不同的花朵的花测量。
负载fisheririsX =量;
创建自定义函数Clustf.
(在本例的最后)。该函数执行如下步骤:
规范培训数据。
将训练数据分离为k
集群。
使用训练数据均值和标准差对测试数据进行转换。
计算从每个测试数据点到最近的群集中心或质心的距离。
计算距离的平方和的总和。
笔记:如果使用此示例的实时脚本文件,则Clustf.
函数已经包含在文件的末尾。否则,您需要在。m文件的末尾创建函数,或者将其作为文件添加到MATLAB®路径中。
创建一个为
循环指定群集数量k
为每个迭代。对于每个固定数量的集群,传递相应的Clustf.
函数crossval
.因为crossval
默认情况下执行10倍交叉验证,软件计算10平方距离的总和,每个训练和测试数据的分区。取这些值的和;结果是给定的簇数的交叉验证的距离平方和。
rng (“默认”)%的再现性cvdist = 0(5、1);为k = 1:10 fun = @(Xtrain,Xtest)clustf(Xtrain,Xtest,k);距离= crossval(有趣,X);cvdist (k) =总和(距离);结束
绘制每个簇数的交叉验证的距离平方和。
情节(cvdist)包含('簇数量') ylabel ('平方距离的简历')
通常,在决定使用多少簇时,要考虑与交叉验证的距离平方和显著减少相对应的簇的最大数目。对于本例,使用两个或三个集群似乎合适,但使用超过三个集群就不合适了。
这段代码创建了这个函数Clustf.
.
函数距离= cluster (Xtrain,Xtest,k) [Ztrain,Zmean,Zstd] = zscore(Xtrain);[~ C] = kmeans (Ztrain k);%创建k个集群中兴通讯= (Xtest-Zmean)。/ Zstd;d = pdist2 (C,中兴通讯,“欧几里得”,“最小”1);距离=总和(d。^ 2);结束
用十倍交叉验证计算回归模型的平均绝对误差。
加载carsmall
数据集。指定加速度
和位移
变量作为预测变量和重量
变量作为响应。
负载carsmallX1 =加速度;X2 =位移;y =重量;
创建自定义函数REGF.
(在本例的最后)。这个函数对训练数据拟合一个回归模型,然后在测试集上计算预测的汽车权重。该函数将预测的汽车权重值与真实值进行比较,然后计算平均绝对误差(MAE)和调整到测试设置的汽车权重范围的MAE。
笔记:如果使用此示例的实时脚本文件,则REGF.
函数已经包含在文件的末尾。否则,您需要在。m文件的末尾创建这个函数,或者将其作为文件添加到MATLAB®路径中。
默认情况下,crossval
执行10倍交叉验证。中数据的10个训练和测试集分区X1
,X2
,y
,计算MAE和使用调整的MAE值REGF.
函数。找到平均mae和卑鄙的mae。
rng (“默认”)%的再现性值= Crossval(@ Regf,x1,x2,y)
值=10×2319.2261 0.1132 342.3722 0.1240 214.3735 0.0902 174.7247 0.1128 189.4835 0.0832 249.4359 0.1003 194.4210 0.0845 348.7437 0.1700 283.1761 0.1187 210.7444 0.1325
意思是(值)
ans =1×2252.6701 - 0.1129
这段代码创建了这个函数REGF.
.
函数tbltrain = table(X1train,X2train,ytrain, X1test,X2test,ytest)......'variablenames',{“加速”,“位移”,“重量”});tbltest =表(X1test X2test,欧美,......'variablenames',{“加速”,“位移”,“重量”});mdl = fitlm (tbltrain,“重量~加速度+位移”);tbltest yfit =预测(mdl);美=意味着(abs (yfit-tbltest.Weight));adjMAE =美/范围(tbltest.Weight);错误= [MAE adjMAE];结束
利用主成分分析(PCA)和5倍交叉验证计算分类树的误分类误差。
加载fisheriris
数据集。的量
矩阵包含150种不同的花的测量值。的物种
变量列出每朵花的物种。
负载fisheriris
创建自定义函数Classf.
(在本例的最后)。该函数对训练数据拟合分类树,然后对测试数据进行分类。在函数内部使用PCA来减少用于创建树模型的预测器的数量。
笔记:如果使用此示例的实时脚本文件,则Classf.
函数已经包含在文件的末尾。否则,您需要在。m文件的末尾创建这个函数,或者将其作为文件添加到MATLAB®路径中。
创建一个cvpartition
目的分层5倍交叉验证。默认情况下,cvpartition
确保训练集和测试集的花卉种类比例大致相同。
rng (“默认”)%的再现性本量利= cvpartition(物种,'kfold'5);
用预测数据计算分类树的5倍交叉验证误分类误差量
和响应变量物种
.
cvError = crossval (“宏”量,物种,“Predfun”@classf,'划分'本量利)
Cverror = 0.1067
这段代码创建了这个函数Classf.
.
函数YFIT = CLASSF(XTRAIN,YTRAIN,XTEST)%标准化训练预测器数据。然后,找到%为标准化训练预测器的主成分%的数据。[Ztrain, Zmean Zstd] = zscore (Xtrain);[多项式系数,scoreTrain, ~, ~,解释说,μ)= pca (Ztrain);%找到帐户的最低数量%,至少95%的变异性。n =找到(cumsum(解释)> = 95,1);找出标准化考试的n个主成分分数%训练预测数据。训练分类树模型只使用这些分数使用。scoreTrain95 = scoreTrain (:, 1: n);mdl = fitctree (scoreTrain95 ytrain);找出变换后的n个主成分分数%测试数据。对测试数据进行分类。中兴通讯= (Xtest-Zmean)。/ Zstd;scoreTest95 = (Ztest-mu) *多项式系数(:,1:n);scoreTest95 yfit =预测(mdl);结束
从判别分析模型的10倍交叉验证结果创建混淆矩阵。
笔记:使用分类
当训练速度是一个问题时。否则,使用fitcdiscr
创建一个判别分析模型。下面的示例显示了与本示例相同的工作流,但使用fitcdiscr
,请参阅使用交叉验证预测创建混淆矩阵.
加载fisheriris
数据集。X
包含150种不同花的花测量,y
列出每种花的种类。创建一个变量订单
这说明了花的种类的顺序。
负载fisheririsX =量;y =物种;订单=独特(y)
订单=3 x1细胞{'setosa'} {'versicolor'} {'virginica'}
创建命名的函数句柄函数
对于完成以下步骤的函数:
获取培训数据(Xtrain
和ytrain
)及测试数据(Xtest
和ytest.
).
使用训练数据创建一个判别分析模型,对新数据进行分类(Xtest
).创建此模型并使用分类
函数。
比较真实的测试数据类(ytest.
)的预测测试数据值,并使用confusionmat
函数。使用“订单”,订单
.
func = @ (Xtrain、ytrain Xtest、欧美)confusionmat(欧美,......分类(Xtest Xtrain ytrain),“秩序”、订单);
创建一个cvpartition
目的分层10倍交叉验证。默认情况下,cvpartition
确保训练集和测试集的花卉种类比例大致相同。
rng (“默认”)%的再现性本量利= cvpartition (y,“Kfold”10);
为预测数据的每个分区计算10个测试集混淆矩阵X
和响应变量y
.每一行的confMat
对应于一个测试集的混淆矩阵结果。汇总结果并创建最终的混淆矩阵cvmat.
.
confMat = crossval (func, X, y,'划分'、本量利);cvMat =重塑(总和(confMat), 3、3)
cvMat =3×350 0 0 0 48 2 0 1 49
将混淆矩阵绘制为混淆矩阵图,使用困惑的园林
.
confusionchart (cvMat顺序)
标准
- - - - - -误差估计类型mse的
|“宏”
误差估计的类型,指定为mse的
或“宏”
.
价值 | 描述 |
---|---|
mse的 |
均方误差(MSE) -仅适用于回归算法 |
“宏” |
误分类率,或误分类观察的比例-仅适用于分类算法 |
X
- - - - - -数据集指定为列向量、矩阵或数组的数据集。的行X
对应于观察和列X
通常对应于变量。如果您通过多个数据集X1,…,XN
到crossval
,则所有数据集的行数必须相同。
数据类型:单身的
|双
|逻辑
|字符
|细绳
|细胞
|分类
y
- - - - - -响应数据响应数据,指定为列向量或字符数组。的行y
与观察结果一致y
必须具有与预测器数据相同的行数X
或X1,…,XN
.
数据类型:单身的
|双
|逻辑
|字符
|细绳
|细胞
|分类
预先
- - - - - -预测功能预测函数,指定为函数句柄。您必须将此函数创建为匿名函数、定义在包含其余代码的.m或.mlx文件末尾的函数或MATLAB上的文件®路径。
给定传递给的预测器数据的类型,此表描述所需的函数语法crossval
.
价值 | 预测数据 | 函数的语法 |
---|---|---|
@myfunction. |
X |
函数YFIT = myFunction(XTrain,YTrain,XTest)%计算预测响应......结束
|
@myfunction. |
X1,…,XN |
函数YFIT = myFunction(x1train,...,xntrain,ytrain,x1test,...,xntest)%计算预测响应...结束
|
例子:@ (Xtrain ytrain Xtest) (Xtest *回归(ytrain Xtrain));
数据类型:function_handle
有趣的
- - - - - -功能旨在要交叉验证的函数,指定为函数句柄。您必须将此函数创建为匿名函数、定义在包含其余代码的.m或.mlx文件末尾的函数或MATLAB路径上的文件。
此表介绍了所需的函数语法,但定为传递给的数据类型crossval
.
价值 | 数据 | 函数的语法 |
---|---|---|
@myfunction. |
X |
函数值= myfunction(Xtrain,Xtest) %结束
|
@myfunction. |
X1,…,XN |
函数值= myfunction(X1train,…,XNtrain,X1test,…,XNtest) %结束
|
数据类型:function_handle
指定可选的逗号分隔的对名称,值
参数。姓名
参数名和价值
为对应值。姓名
必须出现在引号内。可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家
.
crossval (mcr的量,物种,Predfun, @classf, KFold, 5,“分层”,物种)
指定计算分层的5倍交叉验证误分类率Classf.
具有预测数据的函数量
和响应变量物种
.
坚持
- - - - - -用于坚持验证的观测值的分数或数目[]
(默认)|(0,1)范围内的标量值|正整数标量划分
- - - - - -交叉验证分区[]
(默认)|cvpartition
分区对象交叉验证分区,指定为逗号分隔的对,由'划分'
和一个cvpartition
分区对象由cvpartition
.分区对象指定交叉验证的类型以及训练集和测试集的索引。
当你使用时crossval
,不能同时指定两者划分
和分层
.相反,在创建时直接指定分层分区cvpartition
分区对象。
选项
- - - - - -用于并行运行和设置随机流的选项用于并行运行计算和设置随机流的选项,指定为结构。创建选项
结构与statset
.此表列出了选项字段及其值。
字段名 | 价值 | 默认的 |
---|---|---|
UseParallel |
将此值设置为真正的 并行地运行计算。 |
假 |
UseSubstreams |
将此值设置为 若要重复计算,请设置 |
假 |
流 |
将此值指定为arandstream. 对象或包含此类对象的单元格数组。 |
如果没有指定流 ,然后crossval 使用默认流。 |
请注意
您需要并行计算工具箱™来并行运行计算。
例子:“选项”,statset (UseParallel,真的)
数据类型:结构体
犯错
- 均值平方误差或错误分类率均方误差或误分类率,返回为数字标量。错误的类型取决于标准
价值。
值
——损失值损失值,作为列向量或矩阵返回。每一行的值
对应的输出有趣的
用于训练和测试数据的一个分区。
如果返回的输出有趣的
是多维的,那么crossval
将输出重新设置为一行值
.例如,请参见使用交叉验证创建混淆矩阵.
一个好的实践是使用分层(见分层
)当您使用与分类算法的交叉验证时。否则,一些测试集可能不包括对所有类的观察。
预先
许多分类和回归函数允许您直接执行交叉验证。
当你使用拟合函数时,例如fitcsvm
,fitctree
,fitrtree
,您可以使用名称-值对参数指定交叉验证选项。或者,您可以首先使用这些fit函数创建模型,然后使用crossval
对象的功能。使用Kfoldloss.
和kfoldPredict
对象函数,用于计算已分区对象的损失和预测值。有关更多信息,请参见ClassificationPartitionedModel
和RegressionPartitionedModel
.
要并行运行,请指定“选项”
调用此函数时的名称-值参数,并设置“UseParallel”
字段的选项结构真正的
使用statset
.
例如:“选项”,statset (UseParallel,真的)
有关并行计算的更多信息,请参见运行MATLAB函数与自动并行支持万博1manbetx(并行计算工具箱).
您已经有了geänderte版本死亡Beispiels。Möchten您是谁? Änderungen öffnen?
Sie Haben AUF EINEN LINK GEKLICKT,DER DIESEM MATLAB-BEFEHL ONTSPRICHT:
Führen Sie den Befehl durch Eingabe in das MATLAB-Befehlsfenster aus。Webbrowser unterstützen keine MATLAB-Befehle。
你也可以从以下列表中选择一个网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。