我正在研究一个问题,以根据历史数据预测未来的电子商店销售。我正在使用的功能之一是商品价格(浮动)。我通过实验发现,将其添加到现有功能列表中会降低我的xgboost
模型的拟合和验证准确性(提高预测RMSE)。我怀疑价格的影响可能是高度非线性的,记忆棒,笔记本电脑,手机等的价格达到顶峰。
无论如何,我有以下想法来解决:如何将浮点数商品价格转换为具有指定映射功能的分类变量,例如值范围或分位数?然后,我可以使用训练目标值商品价格 均值编码该分类变量。
这有意义吗?您能否给我一个指向Python“线性/十进制直方图”的指针,该指针返回浮点数量列表,并返回每个浮点所属的bin /十进制的并行列表?
答案 0 :(得分:2)
恕我直言,您可以使用qcut
,KBinsDiscretizer
或cut
。
一些例子,
<html>
<head></head>
<body>
<nav id="navigation">
<div class="container">
<ul>
<li><a href="#">home</a></li>
<li><a href="#">contact</a></li>
</ul>
</div>
</nav>
<div id="main-content">
<div class="container">
<h1>This is your contact page</h1>
<p>Lorem ipsum</p>
</div>
</div>
</body>
</html>
对于>>> 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
最后,查看以下内容可能会很有用:What is the difference between pandas.qcut and pandas.cut?