估计损失使用交叉验证
函数的执行10倍交叉验证值
= crossval (有趣的
,X
)有趣的
应用中的数据X
。的行X
对应于观测的列X
对应的变量。
有关更多信息,请参见广义交叉验证步骤的乐趣。
计算一个回归模型的均方误差通过使用10倍交叉验证。
加载carsmall
数据集。把加速、马力、重量,英里/加仑(MPG)值矩阵数据
。包含删除任何行南
值。
负载carsmall数据=(加速度功率重量MPG);数据(任何(isnan(数据),2),:)= [];
指定的最后一列数据
,对应于英里/加仑
响应变量y
。指定的其他列数据
预测数据X
。添加一个列的X
当你回归函数使用回归
在这个例子中。
注意:回归
是有用的,当你只需要系数估计或回归模型的残差。如果你需要进一步调查合身的回归模型,创建一个对象通过使用线性回归模型fitlm
。使用的一个例子fitlm
和crossval
,请参阅使用交叉验证计算平均绝对误差。
(y =数据:4);X =[(长度(y), 1)的数据(: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)
呃= 0.1100
这段代码创建函数classf
。
函数pred = classf (X1train X2train、X3train ytrain, X1test, X2test, X3test) Xtrain =表(X1train、X2train X3train, ytrain,…“VariableNames”,{舒张压的,“性别”,“收缩”,“抽烟”});Xtest =表(X1test X2test X3test,…“VariableNames”,{舒张压的,“性别”,“收缩”});modelspec =“吸烟者~舒张期+性别+收缩”;mdl = fitglm (Xtrain modelspec,“分布”,“二”);Xtest yfit =预测(mdl);pred = (yfit > 0.5);结束
对于一个给定数量的集群,计算旨在观察之间的距离平方的总和及其最近的聚类中心。比较结果为一个通过十集群。
加载fisheriris
数据集。X
是矩阵量
花,它包含测量150个不同的花。
负载fisheririsX =量;
创建自定义函数clustf
(如图所示的这个例子)。这个函数执行以下步骤:
标准化的训练数据。
单独的训练数据k
集群。
将测试数据使用训练数据平均值和标准偏差。
计算每个测试数据点距离最近的聚类中心,或质心。
计算距离的平方的总和。
注意:如果你使用现场脚本文件对于本例,clustf
功能已经包含在文件的末尾。否则,您需要创建函数的m文件或将它添加在MATLAB®文件路径。
创建一个为
循环指定集群的数量k
为每个迭代。对于每一个固定数量的集群,通过相应的clustf
函数crossval
。因为crossval
默认执行10倍交叉验证,软件计算10距离平方的,一个为每个分区的训练和测试数据。这些值的总和;结果是旨在距离平方的总和给定数量的集群。
rng (“默认”)%的再现性cvdist = 0 (5、1);为k = 1:10有趣= @ (Xtrain Xtest) clustf (Xtrain Xtest k);距离= crossval(有趣,X);cvdist (k) =总和(距离);结束
画出旨在距离平方之和为每个集群的数量。
情节(cvdist)包含(集群的数量)ylabel (“简历距离平方的总和”)
一般而言,在确定使用多少集群,考虑集群的最大数量,对应于一个旨在大幅降低距离平方的总和。对于这个示例,使用两个或三个集群似乎是合适的,但是使用不超过三个集群。
这段代码创建函数clustf
。
函数距离= clustf (Xtrain Xtest k) [Ztrain、Zmean Zstd] = zscore (Xtrain);[~ C] = kmeans (Ztrain k);% k创建集群中兴通讯= (Xtest-Zmean)。/ Zstd;d = pdist2 (C,中兴通讯,“欧几里得”,“最小”1);距离=总和(d。^ 2);结束
计算的平均绝对误差回归模型通过使用10倍交叉验证。
加载carsmall
指定数据集加速度
和位移
预测和变量重量
变量的响应。
负载carsmallX1 =加速度;X2 =位移;y =重量;
创建自定义函数regf
(如图所示的这个例子)。这个函数符合回归模型训练数据,然后计算测试集预测汽车重量。功能比较了预测汽车重量值真实值,然后计算平均绝对误差(MAE)和梅调整范围的测试集汽车重量。
注意:如果你使用现场脚本文件对于本例,regf
功能已经包含在文件的末尾。否则,您需要创建这个函数的m文件或将它添加在MATLAB®文件路径。
默认情况下,crossval
执行10倍交叉验证。每10个训练集和测试集的分区的数据X1
,X2
,y
,计算出美和调整美值使用regf
函数。发现平均美和平均调整美。
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
。
函数错误= regf (X1train X2train、ytrain X1test, X2test,欧美)tbltrain =表(X1train、X2train ytrain,…“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}{“癣”}{' virginica '}
创建一个函数处理命名函数
一个函数,完成以下步骤:
在训练数据(Xtrain
和ytrain
)和测试数据(Xtest
和欧美
)。
使用训练数据来创建一个分类新数据的判别分析模型(Xtest
)。创建这个模型和分类新数据使用分类
函数。
比较真实的测试数据类(欧美
)预测测试数据值,并创建一个混淆矩阵的结果通过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
。
confusionchart (cvMat顺序)
标准
- - - - - -类型的错误估计mse的
|“宏”
类型的错误估计,指定为mse的
或“宏”
。
价值 | 描述 |
---|---|
mse的 |
均方误差(MSE)——适合回归算法 |
“宏” |
误分类率,或观察分类错误的比例——只适合分类算法 |
X
- - - - - -数据集数据集,指定为一个列向量,矩阵,或数组。的行X
对应于观测的列X
一般对应变量。如果你通过多个数据集X1,…, XN
来crossval
,那么所有的数据集都必须有相同的行数。
数据类型:单
|双
|逻辑
|字符
|字符串
|细胞
|分类
y
- - - - - -响应数据响应数据,指定为一个列向量或字符数组。的行y
对应于观测y
必须有相同的行数预测数据X
或X1,…, XN
。
数据类型:单
|双
|逻辑
|字符
|字符串
|细胞
|分类
predfun
- - - - - -预测功能预测函数,指定为一个函数处理。您必须创建一个匿名函数,这个函数定义一个函数结束时00或.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
有趣的
- - - - - -功能旨在旨在函数,指定为一个函数处理。您必须创建一个匿名函数,这个函数定义一个函数结束时00或.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 |
将这个值设置为 计算重复性良好 |
假 |
流 |
这个值指定为一个RandStream 对象或一个单元阵列组成的一个这样的对象。 |
如果你不指定流 ,然后crossval 使用默认的流。 |
请注意
你需要并行计算工具箱™运行并行计算。
例子:“选项”,statset (UseParallel,真的)
数据类型:结构体
犯错
均方误差或错误分类率均方误差或错误分类率,作为数字返回标量。取决于类型的错误标准
价值。
值
——损失值损失值,返回为一个列向量或矩阵。每一行的值
对应的输出有趣的
一个分区的训练和测试数据。
如果返回的输出有趣的
是多维的,那么crossval
重塑的输出适合成一行值
。例如,看到的使用交叉验证创建混淆矩阵。
一个良好的实践是使用分层(见分层
)当你使用交叉验证与分类算法。否则,某些测试集可能不包括所有类的观察。
predfun
许多分类和回归函数允许您执行直接交叉验证。
当你使用等功能fitcsvm
,fitctree
,fitrtree
,您可以通过使用名称-值对参数指定交叉验证选项。或者,你可以用这些适应函数首先创建模型,然后创建一个分区的对象使用crossval
对象的功能。使用kfoldLoss
和kfoldPredict
对象功能分区计算损失和预期值对象。有关更多信息,请参见ClassificationPartitionedModel
和RegressionPartitionedModel
。
并行运行,指定“选项”
名称-值参数在调用这个函数,设置“UseParallel”
选择结构领域真正的
使用statset
。
例如:“选项”,statset (UseParallel,真的)
关于并行计算的更多信息,请参阅MATLAB函数自动并行支持运行金宝app(并行计算工具箱)。
如果dispone di una versione modificata di questo esempio。Desideri aprire questo esempio con le modifiche星期二吗?
海脂肪clic苏联合国collegamento切corrisponde questo第一MATLAB:
Esegui il第一inserendolo所以nella隙缝di第一MATLAB。我浏览器web非supportano金宝app comandi MATLAB。
你也可以从下面的列表中选择一个网站:
选择中国网站(中文或英文)最佳站点的性能。其他MathWorks国家网站不优化的访问你的位置。