我想用svm来做监督式机器学习。我的项目是:给定奥巴马的几次演讲,以及罗姆尼的几次演讲,当我们输入一个未知的演讲时,分类器可以确定哪个演讲者发表了这篇演讲。
网站上的代码是这样写的:SVC、NuSVC和LinearSVC接受两个数组作为输入:一个数组X的大小为[n_samples, n_features]保存训练样本,另一个数组Y的大小为整数值, size [n_samples]保存训练样本的类标签:>>> 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]]
我是否应该将每个方括号中的第一个数字替换为标签"奥巴马"或"罗姆尼"?
2。
呢?y = [0, 1]
该组件应该用'Obama'或'Romney'替换吗?但根据上面的代码注释,它应该是整数。
3。关于clf.predict()
中的内容clf.predict([[2., 2.]])
不应该只是你从输入中提取的特征,然后分类器决定它属于哪个类别(奥巴马或罗姆尼)。为什么有两个组成部分?
问题1:没有。你的X应该包含你想用来预测谁发表演讲的信息。据推测,这将以某种方式从演讲文本中推导出来。看看文本特征提取的一些想法。
问题2:是的,因为y是你想要预测的,你想要预测是奥巴马还是罗姆尼。
问题#3:有两个组件,因为在这个例子中输入有两个特征。您的数据可能具有任意数量的特征。如果您使用文本数据来预测某些东西,通常会有很多特征(在最简单的情况下,文本中每个不同的单词有一个特征,尽管您可以通过删除一些单词来减少这个特征,例如"the"等频繁使用的功能词)。
我没有使用Python进行机器学习,但我相信list Y是我们的结果标签。您可能已经知道这一点——X是一个列表的列表,就像一个矩阵,称为特征。
对于文本挖掘,您从每个语音的文本中创建一个特征。这些特征成为训练支持向量机的输入。在训练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]