【发布时间】: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