我是Python中机器学习的新手,对于如何使用分类变量实现决策树感到困惑,因为在R中,它们会被
我明白在scikit learn中,分类特征需要使用labelencoder和/或one hot encoder进行编码。
首先,我尝试仅使用label encoder,但这并不能解决问题,因为DecisionTreeClassifier开始将已编码的变量视为连续变量。然后我从这篇文章中阅读到:Issue with OneHotEncoder for categorical features,应该先使用label encoder对变量进行编码,然后再使用one hot encoder进行编码。
我尝试以以下方式在此数据集上实现,但出现了错误。
当我从函数中删除
我还尝试使用
请问有人可以帮我解决如何使用分类变量拟合决策树并输出树形图的问题吗?
我正在使用以下代码来拟合和绘制决策树:
party
和ctree
自动编码。我想使用两个分类独立特征和一个依赖类来构建决策树。我正在使用的数据框如下:data
title_overlap_quartile sales_rank_quartile rank_grp
0 Q4 Q2 GRP 1
1 Q4 Q3 GRP 1
2 Q2 Q1 GRP 1
3 Q4 Q1 GRP 1
5 Q2 Q1 GRP 2
我明白在scikit learn中,分类特征需要使用labelencoder和/或one hot encoder进行编码。
首先,我尝试仅使用label encoder,但这并不能解决问题,因为DecisionTreeClassifier开始将已编码的变量视为连续变量。然后我从这篇文章中阅读到:Issue with OneHotEncoder for categorical features,应该先使用label encoder对变量进行编码,然后再使用one hot encoder进行编码。
我尝试以以下方式在此数据集上实现,但出现了错误。
def encode_features(df, columns):
le = preprocessing.LabelEncoder()
ohe = preprocessing.OneHotEncoder(sparse=False)
for i in columns:
le.fit(df[i].unique())
df[i+'_le'] = le.transform(df[i])
df[i+'_le'] = df[i+'_le'].values.reshape(-1, 1)
df[i+'_le'+'_ohe'] = ohe.fit_transform(df[i+'_le'])
return(df)
data = encode_features(data, ['title_overlap_quartile', 'sales_rank_quartile'])
File "/Users/vaga/anaconda2/envs/py36/lib/python3.5/site-packages/pandas/core/series.py", line 2800, in _sanitize_index
raise ValueError('Length of values does not match length of ' 'index')
ValueError: Length of values does not match length of index
当我从函数中删除
ohe
部分并在外部运行它时,它可以运行,但结果看起来很奇怪:def encode_features(df, columns):
le = preprocessing.LabelEncoder()
ohe = preprocessing.OneHotEncoder(sparse=False)
for i in columns:
le.fit(df[i].unique())
df[i+'_le'] = le.transform(df[i])
# df[i+'_le'] = df[i+'_le'].values.reshape(-1, 1)
# df[i+'_le'+'_ohe'] = ohe.fit_transform(df[i+'_le'])
return(df)
data = encode_features(data, ['title_overlap_quartile', 'sales_rank_quartile'])
data['title_overlap_quartile_le'] = data['title_overlap_quartile_le'].values.reshape(-1, 1)
print(ohe.fit_transform(data['title_overlap_quartile_le']))
[[ 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]]
我还尝试使用
pandas.get_dummies
将变量转换为多个具有二进制编码的列并使用它,但决策树分类器将其视为连续变量。请问有人可以帮我解决如何使用分类变量拟合决策树并输出树形图的问题吗?
我正在使用以下代码来拟合和绘制决策树:
clf = tree.DecisionTreeClassifier()
clf = clf.fit(data[['title_overlap_score', 'sales_rank_quartile']], data[['rank_grp']])
dot_data = tree.export_graphviz(clf, out_file=None, feature_names=data[['title_overlap_score', 'sales_rank_quartile']].columns,
filled=True, rounded=True,
special_characters=True)
graph = graphviz.Source(dot_data)
graph.render("new_tree")