Python:关于SVM编码格式的问题

时间:2014-07-08 17:47:29

标签: python machine-learning scikit-learn svm

我想用svm做有监督的机器学习。我的项目是:鉴于奥巴马的几次演讲以及罗姆尼的几次演讲,分类器可以在我们输入未知语音时决定哪位演讲者发言。

网站上的代码写得如下:SVC,NuSVC和LinearSVC将两个数组作为输入:大小 [n_samples,n_features] 的数组 X 举行培训样本和整数值 size [n_samples] 的数组 Y ,包含训练样本的类标签:

>>> from sklearn import svm
>>> X = [[0, 0], [1, 1]]
>>> y = [0, 1]
>>> clf = svm.SVC()
>>> clf.fit(X, y)  
SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, degree=3,
gamma=0.0, kernel='rbf', max_iter=-1, probability=False, random_state=None,
shrinking=True, tol=0.001, verbose=False)

在拟合之后,该模型可用于预测新值:

>>> clf.predict([[2., 2.]])
array([1])

我的问题 1.在我的项目中,

X = [[0, 0], [1, 1]]

我应该用标签'Obama'或'Romeny'替换每个方括号中的第一个数字。

2.如何

y = [0, 1]

该组件应由奥巴马'还是'罗姆尼'或者?但它应该是基于上面代码注释的整数。

3.关于clf.predict()中的内容

clf.predict([[2., 2.]])

不应该只是您输入的提取特征,然后分类器决定它属于哪个类别(奥巴马或罗姆尼)。为什么有两个组件?

2 个答案:

答案 0 :(得分:2)

问题#1:否。您的X应包含您想要用来预测谁发言的信息。据推测,这将从演讲文本中以某种方式进行讨论。请查看the text feature extraction了解一些想法。

问题2:是的,因为y是你想要预测的,你想要预测它是奥巴马还是罗姆尼。

问题3:有两个组件,因为在该示例中输入有两个功能。您的数据可能包含任意数量的功能。如果您正在使用文本数据来预测某些内容,那么通常会有很多功能(在最简单的情况下,文本中每个不同单词都有一个功能,尽管您可以通过删除某些单词来减少这些功能,例如频繁的功能例如"")。

答案 1 :(得分:0)

我没有使用Python进行机器学习,但我相信列表 Y 是结果标签。你可能已经知道了这一点 - X 是一个列表,就像一个矩阵,叫做 features

对于文本挖掘,您可以根据每个语音的文本创建一个功能。这些功能成为用于训练SVM的输入。在培训SVM之前,请先了解如何创建功能。一种简单的文本挖掘技术就是词袋。请在此处查看:http://en.wikipedia.org/wiki/Bag_of_words

如果使用词袋,您的特征向量可能如下所示:

[[1,2,1,1,2,0,0,0,1,1],[1,1,1,1,0,1,1,1,0,0]]

第一个列表代表一个语音中的单词,第二个列表代表另一个语音中的单词。训练集中的每个语音都有一个功能。

您的 Y 向量是结果。让我们说" 0"意味着失败者"和" 1"意味着赢家"。如果第一个演讲是赢家而第二个演讲是输家,那么 Y 将是:

[1,0]