分类HTTP帖子对象的最便宜方法

时间:2016-10-27 02:56:32

标签: algorithm go machine-learning svm text-classification

我可以使用SciPy对我的机器上的文本进行分类,但我需要在实时或近实时对HTTP POST请求中的字符串对象进行分类。如果我的目标是高并发性,接近实时输出和小内存占用,我应该研究哪些算法?我想我可以通过Go中的支持向量机(SVM)实现,但这是我用例的最佳算法吗?

1 个答案:

答案 0 :(得分:1)

是的,SVM(带有线性内核)应该是一个很好的起点。您可以使用scikit-learn(我相信它包裹liblinear)来训练您的模型。学习模型后,模型只是您要分类的每个类别的feature:weight列表。这样的事情(假设你只有3个班级):

class1[feature1] = weight11
class1[feature2] = weight12
...
class1[featurek] = weight1k    ------- for class 1

... different <feature, weight> ------ for class 2
... different <feature, weight> ------ for class 3 , etc

在预测时,您根本不需要scikit-learn,您可以使用服务器后端使用的任何语言进行线性计算。假设一个特定的POST请求包含功能(feature3,feature5),你需要做的是这样的:

linear_score[class1] = 0
linear_score[class1] += lookup weight of feature3 in class1
linear_score[class1] += lookup weight of feature5 in class1

linear_score[class2] = 0
linear_score[class2] += lookup weight of feature3 in class2
linear_score[class2] += lookup weight of feature5 in class2

..... same thing for class3
pick class1, or class2 or class3 whichever has the highest linear_score

更进一步:如果您可以通过某种方式定义要素权重(例如,使用令牌的tf-idf分数),那么您的预测可能会变为:

linear_score[class1] += class1[feature3] x feature_weight[feature3]
so on and so forth.

注意feature_weight[feature k]通常因每个请求而异。 因为对于每个请求,活动特征的总数必须远小于所考虑特征的总数(考虑50个令牌或特征与整个1 MM令牌的词汇量),预测应该非常快。我可以想象一旦你的模型准备就绪,预测的实现可以基于键值存储(例如redis)来编写。