Случайный результат классификатора леса из Predict_proba () не совпадает с Предикатом ()? - PullRequest
0 голосов
/ 08 мая 2018
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer

from sklearn.ensemble import RandomForestClassifier
pipeline = Pipeline([
('features', FeatureUnion([
    ('Comments',Pipeline([
        ('selector',ItemSelector(column = "Comments")),
        ('tfidf',TfidfVectorizer(use_idf=False,ngram_range=(1,2),max_df=0.95, min_df=0,sublinear_tf=True)),
    ])),
    ('Vendor', Pipeline([
        ('selector',ItemSelector(column = "Vendor Name")),
        ('tfidf',TfidfVectorizer(use_idf=False)),

    ]))
])),
('clf',RandomForestClassifier(n_estimators =200, max_features='log2',criterion = 'entropy',random_state = 45))
 #('clf',LogisticRegression())
 ])


X_train, X_test, y_train, y_test = train_test_split(X,
                                df['code Description'],
                                test_size = 0.3, 
                                train_size = 0.7,
                                random_state = 100)
model = pipeline.fit(X_train, y_train)
s = pipeline.score(X_test,y_test)
pred = model.predict(X_test)
predicted =model.predict_proba(X_test)

для некоторых классификаций мой predict совпадает с оценкой прогноза. но в некоторых случаях

proba_predict = [0.3,0.18,0.155]

но вместо того, чтобы классифицировать его как класс A, он классифицируется как класс B.

Класс прогноза: B

Фактический класс: A

Правый столбец - мои метки, а левый столбец - мои входные текстовые данные:

enter image description here

1 Ответ

0 голосов
/ 08 мая 2018

Я думаю, что вы утверждаете следующую ситуацию: Для тестового вектора X_test вы найдете предсказанное распределение вероятностей y = [p1, p2, p3] из метода predict_proba() с p1> p2 и p1> p3, но predict() метод не выводит класс 0 для этого вектора.

Если вы проверите исходный код функции predict RandomForestClassifier от sklearn, вы увидите, что здесь вызывается метод RandomForest predict_proba():

proba = self.predict_proba(X)

Из этих вероятностей argmax используется для вывода класса.

Следовательно, для шага прогнозирования для вывода используется метод predict_proba. Для меня кажется невозможным, что там что-то идет не так.

Я бы предположил, что вы перепутали некоторые имена классов в своей процедуре и запутались там. Но невозможно дать более подробный ответ на основе предоставленной вами информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...