K折交叉验证--小轮子转呀转(Python实现)

from sklearn.model_selection import train_test_split,cross_val_score,cross_validate # 交叉验证所需的函数
from sklearn.model_selection import KFold,LeaveOneOut,LeavePOut,ShuffleSplit # 交叉验证所需的子集划分方法
from sklearn.model_selection import StratifiedKFold,StratifiedShuffleSplit # 分层分割
from sklearn.model_selection import GroupKFold,LeaveOneGroupOut,LeavePGroupsOut,GroupShuffleSplit # 分组分割
from sklearn.model_selection import TimeSeriesSplit # 时间序列分割
from sklearn import datasets  # 自带数据集
from sklearn import svm  # SVM算法
from sklearn import preprocessing  # 预处理模块
from sklearn.metrics import recall_score  # 模型度量
import random
import numpy as np


iris = datasets.load_iris()  # 加载数据集
print('样本集大小:',iris.data.shape,iris.target.shape)
index = [i for i in range(iris.data.shape[0])]
random.shuffle(index)
data = iris.data[index]
label = iris.target[index]

scores = []
# k折划分子集
kf = KFold(n_splits=10)
for train, test in kf.split(data, label):
    #print("k折划分:%s %s" % (iris.data[train], iris.target[train]))
    clf = svm.SVC(kernel='linear', C=1).fit(data[train], label[train])  # 使用训练集训练模型
    print('准确率:', clf.score(data[test], label[test]))  # 计算测试集的度量值(准确率)
    scores.append(clf.score(data[test], label[test]))


print("Accuracy: %0.2f (+/- %0.2f)" % (np.mean(scores), np.std(scores)))  # 获取置信区间。(也就是均值和标准差)


下面代码使用了归一化处理输入向量,上面代码未对特征向量进行归一化处理。

for train, test in kf.split(data, label):
    #print("k折划分:%s %s" % (iris.data[train], iris.target[train]))
    scaler = preprocessing.StandardScaler().fit(data[train])  # 通过训练集获得归一化函数模型。(也就是先减几,再除以几的函数)。在训练集和测试集上都使用这个归一化函数
    X_train_transformed = scaler.transform(data[train])
    clf = svm.SVC(kernel='linear', C=1).fit(X_train_transformed, label[train])  # 使用训练集训练模型
    X_test_transformed = scaler.transform(data[test])
    print('准确率:', clf.score(X_test_transformed, label[test]))  # 计算测试集的度量值(准确率)
    scores.append(clf.score(X_test_transformed, label[test]))

print()
print("Accuracy: %0.2f (+/- %0.2f)" % (np.mean(scores), np.std(scores)))  # 获取置信区间。(也就是均值和标准差)

在回归中有可能对y值进行归一化,如何将归一化数值还原为归一化前的数据,使用

scaler.inverse_transform(X_train_transformed, copy=None)

即可获取归一化前的数据,然后与target进行mse 之类的评价函数运算

参考

[1]https://blog.csdn.net/luanpeng825485697/article/details/79836262

[2]https://www.cnblogs.com/aibbtcom/p/8548491.html

[3]https://blog.csdn.net/lz_peter/article/details/78237094

猜你喜欢

转载自blog.csdn.net/u012211422/article/details/82193238