2016-10-27 1 views
0

SciPyを使用してマシン上のテキストを分類できますが、HTTP POST要求から文字列オブジェクトをリアルタイムで、またはほぼリアルタイムで分類する必要があります。私の目標が並行性が高く、リアルタイム出力が近く、メモリのフットプリントが小さい場合は、どのアルゴリズムを調べるべきですか?私は、Goでサポートベクターマシン(SVM)の実装を手に入れることができたと考えましたが、それは私のユースケースにとって最高のアルゴリズムですか?HTTPポストオブジェクトを最も安価に分類する方法

答えて

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-学ぶ全く必要ありません、あなたは線形を行うには、サーバーのバックエンドで使用しているどんな言語で使用することができます計算。特定のPOSTリクエストは、機能が含まれていると(特長3は、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)に基づいて予測の実装を書いただけです。

関連する問題