Python scikit узнать, как построить модель для данных нескольких классов и нескольких меток?

У меня есть такой набор данных:

Description  attributes.occasion.0 attributes.occasion.1    attributes.occasion.2   attributes.occasion.3   attributes.occasion.4

 descr01        Chanukah                Christmas               Housewarming        Just Because                Thank You
 descr02        Anniversary             Birthday                Christmas           Graduation                  Mother's Day
 descr03        Chanukah                Christmas               Housewarming        Just Because                Thank You
 descr04        Baby Shower             Birthday                Cinco de Mayo       Gametime                    Just Because
 descr05        Anniversary             Birthday                Christmas           Graduation                  Mother's Day

descr01 => описание случаев (я только что поместил короткое имя в реальный набор данных, его полное текстовое описание) и так далее.

В приведенном выше наборе данных у меня есть одна независимая переменная, которая имеет текстовое описание и 4 зависимых категориальных переменных.

Я попробовал классификатор Random Forest, который принимает несколько зависимых в качестве входных данных.

Один пример набора данных

    attributes.occasion.0   attributes.occasion.1   attributes.occasion.2   attributes.occasion.3   attributes.occasion.4
    Back to School                Birthday               School Events           NaN                      NaN


descrption:

Cafepress Personalized 5th Birthday Cowgirl Kids Light T-Shirt:100 percent cotton Youth T-Shirt by Hanes,Preshrunk, durable and guaranteed

Ниже приведен код, который я пробовал:

## Split  the dataset
X_train, X_test, y_train, y_test = train_test_split(df['Description'],df[['attributes.occasion.0','attributes.occasion.1','attributes.occasion.2','attributes.occasion.3','attributes.occasion.4']], test_size=0.3, random_state=0)

## Apply the model


    from sklearn.ensemble import RandomForestClassifier

    tfidf = Pipeline([('vect', HashingVectorizer(ngram_range=(1,7),non_negative=True)),

('tfidf', TfidfTransformer()),

])

def feature_combine(dataset):
    Xall = []
    i=1
    for col in cols_to_retain:
        if col != 'item_id' and col != 'last_updated_at':
            Xall.append(tfidf.fit_transform(dataset[col].astype(str)))

    joblib.dump(tfidf, "tfidf.sav")
    Xspall = scipy.sparse.hstack(Xall)

    #print Xspall
    return Xspall

def test_Data_text_transform_and_combine(dataset):
    Xall = []
    i=1

    for col in cols_to_retain:
        if col != 'item_id' and col != 'last_updated_at':
            Xall.append(tfidf.transform(dataset[col].astype(str)))

    Xspall = scipy.sparse.hstack(Xall)

    return Xspall

from sklearn.ensemble import RandomForestClassifier
text_clf = RandomForestClassifier()
_ = text_clf.fit(feature_combine(X_train), y_train)

RF_predicted = text_clf.predict(test_Data_text_transform_and_combine(X_test))

np.mean(RF_predicted  == y_test)*100 

Я получил ниже выходной, когда я рассчитал меру точности? Но я знаю, как интерпретировать этот результат и как построить матрицу путаницы и другие показатели эффективности.

Выход:

Accuracy for each dependent 

attributes.occasion.0    87.517672
attributes.occasion.1    96.050306
attributes.occasion.2    98.362394
attributes.occasion.3    99.184142
attributes.occasion.4    99.564090

Может ли кто-нибудь сказать мне, как решить проблему с несколькими метками и как оценить производительность модели. Каковы возможные подходы в таком случае. Я использую библиотеку Python Sci-Kit Learn.

Спасибо, Ниранджан

0 ответов