Python和GridSearchCV如何在使用交叉验证和决策树分类器时消除输入包含NaN错误?

数据挖掘 Python 决策树 交叉验证 网格搜索
2022-02-22 13:41:59

我正在尝试对 kaggle 的 Titanic 数据集的决策树分类器进行交叉验证。清理数据后的第一步是拆分成训练集和测试集:

from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(train, Y, test_size=0.2, random_state=0)

然后将数字转换为缩放值:

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
x_train = sc.fit_transform(x_train)
x_test = sc.transform(x_test)

此外:

from sklearn.tree import DecisionTreeClassifier
classifier = DecisionTreeClassifier()

对于网格搜索,我使用了 GridSearchCV:

#Make a grid search
from sklearn.model_selection import GridSearchCV
tree_param = [{'criterion': ['entropy', 'gini'], 'max_depth': [2,3, 4]}]

最后将 GridSearchCV 分类器放入数据中:

clf = GridSearchCV(classifier, tree_param, cv=4)
clf.fit(X=x_train, y=y_train)

我得到的错误如下:

ValueError:输入包含 NaN、无穷大或对于 dtype('float32') 来说太大的值。

我检查了我的x_trainy_train集合,它们都包含特定范围内的数值:

在此处输入图像描述

2个回答

您应该估算缺失值,尝试使用:

from sklearn.impute import SimpleImputer
imp = SimpleImputer(missing_values=np.nan, strategy='mean')
imp.fit(x_train)
x_train = imp.transform(x_train)
x_test = imp.transform(x_test)

请注意,我只适合训练数据,因此您不会将信息泄露给测试。

我的问题是数据集作为数据框。

一旦我使用以下方法阅读它们:

X = X.iloc[:, [0,8]].values

它被转换为int32列表并且错误消失了。