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.
Спасибо, Ниранджан