多 class 逻辑回归的 Octave 中向量(数据集)的向量化标签检测
Vectorizing labels detection of a vector (dataset) in Octave for multi class Logistic regression
在 m 的 类(我选择的数据集有 类 1、2、3、4 和 5)的多特征和多特征实现逻辑回归时 (>100) 类 介于 1 和 5 之间的样本数据。我试图找出编号。独特的 labels/classes 并将它们作为向量。我可以用 Y 作为大小为 (m,1)
的列向量来编写下面的代码
classes = [Y(1,1)]; #Initializing classes
for i = 2:m
count = 0;
for j = 1:length(classes)
if Y(i,1) == classes(j,1)
count = count + 1;
end;
end
if count ==0
classes = [classes; Y(i,1)];
end
end
这给了我向量 Y 中唯一标签的列表。但是,我想知道是否有更好的方法来编写这段代码(上面的代码行对我来说显得幼稚),尤其是通过向量化。欢迎提出任何建议。谢谢
看来,如果代码的目的只是生成 Y 中唯一值的列表,您可以只使用 unique(Y)
。例如:
>> m = 10;
>> Y = floor(rand(m,1)*5+1)
Y =
5
1
5
4
2
2
1
5
1
4
>> unique(Y)
ans =
1
2
4
5
现在,函数的输出按照它们在列表中首次出现的顺序排列。例如,
classes =
5
1
4
2
如果这很重要,您将需要这样的东西:
>> [sortedClasses idx] = unique(Y,"first")
sortedClasses =
1
2
4
5
idx =
2
5
4
1
>> unsortedClasess = Y(sort(idx))
unsortedClasess =
5
1
4
2
unique
和 sort
都在速度方面得到了很好的向量化。并且删除 classes
的重复扩展将防止重复的变量复制,如果你有大量的 类.
,那将带来显着的开销
在 m 的 类(我选择的数据集有 类 1、2、3、4 和 5)的多特征和多特征实现逻辑回归时 (>100) 类 介于 1 和 5 之间的样本数据。我试图找出编号。独特的 labels/classes 并将它们作为向量。我可以用 Y 作为大小为 (m,1)
的列向量来编写下面的代码classes = [Y(1,1)]; #Initializing classes
for i = 2:m
count = 0;
for j = 1:length(classes)
if Y(i,1) == classes(j,1)
count = count + 1;
end;
end
if count ==0
classes = [classes; Y(i,1)];
end
end
这给了我向量 Y 中唯一标签的列表。但是,我想知道是否有更好的方法来编写这段代码(上面的代码行对我来说显得幼稚),尤其是通过向量化。欢迎提出任何建议。谢谢
看来,如果代码的目的只是生成 Y 中唯一值的列表,您可以只使用 unique(Y)
。例如:
>> m = 10;
>> Y = floor(rand(m,1)*5+1)
Y =
5
1
5
4
2
2
1
5
1
4
>> unique(Y)
ans =
1
2
4
5
现在,函数的输出按照它们在列表中首次出现的顺序排列。例如,
classes =
5
1
4
2
如果这很重要,您将需要这样的东西:
>> [sortedClasses idx] = unique(Y,"first")
sortedClasses =
1
2
4
5
idx =
2
5
4
1
>> unsortedClasess = Y(sort(idx))
unsortedClasess =
5
1
4
2
unique
和 sort
都在速度方面得到了很好的向量化。并且删除 classes
的重复扩展将防止重复的变量复制,如果你有大量的 类.