Python实现K折交叉验证法的方法步骤
学习器在测试集上的误差我们通常称作“泛化误差”。要想得到“泛化误差”首先得将数据集划分为训练集和测试集。那么怎么划分呢?常用的方法有两种,k折交叉验证法和自助法。介绍这两种方法的资料有很多。下面是k折交叉验证法的python实现。
##一个简单的2折交叉验证
fromsklearn.model_selectionimportKFold
importnumpyasnp
X=np.array([[1,2],[3,4],[1,3],[3,5]])
Y=np.array([1,2,3,4])
KF=KFold(n_splits=2)#建立4折交叉验证方法查一下KFold函数的参数
fortrain_index,test_indexinKF.split(X):
print("TRAIN:",train_index,"TEST:",test_index)
X_train,X_test=X[train_index],X[test_index]
Y_train,Y_test=Y[train_index],Y[test_index]
print(X_train,X_test)
print(Y_train,Y_test)
#小结:KFold这个包划分k折交叉验证的时候,是以TEST集的顺序为主的,举例来说,如果划分4折交叉验证,那么TEST选取的顺序为[0].[1],[2],[3]。
#提升
importnumpyasnp
fromsklearn.model_selectionimportKFold
#Sample=np.random.rand(50,15)#建立一个50行12列的随机数组
Sam=np.array(np.random.randn(1000))#1000个随机数
New_sam=KFold(n_splits=5)
fortrain_index,test_indexinNew_sam.split(Sam):#对Sam数据建立5折交叉验证的划分
#fortest_index,train_indexinNew_sam.split(Sam):#默认第一个参数是训练集,第二个参数是测试集
#print(train_index,test_index)
Sam_train,Sam_test=Sam[train_index],Sam[test_index]
print('训练集数量:',Sam_train.shape,'测试集数量:',Sam_test.shape)#结果表明每次划分的数量
#Stratifiedk-fold按照百分比划分数据
fromsklearn.model_selectionimportStratifiedKFold
importnumpyasnp
m=np.array([[1,2],[3,5],[2,4],[5,7],[3,4],[2,7]])
n=np.array([0,0,0,1,1,1])
skf=StratifiedKFold(n_splits=3)
fortrain_index,test_indexinskf.split(m,n):
print("train",train_index,"test",test_index)
x_train,x_test=m[train_index],m[test_index]
#Stratifiedk-fold按照百分比划分数据
fromsklearn.model_selectionimportStratifiedKFold
importnumpyasnp
y1=np.array(range(10))
y2=np.array(range(20,30))
y3=np.array(np.random.randn(10))
m=np.append(y1,y2)#生成1000个随机数
m1=np.append(m,y3)
n=[i//10foriinrange(30)]#生成25个重复数据
skf=StratifiedKFold(n_splits=5)
fortrain_index,test_indexinskf.split(m1,n):
print("train",train_index,"test",test_index)
x_train,x_test=m1[train_index],m1[test_index]
Python中貌似没有自助法(Bootstrap)现成的包,可能是因为自助法原理不难,所以自主实现难度不大。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。