【问题标题】:how to pass mixed (categorical and numeric) features to Decision Tree Regressor in sklearn?如何将混合(分类和数字)特征传递给 sklearn 中的决策树回归器?
【发布时间】:2018-10-15 22:23:46
【问题描述】:

如何将分类和数字特征传递给 sklearn 中的 DecisionTreeRegressor?

以下代码展示了如何将DecisionTreeRegressor 用于数字特征:

from sklearn import tree
make_tree = tree.DecisionTreeRegressor()
fit_tree = make_tree.fit(X_train, y_train)

【问题讨论】:

  • DecisionTreeRegressor 支持数值和分类变量。你有错误吗?
  • 我不知道fit函数如何从一个数字中实现一个分类特征?这个函数中是否有任何参数来引入分类特征?树算法需要知道哪个特征是分类的,哪个是数字的。例如当 x_train 是 [[1,4,2],[2,1,3],[0,2,3]] 树算法如何解释特征?
  • 如果您发布完整代码和遇到的错误,帮助会更容易。
  • 不,scikit-learn 决策树无法区分分类特征和数值特征,并且没有太大区别。您必须对分类特征进行 one-hot 编码才能将它们转换为数字。
  • 如果您需要按原样使用分类,您可以尝试支持该功能的 CatBoost 或 LightGBM(通过在参数中指定哪个功能是分类的),而不是 scikit-learn。

标签: python machine-learning scikit-learn decision-tree


【解决方案1】:

首先,所有分类特征都应该被编码(用数字表示)以便回归模型可以解释。为此,您可以使用LabelEncoder,后跟OneHotEncoder。对于high-cardinal 功能,可以使用FeatureHasher

举个例子:

from sklearn.feature_extraction import FeatureHasher

# n_feature: number of unique values in the feature(s)
# input_type should be passed as 'string' to be compatible to pandas DataFrames
feature_hasher = FeatureHasher(n_features=5000, input_type='string')
df['COLUMN_NAME'] = feature_hasher.transform(df['COLUMN_NAME'])

然后,您可以将特征传递给回归器。

【讨论】:

    猜你喜欢
    • 2016-11-01
    • 1970-01-01
    • 2018-05-15
    • 2018-09-07
    • 2021-06-07
    • 2021-07-06
    • 2016-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多