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

Scikit-learn train_test_split返回异常值问题求助

解决Scikit-learn train_test_split中X_test出现异常值的问题

嘿,我一眼就看到你代码里的关键问题了——传入train_test_split的参数搞混了!这才导致你误以为X_test出现了不属于原数据集的异常值,咱们来一步步理清楚:

1. 核心问题在哪?

你现在的代码里:

X_train, X_test, y_train,y_test = train_test_split(heart_data,hd_y, test_size=0.2, random_state=42)

第一个参数heart_data是完整的数据集(包含所有特征+最后一列的目标值),第二个参数hd_y又是从这个数据集里单独提取的目标列。这就造成了两个问题:

  • X_train和X_test其实是完整数据集的拆分,里面包含了目标列,你可能误以为X只是特征,所以看到目标列的数值或者缺失值时,错当成了异常值
  • Cleveland心脏病数据集本身就有缺失值(用?标记),用np.genfromtxt直接读取时,这些?会被转成nan,要是没提前处理,这些nan也会被你当成“不属于原数据集的异常值”

2. 修正后的正确代码

咱们把特征和目标列严格分开,只把特征作为X传入拆分函数:

from sklearn.model_selection import train_test_split
import numpy as np

# 读取数据集,同时处理缺失值(把?转成nan)
heart_data = np.genfromtxt("cleveland.txt", delimiter=",", missing_values="?", filling_values=np.nan)
# 特征列:取前13列(索引0到12)
X = heart_data[:, :13]
# 目标列:取第14列(索引13)
y = heart_data[:, 13]

# 正确拆分特征与目标
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 可以先看形状确认拆分是否正确
print("X_train shape:", X_train.shape)
print("X_test shape:", X_test.shape)

3. 额外的小建议

  • 先验证数据:你可以用np.unique(X)查看原特征的所有取值,对比X_test的数值,确认是不是真的有异常值,很多时候只是误解
  • 处理缺失值:如果确实有nan,可以用Scikit-learn的SimpleImputer填充,比如用均值填充:
    from sklearn.impute import SimpleImputer
    imputer = SimpleImputer(strategy='mean')
    X_train = imputer.fit_transform(X_train)
    X_test = imputer.transform(X_test)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:32:31