12

私は2つのデータフレームを持つ機械学習計算を行っています.1つは因子用で、もう1つは目標値用です。トレーニングとテストの両方の部分に分割する必要があります。私は道を見つけたようですが、もっとエレガントな解決策を探しています。これが私のコードです:

import pandas as pd
import numpy as np
import random

df_source = pd.DataFrame(np.random.randn(5,2),index = range(0,10,2), columns=list('AB'))
df_target = pd.DataFrame(np.random.randn(5,2),index = range(0,10,2), columns=list('CD'))

rows = np.asarray(random.sample(range(0, len(df_source)), 2))

df_source_train = df_source.iloc[rows]
df_source_test = df_source[~df_source.index.isin(df_source_train.index)]
df_target_train = df_target.iloc[rows]
df_target_test = df_target[~df_target.index.isin(df_target_train.index)]

print('rows')
print(rows)
print('source')
print(df_source)
print('source train')
print(df_source_train)
print('source_test')
print(df_source_test)

----編集済み-unutbuによるソリューション(中間化)---

np.random.seed(2013)
percentile = .6
rows = np.random.binomial(1, percentile, size=len(df_source)).astype(bool)

df_source_train = df_source[rows]
df_source_test = df_source[~rows]
df_target_train = df_target[rows]
df_target_test = df_target[~rows]
4

5 に答える 5

10

以下に、追加の変数を含まない私のソリューションを示します。

  1. メソッドを使用.sampleしてデータのサンプルを取得する
  2. サンプルでメソッドを使用.indexして、インデックスを取得します
  3. slice()2 番目のインデックスで ing を適用するdataframe

たとえば、X と Y があり、それぞれ 10 個のサンプルを取得したいとします。もちろん、同じサンプルでなければなりません。

X_sample = X.sample(10)
y_sample = y[X_sample.index]
于 2019-02-17T08:15:43.343 に答える
0

さらに簡単な解決策は次のとおりだと思います。

from sklearn.model_selection import train_test_split

df_source_train, df_source_test, df_target_train, df_target_test = train_test_split(df_source, df_target, train_size=.6)
于 2021-02-13T02:47:22.377 に答える