Модель sklearn: объединение текстовых данных и других отклонений в виде нескольких X - PullRequest
0 голосов
/ 18 апреля 2020

Я новичок ie, учащийся в машинном обучении.

Я получил набор данных диалога, состоящий из нескольких столбцов (высказывание, раунд и отправитель), и раунд, и отправитель являются категориальными данными, высказывание - текстовыми данными , Я должен предсказать поведение диалогового окна, которое 0-6.

Я хотел бы спросить, возможно ли ввести несколько X, которые содержали текстовые данные, с другими категориальными данными? Я пробовал нейронную сеть с двумя слоями ввода (встраивание слов и другие категориальные данные), и это работает хорошо. Я не уверен, возможно ли это в моделях sklearn.

Ниже приведен исходный код, который я использую только для текстовых данных:

from sklearn.naive_bayes import BernoulliNB, MultinomialNB
from sklearn import svm
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.tree import DecisionTreeClassifier
from xgboost import XGBClassifier
from sklearn import metrics
from sklearn.model_selection import train_test_split 
from sklearn.model_selection import cross_val_score
from sklearn.feature_extraction.text import TfidfVectorizer

tfidf_vectorizer = TfidfVectorizer()

def baseline_model(X_TR, X_TE, Y_TR, Y_TE):

    X_TR = tfidf_vectorizer.fit_transform(X_TR)
    X_TE = tfidf_vectorizer.transform(X_TE)

    Models = ['Bernoulli NB','Multinomial NB','Svm (linear)','Logistic Regression',
              'Random Forest','kNN','Decision Tree','XG Boost']
    function = [BernoulliNB(),MultinomialNB(),svm.SVC(kernel="linear"),LogisticRegression(),
              RandomForestClassifier(),KNeighborsClassifier(),DecisionTreeClassifier(),
                XGBClassifier()]
    perform_f1 = []
    perform_acc = []


    for i in tqdm(range(len(function))):
        model = function[i]
        #performance = cross_val_score(model, tfidf_vectorizer.fit_transform(x), y, cv=10, scoring'accuracy')

        func = str(function[i])
        print("==== ", func[0:func.index('(')], " ====")

        model.fit(X_TR, Y_TR)
        model.score(X_TE, Y_TE)
        e = Y_TE
        p = model.predict(X_TE)
        print(metrics.classification_report(e,p))
        perform_f1.append(metrics.f1_score(e,p,average='macro'))
        perform_acc.append(metrics.accuracy_score(e,p))

    result_f1_table = pd.DataFrame({"Models":Models,"Result f1 scores":perform_f1})
    result_acc_table = pd.DataFrame({"Models":Models,"Result acc scores":perform_acc})
    return result_f1_table, result_acc_table
...