sklearn数据集分类
数据分类目标:获得在新样本中表现良好的学习模型
做法:在训练样本中尽量学习适用于所有潜在样本的普遍规律
过拟合:把训练样本中的一些特点当作了所有潜在样本的一般特性,使得泛化能力降低。原因:学习率过高
欠拟合:对训练样本中的一般性质未得到良好的学习。解决方法:在学习中扩展分支、增加训练的轮数。
我们将在训练样本中未出现的测试样本来测试模型对新样本判断的能力,作为泛化误差的近似。
分出训练集和测试集的方法
1.留出法
将数据集D分为两个互斥的集合,一个作为训练集S,一个作为测试集T。注意:1.划分要做到保持数据分布的一致性,保持样本数据比例相似。(分层采样)2.单次的划分会使结果不稳定,一般进行若干次随机划分、重复进行试验评估后取平均值作为留出法的评估结果。
常用方法:将大约2/3~4/5的样本用于训练,剩余样本用于测试。
2.交叉验证法
将数据集D划分为k个大小相似的互斥子集,每个子集采用分层采样。然后用k-1个子集的并集作为训练集,余下的作为测试集。便得到了k组训练和测试集,进行k次训练和测试,返回k个测试结果的平均。注意:为减小样本划分不同而引起的差别,随机使用不同的划分进行p次
常用方法:k取10,5或20。p取10
特例:若D中有m个样本,k=m,则成为留一法。留一法的训练集比原始数据只少了一个样本,往往认为这个方法的评估结果比较准确。但是当数据量过大时,会使计算量也大大增加。
3.自助法
通过自主采样法(从m个样本的数据集D中有放回地挑一个放入D‘中)重复m次
注意:当数据集较小(难以划分训练和测试集)该方法比较有用。
k折交叉验证
(kFold)
import numpy as np #KFold from sklearn.model_selection import KFold X=np.array([[1,2],[3,4],[5,6],[7,8],[9,10],[11,12]]) y=np.array([1,2,3,4,5,6]) kf=KFold(n_splits=2) #分成几个组 kf.get_n_splits(X) print(kf) for train_index,test_index in kf.split(X): print("Train Index:",train_index,",Test Index:",test_index) X_train,X_test=X[train_index],X[test_index] y_train,y_test=y[train_index],y[test_index]
留一法
import numpy as np from sklearn.model_selection import LeaveOneOut X=np.array([[1,2],[3,4],[5,6],[7,8],[9,10],[11,12]]) y=np.array([1,2,3,4,5,6]) loo=LeaveOneOut() loo.get_n_splits(X) print(loo) for train_index,test_index in loo.split(X,y): print("Train Index:",train_index,",Test Index:",test_index) X_train,X_test=X[train_index],X[test_index] y_train,y_test=y[train_index],y[test_index]

浙公网安备 33010602011771号