机器学习 模型评估与选择

1.经验误差与过度拟合

错误率(E):错误样本数(a)占样本总数(m)的比例 E = a / m

精度:1 - E = 1 - a/m (通常为百分比形式)

误差:学习器的实际输出与样本的真实输出之间的差异

学习器在训练集上的误差称为“训练误差”或“经验误差”,在新样本上的误差称为“泛化误差”

过拟合(过配):学习把训练样本学得“太好”时,可能把训练样本自身的一些特点当作潜在样本都具                          有的一般性质,导致泛化性能下降    与过拟合相对的即欠拟合(欠配)

2.评估方法

划分训练集S和测试集T

(1)留出法 hold-out

将数据集划分为两个互斥的集合,一个集合作为训练集S,另一个集合作为测试集T,在S上训练出模型,用T评估其测试误差作为对泛化误差的估计。

注意:从采样角度,通常保留类别比例的采样方式(分层采样)

          采用若干次随即划分、重复进行实验后取平均值作为留出法的评估结果

通常将样本的2/3~4/5用于训练,剩余样本用于测试

from sklearn.model_selection import train_test_split
# 用train_test_split划分训练集和测试集

train_X , test_X, train_Y ,test_Y = train_test_split(X, Y, test_size=0.2,random_state=0)

# X为原始数据的自变量,Y为原始数据因变量;
# train_X,test_X是将X按照8:2划分所得;
# train_Y,test_Y是将X按照8:2划分所得;
# test_size是划分比例;
# random_state设置是否使用随机数



#例如:
#in
X = np.arange(10).reshape((5, 2))
y = np.arange(5)
 
# print(X)
# print(list(y))

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33,random_state=42)

print(X_train,y_train,X_test,y_test)

#out

#[[4 5]  [0 1]  [6 7]] 

#[2 0 3] 

#[[2 3]  [8 9]] 

#[1 4]


(2)交叉验证法 cross validation

将数据集划分为k个大小相似的互斥子集,每个子集都尽可能保持数据分布的一致性(分层采样得到)每次用k-1个子集的并集作为训练集,余下的1个子集作为测试集,从而可以进行k次训练和测试,最终返回的是这k个测试结果的均值

此方法评估结果的稳定性和保真性很大程度上取决于k的取值,因此通常成为 “k折交叉验证”

为减小因样本划分不同引入的差别,k折交叉验证通常要随即使用不同的划分重复p次,最终评估结果为p次k折交叉验证结果的均值(10次10折交叉验证与100次留出法都进行了100次训练/测试)

若数据集有m个样本,当k = m,得到了交叉验证法的特例------留一法(LOO)                       

绝大数情况下,留一法被实际评估的模型与期望估计的训练出的模型很相似,评估结果比较准确 缺陷:数据集比较大时训练m个模型的计算开销可能是难以忍受的,而且其估计结果未必永远准确

from sklearn.model_selection import KFold

KFold(n_splits=5, *, shuffle=False, random_state=None)


# n_splits:int, 默认为5(表示拆分成5折)
# shuffle: bool, 默认为False   切分数据集之前是否对数据进行洗牌  True洗牌 False不洗牌
# random_state:int, 默认为None  可按自己喜好设定成整数,设定好后,就不能再更改
# shuffle为True,random_state为None,则每次运行代码,获得的数据切分都不一样,
             #  random_state指定时,则每次运行代码,都能获得同样的切分数据,保证实验可重复

方法 

1.get_n_splits(X=Noney=Nonegroups=None)              返回交叉验证器中的分裂迭代次数

2.split(Xy=Nonegroups=None

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值