应用SelectPercentile后报错:数据含np.nan、np.inf或超出float64范围值
解决SelectPercentile因含np.nan、np.inf或数值溢出报错的问题
SelectPercentile依赖的特征评分函数(如f_classif、mutual_info_classif等)无法处理缺失值、无穷值或超出float64范围的数值,必须先完成数据清洗才能正常运行。以下是具体解决步骤:
一、处理缺失值(np.nan)
- 直接删除:快速移除含缺失值的样本或特征,但要警惕数据丢失带来的偏差:
# 删除含缺失值的样本 X_clean = X.dropna(axis=0) # 删除含缺失值的特征 X_clean = X.dropna(axis=1) - 填充替代:根据特征类型选择合适的填充值:
# 数值特征用中位数填充(比均值更抗异常值) X.fillna(X.median(), inplace=True) # 分类特征用众数填充 X.fillna(X.mode().iloc[0], inplace=True) - 模型填充:用KNN或回归模型预测缺失值,适合数据量较大的场景:
from sklearn.impute import KNNImputer imputer = KNNImputer(n_neighbors=3) X_imputed = imputer.fit_transform(X)
二、处理无穷值(np.inf/-np.inf)
先将无穷值替换为NaN,再按缺失值逻辑处理:
import numpy as np X.replace([np.inf, -np.inf], np.nan, inplace=True) # 之后执行缺失值填充步骤
如果业务上有明确逻辑,也可将无穷值替换为特征的极值:
# 用特征最大值替代正无穷,最小值替代负无穷 X.replace(np.inf, X.max().max(), inplace=True) X.replace(-np.inf, X.min().min(), inplace=True)
三、处理超出float64范围的数值
这类数值通常是异常大/小的极值,可通过以下方式处理:
- 检查定位:用
df.describe()查看各特征的极值,定位异常特征; - 特征缩放:用标准化或归一化将数值压缩到合理范围:
from sklearn.preprocessing import StandardScaler scaler = StandardScaler() X_scaled = scaler.fit_transform(X) - 截断异常值:将超出分位数的数值截断为分位数,避免极端值干扰:
# 截断99分位数以外的数值 q99 = X.quantile(0.99) q01 = X.quantile(0.01) X = X.where(X >= q01, q01, axis=1) X = X.where(X <= q99, q99, axis=1)
完整示例代码
import numpy as np import pandas as pd from sklearn.feature_selection import SelectPercentile, f_classif from sklearn.impute import SimpleImputer from sklearn.preprocessing import StandardScaler # 模拟存在问题的数据集 X = pd.DataFrame({ 'feat1': [1, 2, np.nan, 4, 5], 'feat2': [10, np.inf, 30, -np.inf, 50], 'feat3': [1e300, 2e300, 3e300, 4e300, 5e300] }) y = [0, 1, 0, 1, 0] # 1. 替换无穷值为NaN X.replace([np.inf, -np.inf], np.nan, inplace=True) # 2. 填充缺失值 imputer = SimpleImputer(strategy='median') X_imputed = imputer.fit_transform(X) # 3. 缩放数值范围 scaler = StandardScaler() X_scaled = scaler.fit_transform(X_imputed) # 4. 执行特征选择 selector = SelectPercentile(f_classif, percentile=50) X_selected = selector.fit_transform(X_scaled, y)
内容的提问来源于stack exchange,提问作者Ojo Caleb
相关产品推荐
相关产品推荐

