add*_*ons 3 matlab machine-learning cross-validation
我有一个矩阵(我想在MatLab中你称之为结构)或数据结构:
data: [150x4 double]
labels: [150x1 double]
Run Code Online (Sandbox Code Playgroud)
这是我的matrix.data看起来像假设我用矩阵的名称加载我的文件:
5.1000 3.5000 1.4000 0.2000
4.9000 3.0000 1.4000 0.2000
4.7000 3.2000 1.3000 0.2000
4.6000 3.1000 1.5000 0.2000
5.0000 3.6000 1.4000 0.2000
5.4000 3.9000 1.7000 0.4000
4.6000 3.4000 1.4000 0.3000
5.0000 3.4000 1.5000 0.2000
4.4000 2.9000 1.4000 0.2000
4.9000 3.1000 1.5000 0.1000
5.4000 3.7000 1.5000 0.2000
4.8000 3.4000 1.6000 0.2000
4.8000 3.0000 1.4000 0.1000
4.3000 3.0000 1.1000 0.1000
5.8000 4.0000 1.2000 0.2000
5.7000 4.4000 1.5000 0.4000
5.4000 3.9000 1.3000 0.4000
5.1000 3.5000 1.4000 0.3000
5.7000 3.8000 1.7000 0.3000
5.1000 3.8000 1.5000 0.3000
Run Code Online (Sandbox Code Playgroud)
这是我的matrix.labels看起来像
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
Run Code Online (Sandbox Code Playgroud)
我试图在不使用MatLab中的任何现有功能的情况下创建10个交叉折叠验证,并且由于我对MatLab知识非常有限,因此我无法继续使用我所掌握的功能.任何帮助都会很棒.
这是我到目前为止所做的,我相信这可能不是matlab方式,但我对matlab很新.
function[output] = fisher(dataFile, number_of_folds)
data = load(dataFile);
%create random permutation indx
idx = randperm(150);
output = data.data(idx(1:15),:);
end
Run Code Online (Sandbox Code Playgroud)
以下是我对此交叉验证的看法.我使用魔法创建虚拟数据(10)我也随机创建标签.想法如下,我们得到我们的数据和标签,并将它们与随机列结合起来.考虑遵循虚拟代码.
>> data = magic(4)
data =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
>> dataRowNumber = size(data,1)
dataRowNumber =
4
>> randomColumn = rand(dataRowNumber,1)
randomColumn =
0.8147
0.9058
0.1270
0.9134
>> X = [ randomColumn data]
X =
0.8147 16.0000 2.0000 3.0000 13.0000
0.9058 5.0000 11.0000 10.0000 8.0000
0.1270 9.0000 7.0000 6.0000 12.0000
0.9134 4.0000 14.0000 15.0000 1.0000
Run Code Online (Sandbox Code Playgroud)
如果我们根据第1列对X进行排序,我们会随机排序数据.这将给我们交叉验证随机性.然后接下来就是根据交叉验证百分比划分X. 一个案例很容易实现这一点.让我们考虑%75%是火车案例,%25%是测试案例.我们这里的大小是4,然后是3/4 =%75和1/4是%25.
testDataset = X(1,:)
trainDataset = X(2:4,:)
Run Code Online (Sandbox Code Playgroud)
但是对于N交叉褶皱来说,实现这一点要困难得多.因为我们需要做N次.对于循环是必要的.适用于5个交叉折叠.我得到了,在第一个f
以下代码是此过程的示例:
data = magic(10);
dataRowNumber = size(data,1);
labels= rand(dataRowNumber,1) > 0.5;
randomColumn = rand(dataRowNumber,1);
X = [ randomColumn data labels];
SortedData = sort(X,1);
crossValidationFolds = 5;
numberOfRowsPerFold = dataRowNumber / crossValidationFolds;
crossValidationTrainData = [];
crossValidationTestData = [];
for startOfRow = 1:numberOfRowsPerFold:dataRowNumber
testRows = startOfRow:startOfRow+numberOfRowsPerFold-1;
if (startOfRow == 1)
trainRows = [max(testRows)+1:dataRowNumber];
else
trainRows = [1:startOfRow-1 max(testRows)+1:dataRowNumber];
end
crossValidationTrainData = [crossValidationTrainData ; SortedData(trainRows ,:)];
crossValidationTestData = [crossValidationTestData ;SortedData(testRows ,:)];
end
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
16751 次 |
最近记录: |