You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

特征工程时Jupyter Notebook内核崩溃问题求助

解决高维特征下Jupyter内核崩溃问题

问题根源

生成2阶多项式后,特征量从1000暴涨到约49万,8700个样本对应的矩阵元素量超过40亿,直接用DataFrame存储并执行StandardScaler.fit_transform会耗尽内存,导致Jupyter内核崩溃。

具体解决方案

1. 跳过DataFrame转换,直接用Numpy数组处理

PolynomialFeatures输出的Numpy数组比Pandas DataFrame内存开销小得多(无需存储列名、索引等元数据),直接用数组完成缩放:

from sklearn.preprocessing import PolynomialFeatures, StandardScaler

# 生成多项式特征,保留Numpy数组格式
poly = PolynomialFeatures(2)
X_poly = poly.fit_transform(X)

# 直接对Numpy数组做标准化
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_poly)

2. 先做特征筛选,削减维度

49万特征中存在大量冗余或低信息特征,先筛选再缩放可大幅降低内存压力:

  • 移除低方差特征:
from sklearn.feature_selection import VarianceThreshold

# 过滤方差低于0.01的特征(阈值可根据数据调整)
selector = VarianceThreshold(threshold=0.01)
X_poly_selected = selector.fit_transform(X_poly)
print(f"筛选后特征数量:{X_poly_selected.shape[1]}")

# 再执行标准化
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_poly_selected)
  • 选择与目标变量高相关特征:
from sklearn.feature_selection import SelectKBest, f_regression

# 假设y是目标变量,挑选Top 5000个最相关特征(数量可自定义)
selector = SelectKBest(f_regression, k=5000)
X_poly_selected = selector.fit_transform(X_poly, y)
print(f"筛选后特征数量:{X_poly_selected.shape[1]}")

# 执行标准化
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_poly_selected)

3. 增量式计算标准化参数

如果必须保留全量特征,可分批次计算均值和方差,再分步缩放,避免一次性加载全量数据:

from sklearn.preprocessing import StandardScaler
import numpy as np

scaler = StandardScaler()
batch_size = 1000  # 按批次大小调整,适配你的内存

# 分批次拟合,计算全局均值和方差
for i in range(0, X_poly.shape[0], batch_size):
    batch = X_poly[i:i+batch_size]
    scaler.partial_fit(batch)

# 分批次完成标准化
X_train_scaled = np.zeros_like(X_poly)
for i in range(0, X_poly.shape[0], batch_size):
    batch = X_poly[i:i+batch_size]
    X_train_scaled[i:i+batch_size] = scaler.transform(batch)

4. 降低数据精度减少内存占用

如果业务允许牺牲部分精度,将数据类型从默认的float64转为float32,可直接减少一半内存开销:

X_poly = X_poly.astype(np.float32)
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_poly)

5. 调整Jupyter内存限制

如果机器有足够物理内存,可修改Jupyter启动参数提升内存上限:

  • 启动时添加参数:
jupyter notebook --NotebookApp.max_buffer_size=10737418240  # 10GB,根据机器内存调整
  • 或修改Jupyter配置文件,找到c.NotebookApp.max_buffer_size并设置对应值。

内容的提问来源于stack exchange,提问作者8Simon8

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 19:15:50