【发布时间】:2020-07-01 12:05:01
【问题描述】:
在我的数据集中有 3 个输入列(制造商、短文本、供应商),我希望从中创建一个矢量化特征列表。然后我期望将其融入机器学习模型中。最后一列(类别)是标签。我在数据集中有 200 万行。 我无法同时对所有三列进行矢量化。
数据样本
train_X, test_X, train_Y, test_Y = model_selection.train_test_split(df[["Manufacturer", "short text", "supplier"], df['category'],test_size=0.15, random_state=500)
train_X = pd.DataFrame(data = train_X)
train_Y = pd.DataFrame(data = train_Y)
test_X = pd.DataFrame(data = test_X)
test_Y = pd.DataFrame(data = test_Y)
# creating SVM model
text_clf_svm = Pipeline([('vect', CountVectorizer(lowercase=True, preprocessor= None, tokenizer= None, ngram_range=(1,6), stop_words= 'english', analyzer='word', max_df=1.0, min_df=1, max_features=None, vocabulary=None, binary=False)),
('tfidf', TfidfTransformer()),
('clf-svm', SGDClassifier(loss='modified_huber', penalty='l2',shuffle=True,
alpha=0.000001, max_iter=9, random_state=None)),])
#running training data on svm model
text_clf_svm1 = text_clf_svm.fit(train_X, train_Y)
错误
Found input variables with inconsistent numbers of samples
请告诉我如何将所有 3 列一起矢量化。
提前致谢。
【问题讨论】:
-
尝试将
Manufacturer、short text和supplier合并为一列,并使用它来训练您的模型。至少这是我在分类问题上所做的,其中我有产品名称和三个不同的类别。 -
@anddt - 我已经尝试过了,它工作得很好。但我想了解如何在保持列分开的同时将其融入机器学习模型。
-
我可能错了,但我认为这没有多大意义。
TfidfTransformer为列中的每个单词构建一个频率数组。将它应用于您的每一列显然会产生不同长度的数组(并非每个单词都出现在您的所有列中,因此合并它们的重要性)。希望这会有所帮助。 -
但是如果你将不同的列折叠成另一列,这不会让模型感到困惑吗?或者至少它无法确定任何自变量的重要性,即。 (特征)。除非我刚刚开始学习并且在我的作业中遇到了这个确切的问题,否则我错过了一些东西
标签: python machine-learning text-classification