拟合决策树分类器时值错误,保持NaN值不变

时间:2019-12-08 01:00:02

标签: python

我正在尝试在两列缺少值的数据上使用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)

1 个答案:

答案 0 :(得分:0)

保持NaN完整的唯一方法是在将数据提供给分类器之前将其删除。

x = train_data.dropna().iloc[:,1:18]
y = train_data.dropna().iloc[:,-1]

您的训练数据(xy)将不包含NaN(您别无选择),但是至少您的DataFrame及其缺失值将保持不变(无论出于何种原因,您都希望这样)。