我目前正在开发一种用于票证分类的机器学习算法,该算法将标题、描述和客户名称结合在一起,以预测票证应该分配给哪个团队,但过去几天一直被卡住。
标题和描述都是自由文本,所以我通过 TfidfVectorizer 传递它们。客户名称是一个类别,为此我使用 OneHotEncoder。我希望它们在管道中工作,因此将它们与列转换器连接在一起,我可以在其中传递整个数据帧并对其进行处理。
file = "train_data.csv"
train_data= pd.read_csv(train_file)
string_features = ['Title', 'Description']
string_transformer = Pipeline(steps=[('tfidf', TfidfVectorizer()))
categorical_features = ['Customer']
categorical_transformer = Pipeline(steps=[('OHE', preprocessing.OneHotEncoder()))
preprocessor = ColumnTransformer(transformers = [('str', string_transformer, string_features), ('cat', categorical_transformer, categorical_features)])
clf = Pipeline(steps=[('preprocessor', preprocessor),('clf', SGDClassifier())]
X_train = train_data.drop('Team', axis=1)
y_train = train_data['Team']
clf.fit(X_train, y_train)
但是我收到一个错误:除了连接轴之外的所有输入数组维度都必须完全匹配。
在查看它之后,print(OneHotEncoder().fit_transform(X_train['Customer']))它自己返回一个错误:预期的二维数组改为一维数组。
我相信 OneHotEncoder 失败了,因为它需要一个数组数组(一个 Pandas 数据帧),每个数组的长度为 1,包含客户名称。但相反只是得到一个熊猫系列。通过使用 .to_frame() 将系列转换为数据帧,打印输出现在似乎与 TfidfVectorizer 输出的内容匹配,并且尺寸应该匹配。
有没有办法可以修改管道中的 OneHotEncoder 以便它接受一维输入?或者有什么我可以添加到管道中的东西,可以在它传递到 OneHotEncoder 之前将其转换?我是否正确,这是错误的原因?
谢谢。
翻翻过去那场雪
相关分类