一、数据标准化方法:log、zscore、minmax各自使用场景
1.1. Log变换(对数变换)
x ′ = log ( x ) 或 log 10 ( x ) x' = \log(x) \quad \text{或} \quad \log_{10}(x) x′=log(x)或log10(x)
- 适用场景 :
- 右偏/正偏分布数据(长尾在右侧)
- 数据范围跨越多个数量级
- 缺点 :
- 不能处理零或负值
- 变换后解释性降低
1.2. Z-score标准化
x ′ = x − μ σ x' = \frac{x - \mu}{\sigma} x′=σx−μ
- 适用场景 :
- 数据近似正态分布,需要保留异常值信息
- 优点 :
- 保持数据形状
- 均值为0,标准差为1
- 保留异常值信息
- 缺点 :
- 受异常值影响大
1.3. Min-Max标准化
x ′ = x − min ( X ) max ( X ) − min ( X ) x' = \frac{x - \min(X)}{\max(X) - \min(X)} x′=max(X)−min(X)x−min(X)
- 适用场景 :
- 数据边界已知,需要统一量纲
- 需要固定范围(如神经网络)
- 优点 :
- 保持原始数据关系
- 缺点 :
- 对异常值敏感
- 可能失去数据方差信息
- 新数据可能超出原定范围
二、还有那些的数据标准化的方法?各自有什么优点?
2.1. Robust Scaling
x ′ = x − median ( X ) IQR ( X ) x' = \frac{x - \text{median}(X)}{\text{IQR}(X)} x′=IQR(X)x−median(X)
2.2. MaxAbs Scaling
x ′ = x max ( ∣ X ∣ ) x' = \frac{x}{\max(|X|)} x′=max(∣X∣)x
2.3. Box-Cox变换
x ′ = { x λ − 1 λ , λ ≠ 0 log ( x ) , λ = 0 x' = \begin{cases} \frac{x^\lambda - 1}{\lambda}, & \lambda \neq 0 \\ \log(x), & \lambda = 0 \end{cases} x′={λxλ−1,log(x),λ=0λ=0
三、介绍一下lightgbm原理
LGB最显著的优点就是快,其原理之前看过很多次,但是发现还是讲的不是很流畅主要是因为对每个方法理解的不够深。于是找来LightGBM的原文
首先要知道,lgb模型都是处理二维结构化数据的。因此,lgb速度优化的两大算法就是从如何减少这两个维度开始的,知道这个就会比较清楚的理解lgb的几个算法是在干什么。
3.1. 基于梯度的单边采样(Gradient-based One-Side Sampling,GOSS)
三个关键词:梯度、单边、采样。简单来说,就是根据样本梯度来对梯度小的这边样本进行采样,而对梯度大的这边样本保留。
比如,我有训练数据1000w,设置梯度大的样本的保留10%,而梯度小的样本保留20%。算法上就是先按样本梯度对样本降序排序,保留梯度处于前10%的样本(100w),再从剩下的900w梯度较小样本随机挑选200w(1000w*20%)样本。这样的话样本量就从1000w减小到了300w,加快训练速度。
3.1.1. 为什么不完全丢弃小梯度样本?
- 全部丢弃会改变原始样本分布,影响模型性能;
- 通过 采样 + 梯度调整权重 的方式,尽量恢复真实分布;
- 实验显示:不仅没有性能下降,反而可能提升(多样性提升,类似 dropout)。
实验表明:GOSS 在保留模型性能的同时,有效降低了训练成本 ;同时也提升了模型泛化能力,可能因为引入了更多训练多样性(类似于 dropout);
3.2. 互斥特征捆绑(EFB)
Exclusive Feature Bundling,互斥特征捆绑。前面GOSS可以通过减少样本加速模型训练,而EFB可以通过减少特征个数使数据规模进一步变小。
比如在推荐系统里可能特征非常多,达到几万维甚至更多,但其中很多特征是互斥的,互斥指的是一些特征很少同时出现非0值,类似one-hot特征。lgb的思想就是把这些特征捆绑在一起形成一个新的特征,以减少特征数量,提高训练速度。
3.2.1. 首先介绍如何判定哪些特征应该捆绑在一起?
EFB算法采用 构图(build graph) 的思想,将特征作为节点,不互斥的特征之间进行连边,然后从图中找出所有的捆绑特征集合。这个问题本质上是图着色问题(Graph Coloring Problem),但图着色是NP-hard问题,因此EFB采用了近似的贪心策略解决办法。
它允许特征之间存在少数样本点不互斥(例如在某些样本中同时为非0),并设置一个最大冲突阈值 K
。选择合适的 K
值可以在准确性和训练效率上取得良好的权衡(trade-off)。
下面是EFB的特征捆绑的贪心策略流程:
- 将特征作为图的顶点;
- 对于存在同时不为0样本的特征对进行连边,并以样本个数作为边的权重;
- 对特征按照度(与其他特征的冲突数)进行降序排序,度越大说明越不容易与其他特征捆绑;
- 设置最大冲突阈值
K
,遍历每个特征并尝试将其加入已有的特征捆绑簇中:- 若加入某簇后的冲突数不超过
K
,则将该特征加入该簇; - 否则,新建一个特征簇,将其加入其中。
- 若加入某簇后的冲突数不超过
3.2.2. 如何将特征捆绑簇里面的所有特征捆绑(合并)为一个特征?
EFB采用 偏移常数(offset) 的方式来合并互斥特征,同时保证之后可以分离出原始特征。
3.2.2.1. 合并策略示例:
- 设特征A取值范围为
[0, 10)
,特征B取值范围为[0, 20)
; - 给B加上一个偏移常量
10
,使其范围变为[10, 30)
; - 合并后的特征范围为
[0, 30)
,可以通过值的区间还原出原始特征来源。
3.2.2.2. 在 LightGBM 中的实现:
由于LightGBM使用 直方图算法(Histogram-based),特征值被分桶(bin),合并操作实际上就是:
- 给每个特征分配的bin编号加上偏移量(即累加前面特征的bin数量);
- 同时记录每个特征的binRange,便于后续恢复原始特征。
这种合并策略高效且简单,适合稀疏特征的处理,能大幅减少特征数量,提高训练效率。
四、讲讲esmm和mmoe区别
在多任务学习(Multi-Task Learning)中,ESMM(Entire Space Multi-Task Model) 和 MMOE(Multi-gate Mixture-of-Experts) 都是经典结构。
4.1. ESMM(Entire Space Multi-Task Model)
- 采用共享底层+任务特定塔式结构
- 显式建模CTR和CTCVR任务
- 通过
pCTCVR = pCTR * pCVR
概率关系连接任务
4.2. MMOE(Multi-gate Mixture-of-Experts)
- 包含多个专家网络(Expert)和门控机制(Gate)
- 每个任务有独立门控网络
- 专家网络共享,门控网络决定任务特定组合
五、215. 数组中的第K个最大元素(力扣hot100_堆_中等)

- 思路:这道题用堆和快排都可以,感觉写py的话,就算写了堆也要问快排。
- 代码:
python
class Solution:
def findKthLargest(self, nums, k):
def quick_sort(nums, k):
pivot = random.choice(nums)
big, equal, small = [], [], []
for num in nums:
if num > pivot:
big.append(num)
elif num < pivot:
small.append(num)
else:
equal.append(num)
if k <= len(big):
return quick_sort(big, k)
if k > len(nums)-len(small):
return quick_sort(small, k-len(nums)+len(small))
return pivot
return quick_sort(nums, k)