簡體   English   中英

ValueError:n_splits = 10不能大於每個類中的成員數

[英]ValueError: n_splits=10 cannot be greater than the number of members in each class

我試圖運行以下代碼:

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))長度print(len(y))

我的困惑之一是我不確定members的定義是什么以及在這種情況下class是什么。

問題:如何修復錯誤? 什么是會員? 什么是課程? (在此背景下)

分層意味着保持每個級別中每個級別的比例。 因此,如果您的原始數據集有3個類別,比例分別為60%,20%和20%,那么分層將嘗試在每個折疊中保持該比率。

在你的情況下,

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

所以StratifiedKFold將嘗試在每個折疊中保持這個比例。 現在你指定了10倍(n_splits)。 所以這意味着在單個折疊中,對於'y'級來保持比例,至少2/10 = 0.2個成員。 但是我們不能給少於1個成員(樣本),所以這就是為什么它在那里拋出一個錯誤。

如果不是n_splits=10 ,你設置了n_splits=2 ,那么它就可以了,因為'y'的成員數量將是2/2 = 1.為了n_splits = 10才能正常工作,你需要有每個班級至少10個樣本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM