Machine learning 多类Logistic回归中八度向量(数据集)的矢量化标记检测

Machine learning 多类Logistic回归中八度向量(数据集)的矢量化标记检测,machine-learning,vectorization,octave,logistic-regression,multiclass-classification,Machine Learning,Vectorization,Octave,Logistic Regression,Multiclass Classification,在使用多个特征和多个类别(我选择的数据集有类别1、2、3、4和5)对类别在1和5之间的m(>100)样本数据进行逻辑回归时。我试图找出唯一标签/类的数量,并将它们作为向量。我可以用Y作为大小为(m,1)的列向量来编写下面的代码 这给了我向量Y中唯一标签的列表。然而,我想知道是否有更好的方法来编写这段代码(上面的代码行在我看来很幼稚),特别是通过向量化。欢迎提出任何建议。谢谢。如果代码的目的只是生成Y中唯一值的列表,那么您可以使用unique(Y)。例如: >> m = 10; >

在使用多个特征和多个类别(我选择的数据集有类别1、2、3、4和5)对类别在1和5之间的m(>100)样本数据进行逻辑回归时。我试图找出唯一标签/类的数量,并将它们作为向量。我可以用Y作为大小为(m,1)的列向量来编写下面的代码


这给了我向量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    
现在,函数的输出按它们在列表中的首次出现顺序排列。e、 g

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
都可以很好地实现速度矢量化。删除类的重复扩展将防止重复变量复制,如果您有大量的类,这将带来巨大的开销。

简单地说,第一眼看到类的小样本和所需的输出会有所帮助,您不断扩展
。对于大型数据集,这可能会导致显著的代码减速。如果您可以事先知道
类的最终大小,最好预先分配大小。如果你能给它设定一个上限,你可以预先分配,然后修剪它作为你的最后一步。(内存效率有点低,但可能比重复扩展快得多)@NickJ我没听清你想说什么。我已经列出了上面的课程。再次列出(1,2,3,4,5)。由于此示例的类大小仅为5,因此类数组不会不断扩展,而是只有在找到新的类标签时才会扩展。因此,在代码末尾,该数组中只存在5个no。我运行了这个,它正在工作。愿意看看这是否可以矢量化!在循环中的任何时候,您都有类似于a=[a,i]的东西,每次迭代都将扩展a。这是可行的,但成本很高,可能会导致程序严重放缓,特别是对于大型a或大型m。既然矢量化的重点是速度,你也应该注意其他的速度陷阱。是的,我也这么认为是为了寻找一种便宜的方法来实现这一点。谢谢。太好了,这就是我要找的。我应该知道独特和排序。谢谢
>> [sortedClasses idx] = unique(Y,"first")
sortedClasses =

   1
   2
   4
   5

idx =

   2
   5
   4
   1

>> unsortedClasess = Y(sort(idx))
unsortedClasess =

   5
   1
   4
   2