我必须用Scikitlearn从Pandas数据框中剪切y(预测)列吗?

2024-03-29 05:15:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经将Pandas数据帧分为train_Xtrain_y两部分,其中train_X有所有N列,train_y只有第N列,描述了我想要预测的变量。目前我正在做:

train_X.drop("N-th column name", axis=1, inplace=True)
model = SomeSklearnModel()
model.fit(train_X, train_y)

我是否必须“手工”(即在train_X上使用drop()),或者我可以只做第三行,而Scikit learn将“知道”哪个列是train_y,而不将其用于模型训练(仅用于检查结果)


Tags: 数据nametruepandasmodelcolumntrainscikit
1条回答
网友
1楼 · 发布于 2024-03-29 05:15:59

sklearn估计器上调用fit时,必须显式声明Xy。通常,当您准备将数据拆分为训练集和测试集时,X应该只包含模型特性,所以不应该包含目标y
有很多方法可以做到这一点,但这里以iris数据集为例介绍了几种常见的方法:

# Setup
df_iris = pd.DataFrame({'sepal_length': [5.0, 4.8, 5.8, 5.7, 4.5, 6.0, 6.3, 4.8, 5.6, 6.4],
                        'sepal_width': [3.2, 3.4, 2.8, 4.4, 2.3, 3.0, 2.5, 3.4, 3.0, 2.8],
                        'petal_length': [1.2, 1.6, 5.1, 1.5, 1.3, 4.8, 5.0, 1.9, 4.5, 5.6],
                        'petal_width': [0.2, 0.2, 2.4, 0.4, 0.3, 1.8, 1.9, 0.2, 1.5, 2.1],
                        'target': ['setosa', 'setosa', 'virginica', 'setosa', 'setosa','virginica',
                                   'virginica', 'setosa', 'versicolor', 'virginica']})

如果目标y是“n”的第n列,则可以使用^{}切片:

X = df_iris.iloc[:, :-1]
y = df_iris.iloc[:, -1]

另一种方法是使用^{},它同时删除并返回要赋值的列:

X = df_iris.copy()
y = X.pop('target')

或者对^{}使用您自己的方法:

X = df_iris.drop('target', axis=1)
y = df_iris['target']

相关问题 更多 >