我正在使用支持向量机-轻(在网站http://svmlight.joachims.org/)。我想问你一个问题。我有一句话“他很聪明,他是个好学生”。这个句子是一个肯定句。当我从这个句子创建一个单词列表时,我将有一个每个单词的索引列表,如下所示:{1 - he,2- is,3- smart,4- and,5- a,6- good,7- student}。然后,我按单词索引重写句子,如下所示:"1 2 3 4 1 2 5 6 7“。每个单词的值为"1:0.4 2:0.2 3:0.8 4:0.3 1:0.2 2:0.4 5:0.5 6:0.7 7:0.6“,根据列车文件的格式,单词的索引必须按索引号递增排序,因此我将其排列为"1 1:0.4 1:0.2 2:0.2 2:0.4 3:0.8 4:0.3 5:0.5 6:0.7 7:0.6”。但是,我得到一个错误:“功能必须按递增顺序排列!”当我运行svm_learn时。我注意到这个错误是因为我的句子有两个"he“单词和两个"is”单词。虽然您的训练文件,但每个特征只出现一次。我该如何解决这个问题?你能给我解释一下吗?我非常感谢你。
发布于 2016-05-15 05:28:50
同一功能不能有多个值。从你在问题中写的内容来看,我认为,这种情况的解决方案是忽略这样一个事实,即某些单词会出现两次,因为本质上这些单词在句子中具有不同的值。
你可以假设你在一个句子中有多少个单词就有多少个特征。第一个特征是句子中第一个单词的权重,第二个特征是句子中第二个单词的权重,第三个特征是句子中第三个单词的权重,依此类推。因此,对于您的示例,您将拥有一个特征向量[1:0.4 2:0.2 3:0.8 4:0.3 5:0.2 6:0.4 7:0.5 8:0.7 9:0.6]。这种方法的问题是不同的句子会有不同的长度。在这种情况下,SVMlight将假设每个句子的长度都是最长的一个,其余的值都是简单的零(这本质上是为输入中的特征提供索引的想法:在稀疏数据的情况下,这允许只提到具有非零值的特征)。话虽如此,如果数据中的第二句话恰好是“他不仅聪明,而且是个好学生”,那么第一句话的特征向量将被解释为:[1:0.4 2:0.2 3:0.8 4:0.3 5:0.2 6:0.4 7:0.5 8:0.7 9:0.6 10:0.0 11:0.0 12:0.0]。
另一种解决方案是像您一样创建一个“字典”,然后如果一个单词在一个句子中出现多次,则将该单词的值组合在一起。这可以通过取最大/最小值、平均值、总和、乘积等来完成。您可能希望组合这些功能的方式取决于应用程序的域。例如,如果您决定取一个单词的所有值的总和,则字典{1 - he, 2 - is, 3 - smart, 4 - and, 5 - a, 6 - good, 7 - student}的特征向量将为:1:0.6 2:0.6 3:0.8 4:0.3 5:0.5 6:0.7 7:0.6
https://stackoverflow.com/questions/36466915
复制相似问题