我有以下数据:
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
我有一个库存日记帐,其中包含产品及其相对库存数量(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) 我试图基于 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 对数似然损失的示例将写为:
\ndef 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\nRun Code Online (Sandbox Code Playgroud)\n同样,我需要定义一个自定义评估指标来配合它,例如:
\ndef 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\nRun Code Online (Sandbox Code Playgroud)\n上面两个例子都取自以下存储库:
\n\n我将不胜感激对此的任何帮助,特别是详细的指导,以帮助我学习如何自己做到这一点。
\n根据自定义损失函数的 LGBM 文档: …
我有以下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天每天的销售总数.
有谁知道这是否可以在Mac上实现?
http://swanintelligence.com/multi-cursor-in-jupyter.html
看起来他们正在突出显示整个文本块,然后获得多行光标。我尝试使用option + mouse selectionthen执行此操作cmd + mouse click,但它不起作用。
我正在尝试了解此二进制编码器背后的逻辑。
它会自动获取分类变量并对它们进行虚拟编码(类似于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
pandas ×2
python ×2
binary-data ×1
boosting ×1
grouping ×1
ide ×1
jupyter ×1
lightgbm ×1
mysql ×1
performance ×1
python-3.x ×1
sql ×1