精华内容
下载资源
问答
  • cross_val_predict:得到经过K折交叉验证计算得到的每个训练验证的输出预测 方法: cross_val_score:分别在K-1折上训练模型,在余下的1折上验证模型,并保存余下1折中的预测得分 cross_val_predict:分别在K-1上...

    交叉验证的概念,直接粘贴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的参数链接:https://scikit-learn.org/stable/modules/model_evaluation.html

    展开全文
  • 在scikit-learn中,cross_val_score, cross_val_predict, cross_validate均可以用来做交叉验证,不会将数据顺序打乱(除非指定fold的参数shuffle=True,默认为False),并且赋值给cv,如:cv=KFold(n_splits=5,shuffle...

    在scikit-learn中,cross_val_score, cross_val_predict, cross_validate均可以用来做交叉验证,不会将数据顺序打乱(除非指定fold的参数shuffle=True,默认为False),并且赋值给cv,如:

    cv=KFold(n_splits=5,shuffle=True,random_state=0)

    在不打乱的情况下遵循官网图,如图1的切片方式。

    即所有的数据都一次机会被成块的作为测试集,所有的数据都有n-1次被用作训练集。

    27e7f124a495a8916f47c96a3598b71c.png
    图1

    cross_val_score与cross_validate

    在最新的版本sklearn 0.21中cross_val_score与cross_validate被统一,cross_val_score仅仅为调用cross_validate返回字典的结果。

    a3af7125bfb9a7aebeb25b03b06d8c62.png
    cross_validate返回字典

    56bd678ba0eb1f63cf935bc4839cdf54.png
    图2

    cross_val_score,和cross_val_predict

    cross_val_score,和cross_val_predict 的分片方式相同,区别就是cross_val_predict的返回值不能直接用于计算得分评价!官网已经注明:

    3cfc9450b8464b688691dcd42881c081.png

    意思是说,cross_val_predict返回的预测y值,是由分片的test y组合起来的,而这样y值的各个部分来源于不同的输入的学习器。

    查看源代码可以看到:

    a2b18aefe71cdf23a5b2587afc94c1fe.png

    把这些test y放在一起,看看预测值没问题,放在一起,评价得分,不合适!

    为什么呢?

    对比cross_val_score,我们发现道理很简单。

    当我们使用cross_val_predict计算得分时候,将采用与cross_val_score不同的计算策略,即:

    cross_val_score为先分片计算得分,后平均:

    score = np.mean(cross_val_score(estimator, data_x, y, cv=5))

    cross_val_predict为所有统一计算:

    predict_y = cross_val_predict(estimator, data_x, y, cv=5)
    score = r2_score(true_y,predict_y)

    cross_val_score分片计算后平均的这种方式,可以认为是不同模型的平均结果,cross_val_predict计算得分没有道理可言。

    而且,这两种计算结果在数据量小的时候差别很大,所以遵循官网警告,谢绝使用cross_val_predict计算得分。

    那我一定要使用cross_val_predict计算得分怎么办呢?

    也很简单,使用相同的fold,把y划分计算再平均就好了.

    cv = KFold(n_splits=5, shuffle=False, random_state=0)
    predict_y = cross_val_predict(estimator, data_x, y, cv=cv)
    
    cv = KFold(n_splits=5, shuffle=False, random_state=0)  # 这是个generator,用完就没了,所以再来一遍
    test_index = [i[1] for i in cv.split(data_x)]
    y_true_all = [y[_] for _ in test_index]
    y_predict_all = [predict_y[_] for _ in test_index]
    
    score = np.mean([r2_score(i, j) for i, j in zip(y_true_all, y_predict_all)])

    这样结果是和cross_val_score完全统一的,等价于cross_val_score。

    -----------------------------------------------------------------------------------------------

    ps : 重点来了,为什么要写这个短文,因为这个狗东西:

    r2_score注意事项

    sklearn.metrics.r2_score(y_true,y_pred,sample_weight=None)

    它用来衡量两列数值之间的趋势近似程度,如果按照感性的理解y_true,y_pred的位置应该是可以相互替换的,而且它的好朋友Pearsonr 系数的两个输入也是可以相互取代的。

    所以我就没有在乎输入顺序的问题,反正放进去就好了,从来没有关注过谁在前面。

    并且顺序弄反后,它不会报错,计算得分也看起来像那么回事,也在0-1之间。

    但是它不行!顺序不同,计算值得分是不同的!

    因为这个脑残的感性理解,我在发现代码结果与想象不同的时候,一度把矛头指向了GridSearch,cross_validate,cross_val_predict,cross_val_score。

    在查看一些stackoverflow上骗孩子(我)的解说后,怀疑这是cross_val_predict的切片方式和cross_val_score不同。

    然后从我自己的代码,一步一步debug到GridSearch, 到cross_val_predict,cross_val_score......

    8dc9b8b6683a5059057f9df83c5d23e4.png
    展开全文
  • 我想使用交叉验证来评估使用scikitlearn的回归模型构建并使我感到困惑,我应该使用cross_val_score和cross_val_predict这两个函数中的哪一个.一种选择是:cvs = DecisionTreeRegressor(max_depth = depth)scores = ...

    我想使用交叉验证来评估使用scikitlearn的回归模型构建并使我感到困惑,我应该使用cross_val_score和cross_val_predict这两个函数中的哪一个.

    一种选择是:

    cvs = DecisionTreeRegressor(max_depth = depth)

    scores = cross_val_score(cvs, predictors, target, cv=cvfolds, scoring='r2')

    print("R2-Score: %0.2f (+/- %0.2f)" % (scores.mean(), scores.std() * 2))

    另一个,使用标准r2_score的cv预测:

    cvp = DecisionTreeRegressor(max_depth = depth)

    predictions = cross_val_predict(cvp, predictors, target, cv=cvfolds)

    print ("CV R^2-Score: {}".format(r2_score(df[target], predictions_cv)))

    我认为这两种方法都是有效的,并给出类似的结果.但这只是小k倍的情况.虽然r ^ 2对于10倍-cv大致相同,但是对于使用“cross_vall_score”的第一版本的情况,对于更高的k值,它变得越来越低.第二个版本大多不受折叠次数变化的影响.

    这种行为是否可以预期,我是否对SKLearn中的CV缺乏了解?

    解决方法:

    cross_val_score返回测试折叠的得分,其中cross_val_predict返回测试折叠的预测y值.

    对于cross_val_score(),您使用的是输出的平均值,这将受到折叠数量的影响,因为它可能会有一些可能具有高误差的折叠(不正确).

    然而,对于输入中的每个元素,cross_val_predict()返回该元素在测试集中时获得的预测. [请注意,只能使用将测试集中的所有元素分配一次的交叉验证策略].因此,增加折叠数量只会增加测试元素的训练数据,因此其结果可能不会受到太大影响.

    希望这可以帮助.随意提出任何疑问.

    编辑:在评论中回答问题

    请查看以下关于cross_val_predict如何工作的答案:

    我认为cross_val_predict会过度适应,因为随着折叠的增加,更多的数据将用于火车,更少的数据用于测试.因此,结果标签更依赖于训练数据.同样如上所述,对一个样本的预测仅进行一次,因此可能更容易分裂数据.

    这就是为什么大多数地方或教程建议使用cross_val_score进行分析.

    展开全文
  • <div><p>Is it possible to somehow make the CV work with cross_val_predict function. Fore example, if I try: <pre><code> cv = GapWalkForward(n_splits=3, gap_size=1, test_size=2) cross_...
  • <div><p>you can do <code>method="predict_proba"</code></p>该提问来源于开源项目:AxeldeRomblay/MLBox</p></div>
  • <div><p>sklearn <code>cross_val_predict</code> has recently changed, and is now incompatible with SlidingEstimator with classification estimators, as it requires <code>n_classes</code></p> <pre><code>...
  • <div><h1>Cross_val_predict: enable returning predictions for different horizons <p>I wonder if we should modify <code>cross_val_predict</code> so that it return a matrix of predictions indexed by ...
  • sklearn中cross_val_predict训练过程中对模型拟合了吗?多分类问题中,已经明确有分类输出了。但是原模型若不fit的话,又无法用于下一步对测试集进行预测。请问cross_val_predict在生成predict时,是否已经训练了一...
  • 我需要使用3倍交叉验证训练...此新版本添加了使用方法cross_val_predict()和附加参数方法来定义估计器需要哪种预测的功能.在我的情况下,我想使用predict_proba()方法,它返回多类方案中每个类的概率.但是,当我运行该...

    我需要使用3倍交叉验证训练

    Random Forest classifier.对于每个样本,我需要在它恰好位于测试集中时检索预测概率.

    我正在使用scikit-learn版本0.18.dev0.

    此新版本添加了使用方法cross_val_predict()和附加参数方法来定义估计器需要哪种预测的功能.

    在我的情况下,我想使用predict_proba()方法,它返回多类方案中每个类的概率.

    但是,当我运行该方法时,我得到预测概率矩阵,其中每行代表一个样本,每列代表特定类的预测概率.

    问题是该方法没有指出哪个类对应于每列.

    我需要的值与属性classes_中返回的相同(在我的情况下使用RandomForestClassifier)定义为:

    classes_ : array of shape = [n_classes] or a list of such arrays

    The classes labels (single output problem), or a list of arrays of class labels (multi-output problem).

    这是predict_proba()所需要的,因为在其文档中写道:

    The order of the classes corresponds to that in the attribute classes_.

    最小的例子如下:

    import numpy as np

    from sklearn.ensemble import RandomForestClassifier

    from sklearn.model_selection import cross_val_predict

    clf = RandomForestClassifier()

    X = np.random.randn(10, 10)

    y = y = np.array([1] * 4 + [0] * 3 + [2] * 3)

    # how to get classes from here?

    proba = cross_val_predict(estimator=clf, X=X, y=y, method="predict_proba")

    # using the classifier without cross-validation

    # it is possible to get the classes in this way:

    clf.fit(X, y)

    proba = clf.predict_proba(X)

    classes = clf.classes_

    最佳答案 是的,它们将按顺序排列;这是因为DecisionTreeClassifier(它是RandomForestClassifier的默认base_estimator)

    uses np.unique to construct the classes_ attribute,它返回输入数组的排序唯一值.

    展开全文
  • 我需要使用3倍交叉验证训练...此新版本添加了使用方法cross_val_predict()和附加参数方法来定义估计器需要哪种预测的功能.在我的情况下,我想使用predict_proba()方法,它返回多类方案中每个类的概率.但是,当我运行该...
  • def cross_val_predict(estimator, X, y=None, groups=None, cv=None, n_jobs=None, verbose=0, fit_params=None, pre_dispatch=‘2*n_jobs’, method=‘predict’): 函数功能:为每个输入数据点生成交叉验证的估计...
  • 建模中要使用自定义的评判标准,所以在scoring参数中要使用自定义的评判方法,在网上研究了很久也没有很好的教程,就把自己最近实现...这里输入的y_predict为概率值 def AR( y_true, y_predict): def KS(y_tru...
  • 题外话:这个场景其实很常见,基于k_fold训练的cross_val_score和cross_val_predict往往是将已知lable数据的一部分当成测试集,另一部分为训练集,用正确概率来评估当前的estimator性能(前者)以及返回所有数据的...
  • 我想用Logistic回归模型预测交叉验证的概率.我知道您可以获得交叉验证...# importsfrom sklearn.linear_model import LogisticRegressionfrom sklearn.cross_validation import (StratifiedKFold, cross_val_score,t...
  • 03_Classification_cannot import name 'fetch_mldata'_cross_val_predict()_ML_Project Checklist :https://blog.csdn.net/Linli522362242/article/details/103786116 Error误差 Analysis Of course, if this ...
  • 1 模型验证 模型验证方法如下: ... 对每个输入数据点产生交叉验证估计:model_selection.cross_val_predict(estimator,X) 计算并绘制模型的学习率曲线:model_selection.learning_curve(estimator,X,y) ...
  • 61 self._val_score = get_score(self) 62 write_log(self) 63 self.result.append(_hr_out) ~/anaconda3/envs/tfgpu-keras/lib/python3.6/site-packages/talos/metrics/score_model.py in get_score(self) ...
  • ClassificationMNIST函数:fetch_mldata(), permutation(), SGDClassifier(),fit(),predict(),StratifiedKFold(),cross_val_score(),cross_val_predict()Performance Measures Measuring Accuracy Using Cross-...
  • 一、模型验证方法如下:通过交叉验证得分:model_sleection.cross_val_score(estimator,X)对每个输入数据点产生交叉验证估计:model_selection.cross_val_predict(estimator,X)计算并绘制模型的学习率曲线:model_...
  • <code>cross_val_predict</code> methods that wrap the sklearn equivalent methods by using <code>joblib</code> with dask as a backend. <p>It should close #251 <p>I've marked it as WIP to see if this...
  • #Creating the CRF model crf = CRF(algorithm='lbfgs', c1=0.1, c2=0.1, max_iterations=100, all_possible_transitions=False) #We predcit using the same 5 ...pred = cross_val_predict(estimator=crf, X=X
  • from sklearn.model_selection import cross_val_score, cross_val_predict import numpy as np RANDOM_SEED = 42 X, y = load_boston(return_X_y=True) svr = SVR(kernel='linear')...
  • 重写交叉验证,实现多模型简单的回归融合算法一、cross_val_predict()简介二、重写交叉验证三、使用多模型的简单融合算法四、使用my_cross_val_score() 一、cross_val_predict()简介 sklean中常见的关于交叉验证的...
  • 本实例展示怎样使用cross_val_predict来可视化预测错误: # coding:utf-8 from pylab import * from sklearn import datasets from sklearn.model_selection import cross_val_predict from sklearn import linear_...
  • his example shows how to usecross_val_predictto ...from sklearn.model_selection import cross_val_predict from sklearn import linear_model import matplotlib.pyplot as plt lr = linear_model.LinearRe..
  • 我想对具有多个输入的Keras模型执行...然而,当使用函数api并扩展到两个输入时,sklearn的cross_val_predict似乎并没有像预期的那样工作。你知道吗def create_model():input_text = Input(shape=(1,), dtype=tf.str...
  • 多分类任务的混淆矩阵处理

    千次阅读 2018-09-26 20:43:49
    多分类任务的混淆矩阵处理 在多分类任务中,不适合使用PR曲线和ROC曲线来进行指标评价,但我们仍可以通过混淆矩阵来进行处理。... y_train_pred = cross_val_predict(sgd_clf, X_train_scaled, y_train...
  • from sklearn import ...from sklearn.model_selection import cross_val_predict from sklearn import linear_model import matplotlib.pyplot as plt lr = linear_model.LinearRegression() boston = datas...
  • 一、模型验证方法如下: ... 对每个输入数据点产生交叉验证估计:model_selection.cross_val_predict(estimator,X) 计算并绘制模型的学习率曲线:model_selection.learning_curve(estimator,X,y) 计算并绘制模...

空空如也

空空如也

1 2 3 4 5 6
收藏数 104
精华内容 41
关键字:

cross_val_predict