次のコードを実行しようとしています:
_from sklearn.model_selection import StratifiedKFold
X = ["hey", "join now", "hello", "join today", "join us now", "not today", "join this trial", " hey hey", " no", "hola", "bye", "join today", "no","join join"]
y = ["n", "r", "n", "r", "r", "n", "n", "n", "n", "r", "n", "n", "n", "r"]
skf = StratifiedKFold(n_splits=10)
for train, test in skf.split(X,y):
print("%s %s" % (train,test))
_
しかし、次のエラーが発生します。
_ValueError: n_splits=10 cannot be greater than the number of members in each class.
_
私はここを見てきました scikit-learnエラー:yで最も人口の少ないクラスにはメンバーが1つしかない ですが、コードのどこに問題があるのか本当にわかりません。
私のリストはどちらも14 print(len(X))
print(len(y))
の長さです。
私の混乱の一部は、members
が何として定義されているか、およびこのコンテキストでのclass
が何であるかがわからないことです。
質問:エラーを修正するにはどうすればよいですか?会員とは?クラスとは? (このコンテキストでは)
階層化とは、各折り目の各クラスの比率を維持することです。したがって、元のデータセットに60%、20%、20%の比率で3つのクラスがある場合、層別化は各比率でその比率を維持しようとします。
あなたの場合、
X = ["hey", "join now", "hello", "join today", "join us now", "not today",
"join this trial", " hey hey", " no", "hola", "bye", "join today",
"no","join join"]
y = ["n", "r", "n", "r", "r", "n", "n", "n", "n", "y", "n", "n", "n", "y"]
合計14のサンプル(メンバー)が分布しています。
class number of members percentage
'n' 9 64
'r' 3 22
'y' 2 14
したがって、StratiifiedKFoldは、各フォールドでその比率を維持しようとします。これで、10分割(n_splits)が指定されました。つまり、これは、1つのフォールドで、クラス 'y'が比率を維持するために、少なくとも2/10 = 0.2メンバーを意味します。ただし、1未満のメンバー(サンプル)を指定することはできないため、そこでエラーがスローされます。
n_splits=10
の代わりにn_splits=2
を設定した場合、 'y'のメンバー数は2/2 = 1になるため、機能します。n_splits = 10
が機能するためには正しくは、クラスごとに少なくとも10個のサンプルが必要です。