У меня есть датафрейм, который состоит из текста.Столбец 1 - это описание, а столбец 2 - это категория / класс.
Я предварительно обработан с использованием Vectorizer и разложен на множители для извлечения признаков, а также преобразовал их в целые числа / числа.Я запустил многоклассовый классификатор случайных лесов.
Теперь мне нужно создать поток диалога, в котором на основе прогнозируемого класса у меня есть ответ, который необходимо отобразить.
Исходный кадр данных:
Description Actual Category
Need to rejoin the domain Network
mail backup Software
laptop crashed Hardware
После счетчика и коэффициента по столбцам
Код:
############### Feature extraction ##############
countvec = CountVectorizer()
counts = countvec.fit_transform(read_data['Description'])
df = pd.DataFrame(counts.toarray())
df.columns = countvec.get_feature_names()
print(df)
########## Join with original data ##############
df = read_data.join(df)
########## Creating the dependent variable class for "Category" variable
factor = pd.factorize(df['Category'])
df.Category = factor[0]
definitions = factor[1]
print(df.Category.head())
print(definitions)
########## Creating the dependent variable class for "Description" variable
factor = pd.factorize(df['Description'])
df.Description = factor[0]
definitions_1 = factor[1]
print(df.Description.head())
print(definitions_1)
Result
Description Actual Category Need Mail laptop
0 0 1 0 0
1 0 0 1 0
1 0 0 0 1
2 1 1 0 0
Классификатор Randomeforest
############# Random forest classification model #########################
classifier = RandomForestClassifier(n_estimators = 10, criterion =
'entropy', random_state = 42)
classifier.fit(X_train, y_train)
######### Predicting the Test set results ##############
y_pred = classifier.predict(X_test)
#####Reverse factorize (converting y_pred from 0s,1s and 2s to original
class for "Category" ###############
reversefactor = dict(zip(range(3),definitions))
y_test = np.vectorize(reversefactor.get)(y_test)
y_pred = np.vectorize(reversefactor.get)(y_pred)
#####Reverse factorize (converting y_pred from 0s,1s and 2s to original
class for "Description" ###############
reversefactor = dict(zip(range(53),definitions_1))
X_test = np.vectorize(reversefactor.get)(X_test)
Результат:
Description Actual Category Predicted Category
Need to rejoin the domain Network Network
mail backup Software Software
laptop crashed Hardware Hardware
Теперь мне нужен поток разговоров, в котором:
Если прогнозируемый класс - Сеть, я должен отображать определенный ответ, если его аппаратное обеспечение, мне нужно отображать некоторый ответ и т. Д.
Код:
def get_status(model_pkl):
if df_Final['Predicted Category'] == 'Software':
return 'Its a Software issue, let me raise a ticket for you'
elif df_Final['Predicted Category'] == 'Hardware':
return 'Seems like a Hardware issue, let me raise a ticket for you'
elif df_Final['Predicted Category'] == 'Network':
return 'Seems like a Network issue, let me raise a ticket for you'
else:
return 'Sorry Im unable to get you'
Желаемый вывод:
> Input a new sentence say :
> 1. "Wifi not working",
> 2. predict the class say Network
> 3. And display the response which is 'Seems like a Hardware issue, let me raise a ticket for you'