[英]Converting numeric feature into categorical feature
我正在解决一个从历史数据预测未来电子商店销售的问题。 我正在使用的功能之一是商品价格(浮动)。 我通过实验发现,将它添加到现有的特征列表会降低我的xgboost
模型的拟合和验证准确性(增加预测 RMSE)。 我怀疑价格的影响可能是高度非线性的,记忆棒、笔记本电脑、手机等的价格会达到峰值。
无论如何,我有以下想法来解决这个问题:如果我将浮动项目价格转换为分类变量,并能够指定映射,例如值或十分位数的范围,如何? 然后,我可以使用训练目标值item price对该分类变量进行均值编码。
这有意义吗? 你能给我一个指向 Python“线性/十分位数直方图”的指针,它返回一个浮点数列表,返回一个并行列表,每个浮点数属于哪个 bin/decile?
恕我直言,您可以使用qcut
、 KBinsDiscretizer
或cut
。
一些例子,
>>> df = pd.DataFrame(np.random.randn(10), columns=['a'])
>>> df
a
0 0.060278
1 -0.618677
2 -0.472467
3 1.539958
4 -0.181974
5 1.563588
6 -1.693140
7 1.868881
8 1.072179
9 0.575978
对于qcut
,
>>> df['cluster'] = pd.qcut(df.a, 5, labels=range(1, 6))
>>> df
a cluster
0 0.060278 3
1 -0.618677 1
2 -0.472467 2
3 1.539958 4
4 -0.181974 2
5 1.563588 5
6 -1.693140 1
7 1.868881 5
8 1.072179 4
9 0.575978 3
对于KBinsDiscretizer
,
>>> (df['cluster'] =
KBinsDiscretizer(n_bins=3, encode='ordinal', strategy='quantile')
.fit_transform(df.a.values.reshape(-1, 1)))
>>> df
a cluster
0 0.060278 1.0
1 -0.618677 0.0
2 -0.472467 0.0
3 1.539958 2.0
4 -0.181974 1.0
5 1.563588 2.0
6 -1.693140 0.0
7 1.868881 2.0
8 1.072179 2.0
9 0.575978 1.0
对于cut
,
>>> df['cluster'] = pd.cut(df.a, 5, labels=range(1, 6))
>>> df
a cluster
0 0.060278 3
1 -0.618677 2
2 -0.472467 2
3 1.539958 5
4 -0.181974 3
5 1.563588 5
6 -1.693140 1
7 1.868881 5
8 1.072179 4
9 0.575978 4
最后,看一下可能有用: pandas.qcut 和 pandas.cut 有什么区别?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.