【问题标题】:Turning a Multiclass Classifier into a Hierarchical Multiclass Classifier将多类分类器变成分层多类分类器
【发布时间】:2021-01-11 05:44:07
【问题描述】:

我正在使用电子商务数据集来预测产品类别。 我使用产品描述和供应商代码作为特征,并预测产品类别。

from sklearn import preprocessing
from sklearn.feature_extraction.text import CountVectorizer
from sklearn import ensemble

df['joined_features'] = df['description'].astype(str) + ' ' + df['supplier'].astype(str) 

# split the dataset into training and validation datasets 
train_x, valid_x, train_y, valid_y = model_selection.train_test_split(df['joined_features'], df['category'])

# encode target variable 
encoder = preprocessing.LabelEncoder()
train_y = encoder.fit_transform(train_y)
valid_y = encoder.fit_transform(valid_y)

# count vectorizer object 
count_vect = CountVectorizer(analyzer='word')
count_vect.fit(df['joined_features'])

# transform training and validation data
xtrain_count =  count_vect.transform(train_x)
xvalid_count =  count_vect.transform(valid_x)

classifier = ensemble.RandomForestClassifier()
classifier.fit(xtrain_count, train_y)
predictions = classifier.predict(feature_vector_valid)

这个预测的准确率约为 90%。 我现在想预测更多类别。这些类别是分层的。我预测的类别是主要类别。我想预测更多。

例如,我预测了服装。现在我要预测:服装 -> 鞋子

我尝试加入两个类别:df['category1'] + df['category2'] 并将它们预测为一个,但我得到了大约 2% 的准确率,这真的很低。

以分层方式制作分类器的正确方法是什么?

编辑:我编译了一些假数据以便更好地理解:

从第一行开始:第 1 类对应三星,第 3 类对应电子产品,第 7 类对应电视。

【问题讨论】:

  • category1 & category2 中有多少个唯一值? category2 中是否有 2 个父母(即 DAG 与 Tree)?类的样本量有多平衡?
  • @ShihabShahriarKhan 样本量不平衡。一个类别中有很多产品,但在其他类别中却不多。每个子类别只有一个父级。每个类别大约有 200 个唯一值。
  • 有没有你可以发布一些示例数据,以便我可以为你想出一个方法?
  • 对不起,我还是没明白。您的数据集(或与之类似的假数据集)的示例示例将使其更清晰,以便您获得所需的帮助。我建议在 Excel 女士(或类似的)中创建几行并拍摄快照并在此处发布。
  • @Snow 我们正在努力理解数据以及类之间的关系。否则,我们无法为您提供解决方案。

标签: python machine-learning scikit-learn multiclass-classification


【解决方案1】:

一个想法可能是使用所有 2 级类别构建模型,但将类别 1 的预测概率作为输入特征输入模型。

另一个想法是,您只为 category1==Clothing 训练 category2 的模型。理想情况下,您可以根据 category1 的预测有条件地调用其他多类模型。显然,这会增加您必须完成的工作量,具体取决于类别 1 的数量。

【讨论】:

  • 你的第一段也是我想做的。但也许已经有一个明确的方法来解决这个问题,比如决策图等等。
猜你喜欢
  • 2019-10-25
  • 2015-07-20
  • 2015-07-19
  • 2016-03-03
  • 2014-05-07
  • 2017-06-10
  • 2020-01-19
  • 2021-12-25
  • 1970-01-01
相关资源
最近更新 更多