小编Neg*_*ion的帖子

如何根据组 ID 生成训练测试拆分?

我有以下数据:

pd.DataFrame({'Group_ID':[1,1,1,2,2,2,3,4,5,5],
          'Item_id':[1,2,3,4,5,6,7,8,9,10],
          'Target': [0,0,1,0,1,1,0,0,0,1]})

   Group_ID Item_id Target
0         1       1      0
1         1       2      0
2         1       3      1
3         2       4      0
4         2       5      1
5         2       6      1
6         3       7      0
7         4       8      0
8         5       9      0
9         5      10      1
Run Code Online (Sandbox Code Playgroud)

我需要根据“Group_ID”将数据集拆分为训练集和测试集,以便 80% 的数据进入训练集,20% 进入测试集。

也就是说,我需要我的训练集看起来像:

    Group_ID Item_id Target
0          1       1      0
1          1       2      0
2          1       3      1
3          2       4      0
4          2       5      1
5          2       6      1 …
Run Code Online (Sandbox Code Playgroud)

grouping machine-learning python-3.x pandas train-test-split

15
推荐指数
1
解决办法
8097
查看次数

需要扩展库存日志(日志)熊猫数据框,以包括每个产品ID的所有日期

我有一个库存日记帐,其中包含产品及其相对库存数量(resulting_qty)以及每次添加或减少库存时的损失/收益(delta_qty)。

问题是库存记录不会每天更新,而是仅在发生库存变化时才更新。由于这个原因,很难提取给定日期所有物料的总库存数量,因为某些物料在某些天没有记录,尽管事实是,鉴于它们的最后一个条目result_qty大于0,它们确实有可用的库存。从逻辑上讲,这意味着一个项目在一定数量的天数内没有变化,该天数等于最大日期和最后记录的日期之间的天数。

我的数据看起来像这样,但实际上有数千个产品ID

| date       | timestamp           | pid | delta_qty | resulting_qty |
|------------|---------------------|-----|-----------|---------------|
| 2017-03-06 | 2017-03-06 12:24:22 | A   | 0         | 0.0           |
| 2017-03-31 | 2017-03-31 02:43:11 | A   | 3         | 3.0           |
| 2017-04-08 | 2017-04-08 22:04:35 | A   | -1        | 2.0           |
| 2017-04-12 | 2017-04-12 18:26:39 | A   | -1        | 1.0           |
| 2017-04-19 | 2017-04-19 09:15:38 | A   | -1        | 0.0           |
| 2019-01-16 | 2019-01-16 23:37:17 …
Run Code Online (Sandbox Code Playgroud)

python performance inventory-management pandas

14
推荐指数
1
解决办法
210
查看次数

需要帮助在 lightGBM(零膨胀对数正态损失)中实现自定义损失函数

