scikit learn 的训练测试拆分导致训练数据中只有一个唯一值的特征

Posted

技术标签:

【中文标题】scikit learn 的训练测试拆分导致训练数据中只有一个唯一值的特征【英文标题】:train-test split of scikit learn resulting in features having only one unique value in train data 【发布时间】:2019-06-18 03:29:45 【问题描述】:

我正在尝试训练一个多元线性回归模型。我有一个名为“main”的数据集。该数据集中的分类变量很少。我对分类变量进行了虚拟化。假设虚拟化后得到的列是A、B、C、D等。现在,当我尝试在此主数据集上运行训练测试拆分时,由此获得的训练数据集在其中一列中只有值 0。我该如何克服这个问题。

我使用的代码是:

用于训练测试拆分:

from sklearn.model_selection import train_test_split

np.random.seed(0)
df_train, df_test = train_test_split(main, train_size = 0.7, test_size = 0.3, random_state = 100)

在运行以下代码时:

main.columns[main.nunique() == 1]

结果是:Index([], dtype='object')

当运行下面的火车数据代码时:

 df_train.columns[df_train.nunique() == 1]

结果是:Index(['A', 'D', 'S'], dtype='object')

我希望生成的训练集包含具有所有值组合的特征。但是,这种拆分在某些功能上只给了我一个价值

编辑:我检查了这些列中的唯一值,并且这些列高度不平衡,只有一个值出现在正面情况下。我尝试分层,它至少需要两排正类。许多列都是这种情况。所以我不能在训练数据集中单独包含这些列,因为它需要为所有列编写代码。我希望这能自动完成。

【问题讨论】:

你试过train_test_splitstratify参数吗? 如果您显示主数据框内的内容会很有帮助 stratify 参数听起来会有所帮助,但这很难用数据或至少用相关列的 value_counts 来剖析。 【参考方案1】:

您是否尝试过更改 random_state 值?

【讨论】:

以上是关于scikit learn 的训练测试拆分导致训练数据中只有一个唯一值的特征的主要内容,如果未能解决你的问题,请参考以下文章

没有 scikit-learn 的分层训练/验证/测试拆分

本守则是啥意思? (训练测试拆分 Scikit Learn)

在 Python Scikit-Learn 中训练测试拆分得分高但 CV 得分低

Scikit-Learn One-hot-encode 在训练/测试拆分之前或之后

使用带测试训练拆分的 DBSCAN 进行分类

Scikit 学习系列拆分训练测试