zoukankan      html  css  js  c++  java
  • cross_val_score

    使用交叉检验最简单的方法是在估计器上调用cross_val_score函数

    下面示例展示如何通过分割数据,拟合模型和计算连续5次的分数(每次不同分割)来估计linear Kernel支持向量机在iris数据集上的精度:

    from sklearn.model_selection import cross_val_score
    from sklearn import svm
    from sklearn import datasets
    
    
    clf = svm.SVC(kernel='linear', C=1)
    iris = datasets.load_iris()
    scores = cross_val_score(clf, iris.data, iris.target, cv=5)
    
    print(scores)
    [0.96666667 1.         0.96666667 0.96666667 1.        ]

    评分估计的平均得分和95%置信区间由此给出:

    print('Accuracy: %0.2f (+/- %0.2f)' % (scores.mean(), scores.std()*2))
    Accuracy: 0.98 (+/- 0.03)

    scoring参数: 

    默认情况下,每个CV迭代计算的分数是score方法。可以通过scoring参数改变计算方式:scoring参数:定义模型评估规则

    from sklearn import metrics
    
    scores = cross_val_score(clf, iris.data, iris.target, cv=5, scoring='f1_macro')
    print(scores)
    [0.96658312 1.         0.96658312 0.96658312 1.        ]

    在Iris数据集上,样本在各个目标类别之间是平衡的,因此准确度和F1-score几乎相等。

    CV参数:

    CV是整数时,cross_val_score默认使用KFold或StratifiedKFold策略,后者会在估计器派生ClassifierMixin时使用。

    也可以通过传入一个交叉验证迭代器来使用其他交叉验证策略,比如:

    from sklearn.model_selection import ShuffleSplit
    
    n_samples = iris.data.shape[0]
    cv = ShuffleSplit(n_splits=5, test_size=0.3, random_state=0)
    scores = cross_val_score(clf, iris.data, iris.target, cv=cv)
    
    print(scores)
    [0.97777778 0.97777778 1.         0.95555556 1.        ]

    还可以使用一个可迭代生成器作为索引数组产生(train,test)划分,比如:

    def custom_cv_2folds(X):
        n = X.shape[0]
        i = 1
        while i <= 2:
            idx = np.arange(n * (i - 1) / 2, n * i / 2, dtype=int)
            yield idx, idx
            i += 1
    
    custom_cv = custom_cv_2folds(iris.data)
    cross_val_score(clf, iris.data, iris.target, cv=custom_cv)
    array([1.        , 0.97333333])

    保留数据的数据转换

    正如在训练集中保留的数据上测试一个predictor(预测器)是很重要的一样,预处理(标准化、特征选择等)和类似的 data transformations也可以从训练集中学习,并应用预测数据以进行预测:

    from sklearn import preprocessing
    from sklearn.cross_validation import train_test_split
    
    X_train, X_test, y_train, y_test = train_test_split(
        iris.data, iris.target, test_size=0.4, random_state=0)
    scaler = preprocessing.StandardScaler().fit(X_train)
    X_train_transformed = scaler.transform(X_train)
    clf = svm.SVC(C=1).fit(X_train_transformed, y_train)
    X_test_transformed = scaler.transform(X_test)
    clf.score(X_test_transformed, y_test)
    0.9333333333333333

    Pipeline可以更容易地组合估计器,在交叉验证下使用如下:

    from sklearn.pipeline import make_pipeline
    
    clf = make_pipeline(preprocessing.StandardScaler(), svm.SVC(C=1))
    cross_val_score(clf, iris.data, iris.target, cv=cv)
    array([0.97777778, 0.93333333, 0.95555556, 0.93333333, 0.97777778])
  • 相关阅读:
    几个shell自动化脚本(定期清理、磁盘空间、搜寻关键字)
    linux系统垃圾清理
    mysql出现Got error 28 from storage engine错误
    WebBindingInitializer学习
    Java多线程异步调度程序分析(二)
    自己封装的C#操作redis公共类
    Java多线程编程的常见陷阱(转)
    Java分布式优秀资源集合
    JVM GC之对象生死
    Java内存模型
  • 原文地址:https://www.cnblogs.com/keye/p/13386566.html
Copyright © 2011-2022 走看看