我试图基于 lightGBM 中的这篇论文来实现这个零膨胀对数正态损失函数(https://arxiv.org/pdf/1912.07753.pdf)(第 5 页)。但是,不可否认,我只是不知道怎么做。我不明白如何获取这个函数的梯度和粗麻布,以便在 LGBM 中实现它,而且我过去从来不需要实现自定义损失函数。

\n

本文作者开源了他们的代码,该函数在tensorflow中可用(https://github.com/google/lifetime_value/blob/master/lifetime_value/zero_inflated_lognormal.py),但是我\xe2\x80\x99m无法将其转换为适合 LightGBM 中自定义损失函数所需的参数。LGBM 如何接受自定义损失函数\xe2\x80\x94 对数似然损失的示例将写为:

\n
def loglikelihood(preds, train_data):\n    labels = train_data.get_label()\n    preds = 1. / (1. + np.exp(-preds))\n    grad = preds - labels\n    hess = preds * (1. - preds)\n    return grad, hess\n
Run Code Online (Sandbox Code Playgroud)\n

同样,我需要定义一个自定义评估指标来配合它,例如:

\n
def binary_error(preds, train_data):\n    labels = train_data.get_label()\n    preds = 1. / (1. + np.exp(-preds))\n    return \'error\', np.mean(labels != (preds > 0.5)), False\n
Run Code Online (Sandbox Code Playgroud)\n

上面两个例子都取自以下存储库:

\n

https://github.com/microsoft/LightGBM/blob/e83042f20633d7f74dda0d18624721447a610c8b/examples/python-guide/advanced_example.py#L136

\n

我将不胜感激对此的任何帮助,特别是详细的指导,以帮助我学习如何自己做到这一点。

\n

根据自定义损失函数的 LGBM 文档: …

python machine-learning boosting loss-function lightgbm

8
推荐指数
1
解决办法
4800
查看次数

无法查询超过30天

我有以下MySQL查询:

SELECT
CONVERT_TZ(date1, '+0:00', '-7:00') as date,
sum(base_subtotal) as `base_subtotal`
FROM sales
WHERE date1 > (NOW() - interval 90 DAY)
GROUP BY DAY(date)
ORDER BY date DESC; 
Run Code Online (Sandbox Code Playgroud)

尽管提取了90天的数据,MySQL仍然只返回任何特定日期间隔的30天尾部.所以,如果今天是6月11日,并且我用"interval 30 day"命令提取请求,我将获得从现在到30天之前的所有日期.但是,如果我用60天的命令做同样的事情,我会在一个月前获得30天前开始的日期,换句话说,我会在4月14日到5月11日之间得到日期,但奇怪的是也是5月31日.

每天的总和也开始变大,当我运行特定月份的代码来验证总数时,说我使用命令"HERE Date(date1) BETWEEN '2018-05-01' AND '2018-05-31'"我得到不同的值.

我究竟做错了什么?我读了一些关于Java中"溢出"错误的内容,但不确定这是发生了什么.我只是想看看过去90天每天的销售总数.

mysql sql

2
推荐指数
1
解决办法
63
查看次数

Mac 上的 Jupyter 多行光标

有谁知道这是否可以在Mac上实现?

http://swanintelligence.com/multi-cursor-in-jupyter.html

看起来他们正在突出显示整个文本块,然后获得多行光标。我尝试使用option + mouse selectionthen执行此操作cmd + mouse click,但它不起作用。

ide jupyter jupyter-notebook multicursorediting

2
推荐指数
1
解决办法
3504
查看次数

该二进制编码器功能如何工作?

我正在尝试了解此二进制编码器背后的逻辑。

它会自动获取分类变量并对它们进行虚拟编码(类似于sklearn上的一键编码),但是减少的输出列数等于唯一值长度的log2。

基本上,当我使用该库时,我注意到我的虚拟变量仅限于少数唯一值。在进一步研究中,我注意到了这一点@staticmethod,它在分类变量中采用了唯一值len的log2。

我的问题是为什么?我意识到这降低了输出数据的维数,但是这样做的背后逻辑是什么?使用log2如何确定表示数据所需的位数?

 def calc_required_digits(X, col):
        """
        figure out how many digits we need to represent the classes present
        """
        return int( np.ceil(np.log2(len(X[col].unique()))) )
Run Code Online (Sandbox Code Playgroud)

完整的源代码:

"""Binary encoding"""

import copy
import pandas as pd
import numpy as np
from sklearn.base import BaseEstimator, TransformerMixin
from category_encoders.ordinal import OrdinalEncoder
from category_encoders.utils import get_obj_cols, convert_input

__author__ = 'willmcginnis'


[docs]class BinaryEncoder(BaseEstimator, TransformerMixin):
    """Binary encoding for categorical variables, similar to onehot, but stores categories as binary bitstrings.

    Parameters
    ----------

    verbose: int
        integer indicating …
Run Code Online (Sandbox Code Playgroud)

binary-data categorical-data dummy-variable one-hot-encoding

1
推荐指数
1
解决办法
1456
查看次数