sklearn中cross_val_score、cross_val_predict的用法比较

本文深入解析了scikit-learn中的交叉验证概念,通过实例演示了cross_val_score和cross_val_predict函数的使用,展示了如何评估模型的泛化性能。

交叉验证的概念,直接粘贴scikit-learn官网的定义:


scikit-learn中计算交叉验证的函数:

cross_val_score:得到K折验证中每一折的得分,K个得分取平均值就是模型的平均性能

cross_val_predict:得到经过K折交叉验证计算得到的每个训练验证的输出预测


方法:

cross_val_score:分别在K-1折上训练模型,在余下的1折上验证模型,并保存余下1折中的预测得分

cross_val_predict:分别在K-1上训练模型,在余下的1折上验证模型,并将余下1折中样本的预测输出作为最终输出结果的一部分

结论:

cross_val_score计算得到的平均性能可以作为模型的泛化性能参考

cross_val_predict计算得到的样本预测输出不能作为模型的泛化性能参考


代码样例:

from sklearn import datasets
import numpy as np
from sklearn.tree import DecisionTreeClassifier
from sklearn import datasets
import numpy as np
from sklearn.tree import DecisionTreeClassifier

# 加载鸢尾花数据集
iris = datasets.load_iris()
iris_train = iris.data
iris_target = iris.target
print(iris_train.shape)
print(iris_target.shape)
(150, 4)
(150,)

# 构建决策树分类模型
tree_clf = DecisionTreeClassifier()
tree_clf.fit(iris_train, iris_target)
tree_predict = tree_clf.predict(iris_train)
​
# 计算决策树分类模型的准确率
from sklearn.metrics import accuracy_score
print("Accuracy:", accuracy_score(iris_target, tree_predict))
Accuracy: 1.0

# 交叉验证cross_val_score输出每一折上的准确率
from sklearn.model_selection import cross_val_predict, cross_val_score, cross_validate
tree_scores = cross_val_score(tree_clf, iris_train, iris_target, cv=3)
print(tree_scores)
[0.98039216 0.92156863 1.        ]

# 交叉验证cross_val_predict输出每个样本的预测结果
tree_predict = cross_val_predict(tree_clf, iris_train, iris_target, cv=3)
print(tree_predict)
print(len(tree_predict))
print(accuracy_score(iris_target, tree_predict))
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1
 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 1 2 2 2 2
 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 1 2 2 2 2 2 2 2 2 2
 2 2]
150
0.96

print(tree_clf.predict(iris_train))
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2
 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 2 2]

# 交叉验证cross_validate对cross_val_score结果进行包装,并包含fit的时间等信息
tree_val = cross_validate(tree_clf, iris_train, iris_target, cv=3)
print(tree_val)
{'fit_time': array([0., 0., 0.]), 'score_time': array([0., 0., 0.]), 'test_score': array([0.98039216, 0.92156863, 0.97916667])}

​

​

交叉验证评价方式scoring的参数链接:3.3. Metrics and scoring: quantifying the quality of predictions — scikit-learn 1.0.2 documentation

<think>嗯,用户想查找cross_val_predict函数所属的Python库,明确提到是sklearn。首先我需要确认这个函数确实属于scikit-learn库。根据我的知识,scikit-learn是一个常用的机器学习库,提供了许多模型和工具函数,cross_val_predict应该是其中的一个交叉验证相关的函数。 接下来,我需要检查用户提供的引用内容。用户给出的引用[1]到[4]中,引用[1]提到了导入LogisticRegression,引用[2]和[4]都提到了cross_val_scorecross_val_predict,并且引用[4]明确指出cross_val_predict属于sklearn。例如,引用[4]提到cross_val_predict在K-1折训练,剩余1折预测,这符合scikit-learn中该函数的行为。此外,用户的问题直接询问cross_val_predict是否属于sklearn,而根据引用中的信息,答案显然是肯定的。 需要确认是否有其他库也有同名函数,但根据我的了解,常见的机器学习库中,scikit-learn是主要提供这类交叉验证函数的。因此,可以确定cross_val_predict属于sklearn.model_selection模块。在较新的版本中,cross_validation模块已经被移动到model_selection,所以用户需要从sklearn.model_selection导入这个函数。 最后,要确保回答准确,指出正确的导入路径,并可能提到版本变化的情况,避免用户遇到导入错误。同时,根据用户提供的引用,特别是引用[4],进一步支持答案的正确性。</think>`cross_val_predict` 函数属于 **scikit-learn(sklearn)** 库,具体位于 `sklearn.model_selection` 模块中。在代码中可以通过以下方式导入: ```python from sklearn.model_selection import cross_val_predict ``` 该函数用于通过交叉验证生成预测结果,其核心原理是在不同的训练-验证数据划分下训练模型,并汇总所有样本的预测值[^4]。 --- ### 相关问题 1. `cross_val_predict` 和 `cross_val_score` 的区别是什么? 2. 如何通过 `cross_val_predict` 实现自定义评估指标? 3. 在使用交叉验证时,如何避免数据泄露问题?
评论 8
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值