【问题标题】:ShuffleSplit of Sklearn issueSklearn 问题的 ShuffleSplit
【发布时间】:2018-09-27 04:55:33
【问题描述】:

我有一个名为 df_noyau_yes 的数据集,我想应用 ShuffleSplit 将其拆分为训练集和测试集以训练自动编码器。

问题是这个函数返回洗牌数据的索引,我试图提取这些索引的数据以将它们提供给自动编码器,但它不起作用,它显示错误KeyError 223

代码如下:

rs = ShuffleSplit(n_splits=2, test_size=.25, random_state=0)
rs.get_n_splits(df_noyau_yes)

for train_index, test_index in rs.split(df_noyau_yes):
   print("TRAIN:", train_index, "TEST:", test_index)
   #X_train, X_test = df_noyau_yes[train_index], df_noyau_yes[test_index]
x_train=[]
for x in train_index:
    x_train = np.append(x_train, df_noyau_yes[x])
    print(x_train)

print("training set",x_train)

有什么解决办法吗??

【问题讨论】:

  • df_noyau_yes 是熊猫数据框吗?如果是,那么您无法像在此处那样通过简单的索引来访问样本。
  • 是的,它是一个熊猫数据框。那我该怎么做呢?
  • 问题解决了吗?

标签: python split sklearn-pandas autoencoder


【解决方案1】:

对于按行和列的索引选择数据框值,使用iloc

来自the documentation

.iloc 属性是主要的访问方法。以下是 有效输入:

An integer e.g. 5
A list or array of integers [4, 3, 0]
A slice object with ints 1:7
A boolean array
A callable, see Selection By Callable

因此,您只需提供您的train_indextest_index 即可获得适当的数组。

x_train = df_noyau_yes.iloc[train_index].copy()
x_test = df_noyau_yes.iloc[test_index].copy()

我在这里使用copy() 作为额外的预防措施。因为如果你不使用copy(),并尝试更改x_train 或x_test 中的值,则会引发警告。

【讨论】:

  • 我知道 'iloc' 方法,但我需要尝试一些对数据进行洗牌的方法:动态而非静态。
  • @Mari 这就是 ShuffleSplit 在这里所做的。请详细说明您的用例。
猜你喜欢
  • 2017-05-30
  • 2018-05-18
  • 2015-06-05
  • 1970-01-01
  • 2019-08-09
  • 2017-01-13
  • 1970-01-01
  • 2015-03-03
  • 2017-09-14
相关资源
最近更新 更多