【发布时间】:2020-09-08 15:24:25
【问题描述】:
我已经用 sklearn 的DecisionTreeClassifier 建立了一个文本分类模型,并想添加另一个预测器。我的数据位于 pandas 数据框中,其列标记为 'Impression'(文本)、'Volume'(浮点数)和 'Cancer'(标签)。我一直只使用印象来预测癌症,但想使用印象和体积来预测癌症。
我之前运行没有问题的代码:
X_train, X_test, y_train, y_test = train_test_split(data['Impression'], data['Cancer'], test_size=0.2)
vectorizer = CountVectorizer()
X_train = vectorizer.fit_transform(X_train)
X_test = vectorizer.transform(X_test)
dt = DecisionTreeClassifier(class_weight='balanced', max_depth=6, min_samples_leaf=3, max_leaf_nodes=20)
dt.fit(X_train, y_train)
y_pred = dt.predict(X_test)
我尝试了几种不同的方法来添加音量预测器(更改为粗体):
1) 仅fit_transform 印象数
X_train, X_test, y_train, y_test = train_test_split(data[['Impression', 'Volume']], data['Cancer'], test_size=0.2)
vectorizer = CountVectorizer()
X_train['Impression'] = vectorizer.fit_transform(X_train['Impression'])
X_test = vectorizer.transform(X_test)
dt = DecisionTreeClassifier(class_weight='balanced', max_depth=6, min_samples_leaf=3, max_leaf_nodes=20)
dt.fit(X_train, y_train)
y_pred = dt.predict(X_test)
这会引发错误
TypeError: float() argument must be a string or a number, not 'csr_matrix'
...
ValueError: setting an array element with a sequence.
2) 致电fit_transform 了解展示次数和数量。除了fit_transform 行之外的代码与上面相同:
X_train = vectorizer.fit_transform(X_train)
这当然会抛出错误:
ValueError: Number of labels=1800 does not match number of samples=2
...
X_train.shape
(2, 2)
y_train.shape
(1800,)
我很确定方法 #1 是正确的方法,但我无法找到任何教程或解决方案来说明如何将浮点预测器添加到此文本分类模型中。
任何帮助将不胜感激!
【问题讨论】:
标签: python machine-learning scikit-learn decision-tree