首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在sklearn中,cross_val_score对不同的分类器的行为不同。

在sklearn中,cross_val_score对不同的分类器的行为不同。
EN

Stack Overflow用户
提问于 2020-05-10 12:21:37
回答 1查看 306关注 0票数 0

我对cross_val_score()sklearn上遇到了一些困难。

我用以下代码实例化了一个KNeighborsClassifier

代码语言:javascript
复制
clf = KNeighborsClassifier(n_neighbors=28)

然后,我将使用交叉验证来了解此分类器在我的特征df (x)和目标序列(y)上的准确性,如下所示:

代码语言:javascript
复制
cv_score_av = np.mean(cross_val_score(clf, x, y, cv=5))

每次运行脚本时,我都希望获得不同的结果,但是没有一个选项可以像RandomForestClassifier()那样设置RandomForestClassifier()。是否有一种方法可以在每次运行时获得不同的结果,或者在我的cross_val_score模型上运行KNeighborsClassifier之前,我必须随机地手动对数据进行洗牌。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-10 13:06:05

从您的部分来看,这里似乎有一些误解;随机森林中的random_state参数是指算法本身,而不是交叉验证部分。在这里,这样的论点是必要的,因为RF在模型构建中确实包含了一些随机性(事实上,正如alforithm的名称所暗示的那样);但是knn,相反,是一个确定性的算法,所以原则上它不需要使用任何random_state

尽管如此,您的问题确实是正确的;我曾在评论上讨论过cross_val_score中这种烦人和不方便的混乱论点。深入了解文档,我们可以看到,在遮罩下,函数使用StratifiedKFoldKFold来构建折叠:

cv : int,交叉验证生成器或可迭代的可选。 对于整数/无输入,如果估计器是分类器,且y为二进制或多类,则使用StratifiedKFold。在所有其他情况下,都使用KFold

从链接的文档页面中可以很容易地看到,这两个函数都使用shuffle=False作为默认值。

无论如何,解决方案很简单,包含一行额外的代码;您只需要用调用先前定义的cv=5对象来替换shuffle=True即可。

代码语言:javascript
复制
from sklearn.model_selection import StratifiedKFold

skf = StratifiedKFold(n_splits=5, shuffle=True)
cv_score_av = np.mean(cross_val_score(ml_10_knn, x, y, cv=skf))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61711886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档