pandas 使用者警告:y中填充最少的类只有1个成员,小于n_splits=5

qxsslcnc  于 2022-11-20  发布在  其他
关注(0)|答案(1)|浏览(239)

我尝试在一个数据框上使用Grid Search for Random Forest。代码如下:

# Standardization
x=df.iloc[:,:-1]
y=df.iloc[:,-1]
x_cols=x.columns
# Splitting the dataset into the Training set and Test set
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=0)

x = StandardScaler().fit_transform(x)
print(pd.DataFrame(x).head())

# Random Forest 
from sklearn.ensemble import RandomForestClassifier
rfc=RandomForestClassifier(random_state=42)
param_grid = { 'n_estimators':[100,200,300],'min_samples_split':[2,3,4,5],'max_depth':[4,5,6],
              'criterion':['gini', 'entropy']}
CV_rfc = GridSearchCV(estimator=rfc, param_grid=param_grid, cv= 5)
CV_rfc.fit(x, y)

print(CV_rfc.best_params_)

它给我以下错误:
使用者警告:y中填充最少的类只有1个成员,小于n_splits=5。%(min_groups,self.n_splits)),UserWarning)
有人能帮我解决这个错误吗?这样我就可以得到正确的参数了。

r1zk6ea1

r1zk6ea11#

根据GridSearchCV文档:
对于integer/None输入,如果估计量是分类器,并且y是二进制或多类,则使用StratifiedKFold。
由于您要求5个分割,这意味着y中表示的所有类都需要至少表示5次,才能存在于所有分割中。如果不想使用分层交叉验证,可以改用 cv=KFold(5),这将创建5个没有分层的组。
下面是一个在GridSearchCV中使用KFold拆分的示例,来自Scikit Learn文档。

相关问题