ValueError Несоответствующая ошибка количества выборок с MultinomialNB - PullRequest
0 голосов
/ 28 мая 2018

Мне нужно создать модель, которая точно классифицирует записи на основе переменной.Например, если запись имеет предиктор A или B, я хочу, чтобы она классифицировалась как имеющая прогнозируемое значение X.Фактические данные представлены в этой форме:

    Predicted    Predictor
      X            A
      X            B
      Y            D
      X            A

Для моего решения я сделал следующее: 1. Использовал LabelEncoder для создания числовых значений для столбца Predicted 2. Переменная предиктора имеет несколько категорий, который я проанализировал в отдельные столбцы, используя get_dummies.

Вот подраздел данных с (фиктивным) Predictor и парой категорий предикторов (извините за смещение):

    Predicted Predictor_A    Predictor_B
9056    30  0   0
2482    74  1   0
3407    56  1   0
12882   15  0   0
7988    30  0   0
13032   12  0   0
9738    28  0   0
6739    40  0   0
373 131 0   0
3030    62  0   0
8964    30  0   0
691 125 0   0
6214    41  0   0
6438    41  1   0
5060    42  0   0
3703    49  0   0
12461   16  0   0
2235    75  0   0
5107    42  0   0
4464    46  0   0
7075    39  1   0
11891   16  0   0
9190    30  0   0
8312    30  0   0
10328   24  0   0
1602    97  0   0
8804    30  0   0
8286    30  0   0
6821    40  0   0
3953    46  1   

После преобразования данных вкак показано выше, я пытаюсь использовать MultinomialNB из sklearn.При этом я сталкиваюсь с ошибкой:

ValueError: Found input variables with inconsistent numbers of samples: [1, 8158]

Я сталкиваюсь с этой ошибкой при попытке попробовать ее с кадром данных, содержащим только 2 столбца -> Predicted и Predictor_A

Мои вопросы:

  1. Что мне нужно сделать, чтобы устранить ошибку?
  2. Верен ли мой подход?

1 Ответ

0 голосов
/ 28 мая 2018
  • Чтобы соответствовать модели MultinomialNB, вам понадобятся обучающие образцы и их функции, а также соответствующие метки (целевые значения).

  • В вашем случае Predicted - это переменная target, а Predictor_A and Predictor_B - это features (предикторы).


Пример 1:

from sklearn.naive_bayes import MultinomialNB
import pandas as pd
from sklearn.model_selection import train_test_split

df = pd.read_csv("dt.csv", delim_whitespace=True)

# X is the features
X = df[['Predictor_A','Predictor_B']]
#y is the labels or targets or classes 
y = df['Predicted']

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)

clf = MultinomialNB()
clf.fit(X_train, y_train)

clf.predict(X_test)

#array([30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30])

#this result makes sense if you look at X_test. all the samples are similar
print(X_test)

       Predictor_A  Predictor_B
8286             0            0
12461            0            0
6214             0            0
9190             0            0
373              0            0
3030             0            0
11891            0            0
9056             0            0
8804             0            0
6438             1            0

#get the probabilities 
clf.predict_proba(X_test)

Примечание 2: Данные, которые я использовал, можно найти здесь


РЕДАКТИРОВАТЬ

Если вы обучаете модель, используя несколько документов, которые имеют, скажем, 4 тега (предиктора), то новый документ, который вы хотите прогнозировать, также должен иметь такое же количество тегов.

Пример 2:

clf.fit(X, y)

здесь, X - массив [29, 2].Таким образом, у нас есть 29 обучающих образцов (документов), и у него есть 2 теги (предикторы)

clf.predict(X_new)

здесь, X_new может быть [n, 2].Таким образом, мы можем предсказать классы n новых документов, но эти новые документы также должны иметь ровно 2 тегов (предикторов).

...