【问题标题】:Confusion about sklearn cross_val_predict Method关于 sklearn cross_val_predict 方法的困惑
【发布时间】:2021-08-07 22:49:07
【问题描述】:

考虑一下这个 sn-p 代码:

import pandas as pd

df = pd.read_csv('module_5_auto.csv')
df = df._get_numeric_data()


y_data = df['price']
x_data = df.drop('price',axis=1)


from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x_data, y_data, test_size=0.10, random_state=1)

from sklearn.linear_model import LinearRegression
lre=LinearRegression()
lre.fit(x_train[['horsepower']], y_train)



from sklearn.model_selection import cross_val_score
cross_val_score(lre, x_data[['horsepower']], y_data, cv=4)


from sklearn.model_selection import cross_val_predict
cross_val_predict(lre, x_data[['horsepower']], y_data, cv=4)

我理解函数 cross_val_score 将数据分成折叠(根据 cv 的数量),将每个不同的折叠作为 test_data 并将剩余的 3 折叠作为 train_data ,训练模型,然后得到test_data 在丢弃模型之前的得分,然后输出 4 个不同的 train_data 折叠的 4 个得分。

但是cross_val_predict 呢...它的输出到底是什么?... 是4个模型中得分最高的模型的预测吗?... 还是 4 个模型的 4 个预测的平均值?

我发现有人提到这个

函数cross_val_predict 具有与cross_val_score 类似的接口,但会为输入中的每个元素返回在该元素位于测试集中时获得的预测。

“输入中的每个元素”是什么意思?...有 4 个折叠,4 个训练集和 4 个测试集...其中哪一个是“元素”?

【问题讨论】:

    标签: python machine-learning scikit-learn


    【解决方案1】:

    您提供的报价绝对不是来自“某人”,而是来自官方user guide关于如何通过交叉验证获得预测。还缺少一个有趣的部分,您没有包括在内,但可能有助于消除您的困惑:

    函数cross_val_predict 具有与cross_val_score 类似的接口,但是对于输入中的每个元素,返回在该元素在测试集中获得的预测。 只能使用将所有元素分配给测试集一次的交叉验证策略(否则会引发异常)。

    在开始交叉验证之前,您只有一个输入(也称为数据集),其中包含所有样本(或者他们在这里称之为:elements)。在执行交叉验证时,所有这些样本将被分成 k 个折叠。在您的情况下,k 已设置为 4。因此,每个样本最终都会出现在这些折叠中的一个,并且只有一个

    这里的关键部分是每个样本(或元素)在交叉验证期间只能预测一次,也就是将其对应的折叠用作测试集。正如您可能认为的那样,您的样本不可能被四种不同的模型(或这方面的任何其他模型)预测 4 次。


    总结:交叉验证时输入中的每个样本(或元素)只有一个预测,而这一个预测由cross_val_predict返回。

    【讨论】:

      猜你喜欢
      • 2021-03-24
      • 2015-04-28
      • 2013-09-09
      • 2011-01-18
      • 1970-01-01
      • 2013-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多