これは私の仕事です:
私は一連の階層クラス (例: 「オブジェクト/アーキテクチャ/建物/住宅/家/農家」) を持っており、次の 2 つの分類方法を記述しました。
各クラスを個別に処理する (全体で 1 つのモデル/分類器を使用)
各ノードが決定を表すツリー (ルートは「オブジェクト/」を表し、各レベルは一般性を低下させます) と、各ノードの特定のモデル/分類子 (ここでは、出てくる c (通常は 3) の最高確率を考慮します) を使用します。各ノードの確率を下に伝搬し (対数確率を合計して) 葉に伝達し、最も高いものを選択します。
また、ツリーのさらに下に行くように奨励する方法を導入する必要があり (オブジェクト/アーキテクチャ/建物 (対応するトレーニング データがある場合) で停止する可能性があるため)、任意の試行錯誤プロセスを使用して具体的に決定しました。どのように(私はこれに慣れていません):
if numcategories == 4: tempscore +=1 elif numcategories ==5: tempscore +=1.3 elif numcategories ==6: tempscore +=1.5 elif numcategories >6: tempscore +=2
約 290k のトレーニング サンプルと ~150k (現在/ほとんど) のブール関数 (1.0 または 0.0 で表される) があることに注意することも重要です。また、最大 6500 の独立したクラスがあります (ただし、方法 2 の各ノードのクラスはさらに少なくなります)。
方法 1 では、scikitsgdclassifier(loss=hinge)
では約 75 ~ 76% の精度が得られ、linearsvc では約 76 ~ 77% の精度が得られます (ただし、8 ~ 9 倍遅くなります)。
ただし、2番目の方法(最終的にはパフォーマンスが向上する/パフォーマンスが向上すると思います)では、これらの分類器のどちらも真の確率を生成.decision_functions()
しません。 -25%)。したがって、私は に切り替えましたlogisticregression()
。これにより、約 62 ~ 63% の精度が得られます。また、NB ベースの分類子は、パフォーマンスが大幅に低下しているようです。
最後に、2 つの質問があります。
logisticregression()
(i) スパース行列を処理し、(ii) (それに近いもの) 確率を生成し、(iii )マルチクラス分類で動作しますか?- メソッド2をより適切に処理する方法はありますか? 2.a. 具体的には、分類器がツリーのさらに下に結果を生成するように動機付けする方法を改善する方法はありますか?