Как получить результаты от модели после того, как она полностью обучена на одном экземпляре - PullRequest
0 голосов
/ 03 октября 2019

Вот как выглядят мои данные:

data data

Это набор данных электронной почты. Мне нужно классифицировать каждый в разные классы. Столбец темы - это класс, а столбец y - ​​это метка. Теперь я обучил логистической регрессии, чтобы получить это. Вот как выглядит мой код:

def fit(df, training_size, X_train):
    models = {}
    filtered_folders = []
    unique_folders = df["y"].unique()
    for folder in unique_folders:
        model = LogisticRegression()
        y_train = df[:training_size]["y"] == folder
        try:
            model.fit(X_train, y_train)
            models[folder] = model
            filtered_folders.append(folder)
        except:
            pass
    return models, filtered_folders

папки здесь означают темы. Я уже предварительно обработал свои данные и разделился на обучение и тестирование. Чтобы подготовить особенности моих данных, вот что я использовал:

def prepare_features(df):
    from_bag = assemble_bag(df["sender"])
    to_bag = assemble_bag(df["recipient"])
    message_bag = assemble_bag(df["body"])
    subject_bag = assemble_bag(df["subject"])
    frames = [from_bag, subject_bag, to_bag, message_bag]
    X = pd.concat(frames, axis = 1, join = 'inner')
    #X.drop(labels = [" ", ""], inplace = True, axis = 1)
    return X

Вот процесс, который принимает assembly_bag:

  1. Он токенизирует данные.
  2. Удаляет стоп-слова
  3. Удаляет регулярные выражения
  4. Создает пакет слов

Эта модель работает отлично. Это дает точность 74%. Проблема в том, что когда я даю ему один экземпляр ввода, например: отправитель = отправитель, получатель = получатель, сообщение = сообщение, тема = тема, он генерирует следующую ошибку:

    ValueError                                Traceback (most recent call last)
<ipython-input-45-cdd528359822> in <module>()
     11 X_test = prepare_features1(Y)
     12 print X_test
---> 13 y_test_pred = predict(X_test, loaded_model, filtered_folders)

<ipython-input-25-dccf241fdc59> in predict(X_test, models, filtered_folders)
      3     for folder in filtered_folders:
      4         # Compute probability
----> 5         testing_probs[folder] = models[folder].predict_proba(X_test)[:,1]
      6     y_test_pred = testing_probs.idxmax(axis = 1)
      7     return y_test_pred

C:\Users\fatima.arshad\AppData\Local\Continuum\anaconda2\lib\site-packages\sklearn\linear_model\logistic.pyc in predict_proba(self, X)
   1409                                                 self.solver == 'liblinear')))
   1410         if ovr:
-> 1411             return super(LogisticRegression, self)._predict_proba_lr(X)
   1412         else:
   1413             decision = self.decision_function(X)

C:\Users\fatima.arshad\AppData\Local\Continuum\anaconda2\lib\site-packages\sklearn\linear_model\base.pyc in _predict_proba_lr(self, X)
    293         multiclass is handled by normalizing that over all classes.
    294         """
--> 295         prob = self.decision_function(X)
    296         prob *= -1
    297         np.exp(prob, prob)

C:\Users\fatima.arshad\AppData\Local\Continuum\anaconda2\lib\site-packages\sklearn\linear_model\base.pyc in decision_function(self, X)
    260         if X.shape[1] != n_features:
    261             raise ValueError("X has %d features per sample; expecting %d"
--> 262                              % (X.shape[1], n_features))
    263 
    264         scores = safe_sparse_dot(X, self.coef_.T,

ValueError: X has 6 features per sample; expecting 17522

Пример ввода, которыйЯ просто дал пройти через тот же конвейер. Я создаю его функции с помощью preparefeatures (), а затем пропускаю его через n моделей.

Вот как выглядит мой ввод:

Y = ['sender', 'rcvr','subjectheheh', 'message']
X_test = prepare_features1(Y)
print X_test
y_test_pred = predict(X_test, loaded_model, filtered_folders)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...