splitlabels
查找用于根据指定比例拆分标签的索引
语法
说明
当您处理机器学习或深度学习分类问题时,若希望将数据集划分为训练集、测试集和验证集,且各集中的标签值比例保持一致,请使用此函数。
示例
使用 fileread 函数阅读威廉·莎士比亚的十四行诗。从文本中提取所有元音,并将它们转换为小写。
sonnets = fileread("sonnets.txt"); vowels = lower(sonnets(regexp(sonnets,"[AEIOUaeiou]")))';
统计每个元音出现的次数。
cnts = countlabels(vowels)
cnts=5×3 table
Label Count Percent
_____ _____ _______
a 4940 18.368
e 9028 33.569
i 4895 18.201
o 5710 21.232
u 2321 8.6302
将元音分为三个子集:训练集(每个元音包含 500 个样本)、验证集(每个元音包含 300 个样本)以及测试集(剩余样本)。在前两组中,所有元音的权重均等,但在第三组中则并非如此。
spltn = splitlabels(vowels,[500 300]); for kj = 1:length(spltn) cntsn{kj} = countlabels(vowels(spltn{kj})); end cntsn{:}
ans=5×3 table
Label Count Percent
_____ _____ _______
a 500 20
e 500 20
i 500 20
o 500 20
u 500 20
ans=5×3 table
Label Count Percent
_____ _____ _______
a 300 20
e 300 20
i 300 20
o 300 20
u 300 20
ans=5×3 table
Label Count Percent
_____ _____ _______
a 4140 18.083
e 8228 35.94
i 4095 17.887
o 4910 21.447
u 1521 6.6437
将元音数据划分为三部分:包含 50% 样本的训练集、包含另外 30% 样本的验证集,以及包含剩余样本的测试集。在所有三个集合中,所有元音的权重均相同。
spltp = splitlabels(vowels,[0.5 0.3]); for kj = 1:length(spltp) cntsp{kj} = countlabels(vowels(spltp{kj})); end cntsp{:}
ans=5×3 table
Label Count Percent
_____ _____ _______
a 2470 18.367
e 4514 33.566
i 2448 18.203
o 2855 21.23
u 1161 8.6333
ans=5×3 table
Label Count Percent
_____ _____ _______
a 1482 18.371
e 2708 33.569
i 1468 18.198
o 1713 21.235
u 696 8.6277
ans=5×3 table
Label Count Percent
_____ _____ _______
a 988 18.368
e 1806 33.575
i 979 18.2
o 1142 21.231
u 464 8.6261
使用 fileread 函数阅读威廉·莎士比亚的十四行诗。从文本中删除所有非字母字符,并将文本转换为小写。
sonnets = fileread("sonnets.txt"); letters = lower(sonnets(regexp(sonnets,"[A-z]")))';
将这些字母分为辅音和元音两类,并根据结果制作一张表格。显示该表的前几行。
type = repmat("consonant",size(letters)); type(regexp(letters',"[aeiou]")) = "vowel"; T = table(letters,type,'VariableNames',["Letter" "Type"]); head(T)
Letter Type
______ ___________
t "consonant"
h "consonant"
e "vowel"
s "consonant"
o "vowel"
n "consonant"
n "consonant"
e "vowel"
显示每个类别的实例数量。
cnt = countlabels(T,'TableVariable',"Type")
cnt=2×3 table
Type Count Percent
_________ _____ _______
consonant 46516 63.365
vowel 26894 36.635
将该表分为两组,一组包含 60% 的辅音和元音,另一组包含 40%。显示每个类别的实例数量。
splt = splitlabels(T,0.6,'TableVariable',"Type"); sixty = countlabels(T(splt{1},:),'TableVariable',"Type")
sixty=2×3 table
Type Count Percent
_________ _____ _______
consonant 27910 63.366
vowel 16136 36.634
forty = countlabels(T(splt{2},:),'TableVariable',"Type")forty=2×3 table
Type Count Percent
_________ _____ _______
consonant 18606 63.363
vowel 10758 36.637
将表格分为两组,一组包含每个特定字母的 60%,另一组包含 40%。请排除字母 y,它有时作为辅音,有时作为元音。显示每个类别的实例数量。
splt = splitlabels(T,0.6,'Exclude',"y"); sixti = countlabels(T(splt{1},:),'TableVariable',"Type")
sixti=2×3 table
Type Count Percent
_________ _____ _______
consonant 26719 62.346
vowel 16137 37.654
forti = countlabels(T(splt{2},:),'TableVariable',"Type")forti=2×3 table
Type Count Percent
_________ _____ _______
consonant 17813 62.349
vowel 10757 37.651
将表格分成两组,每组大小相同。仅包含字母 e 和 s。将这些集合打乱顺序。
halves = splitlabels(T,0.5,'randomized','Include',["e" "s"]); cnt = countlabels(T(halves{1},:))
cnt=2×3 table
Letter Count Percent
______ _____ _______
e 4514 64.385
s 2497 35.615
创建一个由 100 个高斯随机数组成的数据集。将其中 40 个数值标记为 A,30 个标记为 B,另外 30 个标记为 C。将数据存储在一个包含两个数据存储的组合数据存储中。第一个数据存储中包含数据,第二个数据存储中包含标签。
dsData = arrayDatastore(randn(100,1)); dsLabels = arrayDatastore([repmat("A",40,1); ... repmat("B",30,1); repmat("C",30,1)]); dsDataset = combine(dsData,dsLabels); cnt = countlabels(dsDataset,UnderlyingDatastoreIndex=2)
cnt=3×3 table
Label Count Percent
_____ _____ _______
A 40 40
B 30 30
C 30 30
将数据集分成两部分,其中一部分包含 60% 的数值,另一部分包含剩余的数值。
splitIndices = splitlabels(dsDataset,0.6,UnderlyingDatastoreIndex=2);
dsDataset1 = subset(dsDataset,splitIndices{1});
cnt1 = countlabels(dsDataset1,UnderlyingDatastoreIndex=2)cnt1=3×3 table
Label Count Percent
_____ _____ _______
A 24 40
B 18 30
C 18 30
dsDataset2 = subset(dsDataset,splitIndices{2});
cnt2 = countlabels(dsDataset2,UnderlyingDatastoreIndex=2)cnt2=3×3 table
Label Count Percent
_____ _____ _______
A 16 40
B 12 30
C 12 30
输入参数
输入标签来源,请从以下选项中选择其一:
一个分类向量。
字符串向量或字符向量元胞数组。
一个数值向量或由数值标量组成的元胞数组。
一个逻辑向量或由逻辑标量组成的元胞数组。
一个包含上述任一数据类型的变量的表。
一个数据存储,其
readall函数返回上述任一数据类型。一个
CombinedDatastore对象,其包含一个底层数据存储,该数据存储的readall函数返回上述任一数据类型。在这种情况下,您必须指定包含标签值的基礎数据存储的索引。
lblsrc 必须包含可转换为具有离散类别集的向量的标签。
示例: lblsrc = categorical(["B" "C" "A" "E" "B" "A" "A" "B" "C" "A"],["A" "B" "C" "D"]) 将标签源定义为一个包含十个样本的分类向量,共有四个类别:A、B、C 和 D。
示例: lblsrc = [0 7 2 5 11 17 15 7 7 11] 将标签源创建为一个包含十个样本的数值向量。
数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char | string | table | cell | categorical
标签的比例或数量,指定为整数标量、取值范围在 (0, 1) 之间的标量、整数向量或分数向量。
如果
p是标量,则splitlabels会找到两个拆分索引集,并在idxs中返回一个包含两个元素的元胞数组。如果
p是一个整数,那么idxs的第一个元素包含一个索引向量,该向量指向每个标签类别的前p个值。idxs的第二个元素包含指向每个标签类别中剩余值的索引。如果
p是 (0, 1) 范围内的一个值,且lblsrc在第 i 个类别中有 Ki 个元素,那么idxs的第一个元素包含一个索引向量,该向量指向每个标签类别中前p× Ki 个值的索引。idxs的第二个元素包含每个标签类别中其余值的索引。
如果
p是一个包含 N 个形式为 p1, p2, …, pN 的元素的向量,则splitlabels会查找 N + 1 个拆分索引集,并在idxs中返回一个包含 (N + 1) 个元素的元胞数组。如果
p是一个整数向量,那么idxs的第一个元素是一个索引向量,指向每个标签类别的前 p1 个值;idxs的下一个元素包含每个标签类别的接下来的 p2 个值,以此类推。idxs中的最后一个元素包含每个标签类别的剩余索引。如果
p是一个分数向量,且lblsrc包含 Ki 个属于第 i 类别的元素,那么idxs的第一个元素是一个索引向量,它将每个类别的前 p1 × Ki 个值拼接在一起,idxs的下一个元素包含每个标签类别的接下来 p2 × Ki 个值,以此类推。idxs中的最后一个元素包含每个标签类别的剩余索引。
注意
如果
p包含分数,则其各元素之和不得大于一。如果
p包含若干个标签值,则其各元素之和不得大于任何一个标签类别中可用的最小标签数。
数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
名称-值参数
将可选参量对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量之后,但对各个参量对组的顺序没有要求。
如果使用的是 R2021a 之前的版本,请使用逗号分隔每个名称和值,并用引号将 Name 引起来。
示例: 'TableVariable',"AreaCode",'Exclude',["617" "508"] 指定该函数应根据电话区号对标签进行划分,并排除来自波士顿和纳蒂克的号码。
要包含在索引集中标签,指定为标签类别的向量或元胞数组。使用此参量指定的类别必须与 lblsrc 中的标签属于同一类型。向量或元胞数组中的每个类别都必须与 lblsrc 中的某个标签类别相匹配。
要从索引集 中排除的标签,指定为标签类别的向量或元胞数组。使用此参量指定的类别必须与 lblsrc 中的标签属于同一类型。向量或元胞数组中的每个类别都必须与 lblsrc 中的某个标签类别相匹配。
要读取的表变量,指定为字符向量或字符串标量。如果未指定此参量,则 splitlabels 将使用第一个表变量。
底层数据存储索引,指定为一个整数标量。当 lblsrc 是一个 CombinedDatastore 对象时,此参量成立。splitlabels 统计通过 lblsrc 的 UnderlyingDatastores 属性获取的数据存储中的标签数量。
输出参量
拆分索引,以元胞数组形式返回。
版本历史记录
在 R2021a 中推出
另请参阅
countlabels (Signal Processing Toolbox) | filenames2labels (Signal Processing Toolbox) | folders2labels (Signal Processing Toolbox)
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)