我正在尝试在两列缺少值的数据上使用DT分类器。由于DT处理遗漏的值,因此我想在不估算任何值的情况下测试模型,即将遗漏的值保留为NaN。但是当我运行模型时,出现值错误
ValueError: Input contains NaN, infinity or a value too large for dtype('float32')
我尝试了以下代码:
train_data = pd.read_csv('./train.csv')
#converting -999 to NAN
train_data.x14[train_data.x14==-999]=np.NaN
train_data.x15[train_data.x15==-999]=np.NaN
train_data = train_data.reset_index()
#defining x and y
x = train_data.iloc[:,1:18]
y = train_data.iloc[:,-1]
print("Sample x data\n", x.head(n=5))
print("Sample y data\n", y.head(n=5))
X_train,X_test,Y_train,Y_test = train_test_split(x, y, test_size=0.30, random_state=0)
X_train = X_train.values
Y_train = Y_train.values
model = DecisionTreeClassifier(max_depth=10,
min_samples_split=5,
random_state=520)
# class_weight='balanced')
model.fit(X_train, Y_train)
答案 0 :(得分:0)
保持NaN
完整的唯一方法是在将数据提供给分类器之前将其删除。
x = train_data.dropna().iloc[:,1:18]
y = train_data.dropna().iloc[:,-1]
您的训练数据(x
和y
)将不包含NaN
(您别无选择),但是至少您的DataFrame
及其缺失值将保持不变(无论出于何种原因,您都希望这样)。