使用SVM预测带标签的文本

时间:2017-11-26 23:44:24

标签: machine-learning scikit-learn svm supervised-learning

我在csv文件中有以下格式的数据

Name     Power   Money
Jon      Red     30
George   blue    20
Tom      Red     40
Bob      purple  10

我认为像" jon"," red"和" 30作为输入。每个输入作为标签。例如输入[jon,george,tom,bob]有标签" name"。输入[红色,蓝色,紫色]有标签" power"。这基本上就是我训练数据的方式。我有一堆值,每个值都映射到一个标签。

现在我想使用svm根据我的训练数据训练模型,以准确识别给定的新输入什么是正确的标签。例如,如果提供的输入是" 444" ,该模型应该足够聪明,可以将其归类为" Money"标签

我已经安装了py并且还安装了sklearn。我也完成了以下tutorial。我只是不确定如何准备输入数据来训练模型。

如果我说了一些听起来不对劲或奇怪的东西,我也是机器学习的新手,请指出它,因为我很乐意学习正确的。

1 个答案:

答案 0 :(得分:1)

根据您当前的问题如何制定,您不会处理典型的机器学习问题。目前,您有列式数据:

Name     Power   Money
Jon      Red     30
George   blue    20
Tom      Red     40
Bob      purple  10

如果用户现在输入" Jon",您知道它将是" Name",通过简单的哈希映射查找,例如:

hashmap["Jon"] -> "Name"

人们说这不是机器学习问题的主要原因是你的分类"或"预测"由列名定义。机器学习问题(通常)将预测一些响应变量。例如,想象一下你已经问过这个:

Name     Power   Money  Bought_item
Jon      Red     30     yes
George   blue    20     no
Tom      Red     40     no
Bob      purple  10     yes

我们可以使用SVM使用功能名称电源 Money 来构建模型以预测 Bought_item

你的问题看起来更像是:

Feature1 Feature2 Feature3 Category
1.0      foo      bar      Name
3.1      bar      foo      Name
23.4     abc      def      Money
22.22    afb      dad      Power
223.1    dad      vxv      Money

然后使用 Feature1 Feature2 Feature3 来预测类别。目前,您的问题没有为任何人提供足够的信息,让他们真正了解您的需求或您需要以这种方式重新制定,或考虑采用无监督的方法。

修改

所以以这种方式框架:

Name     Power   Money   Label
Jon      Red     30      Foo
George   blue    20      Bar
Tom      Red     40      Foo
Bob      purple  10      Bar

OneHotEncode名称和电源,因此您现在每个名称都有一个变量,可以是0/1。

标准化Money,使其范围介于大约-1/1之间。

LabelEncode您的标签,使它们为0,1,2,3,4,5,6等。

使用One vs. All分类器http://scikit-learn.org/stable/modules/generated/sklearn.multiclass.OneVsRestClassifier.html