Python / Scikit-Learn: как сделать каскадные двоичные классификаторы? - PullRequest
0 голосов
/ 19 марта 2020

Я пытаюсь классифицировать имена сущностей на военные, правительственные или другие. Например, «Армия США» -> военные; "Министерство образования" -> правительство; а все остальное относится к категории «другие». Что я обнаружил, так это то, что невероятно трудно классифицировать «другое», потому что в словах так много различий, и они, похоже, пересекаются с классом «правительства».

Я читал о каскадных двоичных классификаторах (https://stats.stackexchange.com/questions/318520/many-binary-classifiers-vs-single-multiclass-classifier), которые я хотел бы опробовать, так как это было бы очень полезно в моем случае, потому что классификаторы для обнаружения "военных" и " правительство "НАМНОГО сильнее, чем одно для другого. Как я могу go сделать это?

Пример кода того, что я сделал:

pipeline = Pipeline([
    ('vectorizer', FeatureUnion([
        ('word_vectorizer', TfidfVectorizer(sublinear_tf=1,
                                            smooth_idf=1,
                                            use_idf=1,
                                            min_df=3,
                                            stop_words = 'english',
                                            strip_accents='unicode',
                                            analyzer='word',
                                            token_pattern=r'\w{1,}',
                                            ngram_range=(1,3),
                                            dtype=np.float32,
                                            max_features=8000)),
        ('char_vectorizer', TfidfVectorizer(sublinear_tf=True,
                                            smooth_idf=1,
                                            use_idf=1,
                                            strip_accents='unicode',
                                            min_df=3,
                                            token_pattern=r'\w{1,}',
                                            analyzer='char',
                                            ngram_range=(2,6),
                                            dtype=np.float32,
                                            max_features=5000))
        ])),
    ('classifier', OneVsRestClassifier(SVC(class_weight=None,
                      C=1000,
                      gamma=0.001,
                      kernel='rbf',
                      ))) 
])
...