我正在尝试使用机器学习算法将 30000 个未标记的句子分类为 2 个标签(例如 pos 和 neg)。为此,我选择了 100 个肯定句和 100 个否定句作为训练集。然后,我使用 SVM 训练 200 个选定的句子以创建一个经过训练的模型。最后,用训练好的模型对剩余的29800个未标记的句子进行分类。
但是,我相信,当训练的模型对剩余的 29800 个未标记的句子进行分类时,一定有一些未知的单词没有训练到我创建的模型中。可能有些句子不包含任何经过训练的单词以及如何对其进行分类。以下代码使用 scikit 对句子进行了分类。
import numpy as np
import data
from sklearn import metrics
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.svm import SVC
from sklearn.pipeline import Pipeline
data = data.Data()
allSent = data.getPosSent() + data.getNegSent()
stopWords = data.getStopwords()
Dataset_X = []
Dataset_Y = []
for meta, label in allSent:
Dataset_X.append(meta)
Dataset_Y.append(label)
X_train = np.array(Dataset_X)
Y_train = np.array(Dataset_Y)
classifier_SVC = Pipeline([
('vectorizer', CountVectorizer()),
('classifier', SVC(kernel='rbf', C=10000000, gamma=1e-08))
])
classifier_SVC.fit(X_train, Y_train)
predSent = data.getPredSent()
predSentData = []
for i in range(len(predSent)):
predSentData.append(predSent[i])
pred = np.array(predSentData)
for i in range(len(predSent)):
print classifier_SVC.predict(pred)[i]
总之,我的问题是
- 分类
- 器如何对一个全新的句子进行分类,这意味着训练的模型从未见过新句子中包含的任何单词。
- 我需要多少句话来训练一个模型才能说它足够了?换句话说,我已经训练了 200 个,但我不知道它是否需要更多数据。
1)我们分别考虑y_i
、x_i
和c_i
是y
、x
和第i
个支持向量的权重。对于给定的输入 z,我们计算predict = sgn(sum(c_i*y_i*K(x_i,z))+b)
其中 b 是偏差,K
是内核(代码中的 rbf 内核)。如果z
是一个全新的句子,我们得到predict = sgn(sum(c_i*y_i*exp(-gamma*x_i**2))*exp(-gamma*z**2)+b)
2)这取决于您的数据。你检查一下有多少句子覆盖了多少%的单词?或者,如果您有 200 多个标记数据,您评估训练句子数量与预测分数之间的关系怎么样?