将数字特征转换为分类特征

时间:2020-01-03 21:19:09

标签: python python-3.x pandas numpy histogram

我正在研究一个问题,以根据历史数据预测未来的电子商店销售。我正在使用的功能之一是商品价格(浮动)。我通过实验发现,将其添加到现有功能列表中会降低我的xgboost模型的拟合和验证准确性(提高预测RMSE)。我怀疑价格的影响可能是高度非线性的,记忆棒,笔记本电脑,手机等的价格达到顶峰。

无论如何,我有以下想法来解决:如何将浮点数商品价格转换为具有指定映射功能的分类变量,例如值范围或分位数?然后,我可以使用训练目标值商品价格 均值编码该分类变量。

这有意义吗?您能否给我一个指向Python“线性/十进制直方图”的指针,该指针返回浮点数量列表,并返回每个浮点所属的bin /十进制的并行列表?

1 个答案:

答案 0 :(得分:2)

恕我直言,您可以使用qcutKBinsDiscretizercut

一些例子,

<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?

相关问题