【发布时间】:2014-09-02 14:34:21
【问题描述】:
我正在尝试使用分类变量训练带有GradientBoostingClassifier 的模型。
以下是原始代码示例,仅用于尝试将分类变量输入GradientBoostingClassifier。
from sklearn import datasets
from sklearn.ensemble import GradientBoostingClassifier
import pandas
iris = datasets.load_iris()
# Use only data for 2 classes.
X = iris.data[(iris.target==0) | (iris.target==1)]
Y = iris.target[(iris.target==0) | (iris.target==1)]
# Class 0 has indices 0-49. Class 1 has indices 50-99.
# Divide data into 80% training, 20% testing.
train_indices = list(range(40)) + list(range(50,90))
test_indices = list(range(40,50)) + list(range(90,100))
X_train = X[train_indices]
X_test = X[test_indices]
y_train = Y[train_indices]
y_test = Y[test_indices]
X_train = pandas.DataFrame(X_train)
# Insert fake categorical variable.
# Just for testing in GradientBoostingClassifier.
X_train[0] = ['a']*40 + ['b']*40
# Model.
clf = GradientBoostingClassifier(learning_rate=0.01,max_depth=8,n_estimators=50).fit(X_train, y_train)
出现如下错误:
ValueError: could not convert string to float: 'b'
据我所知,在GradientBoostingClassifier 可以构建模型之前,似乎需要在分类变量上使用One Hot Encoding。
GradientBoostingClassifier 可以使用分类变量构建模型而无需进行一次热编码吗?
R gbm 包能够处理上面的示例数据。我正在寻找具有同等功能的 Python 库。
【问题讨论】:
-
您确实需要使用 OneHotEncoder。那么这应该不是问题。另外,不要将 pandas DataFrames 放入 scikit-learn 估计器中,您应该使用 numpy 数组(通过调用 np.array(dataframe) 或 dataframe.values)。
-
有work in progress 允许这样做。
-
与this one相同的问题。
标签: python machine-learning scikit-learn decision-tree ensemble-learning