吃瓜学习第一天

1、绪论

1.1 基本术语

二分类:对只涉及两个类别的‘’二分类“任务,通常称其中一个类为”正类“,另一个为’‘反类”。

回归任务:是通过对训练集进行学习,建立一个从输入空间x到输出空间y的映射f: x→y,y=R(R为实数集)

二分类任务:通常令y={0,1};

多分类任务:|y|>2;

“泛化”能力:学到的模型适用于新样本(测试样本)能力

通常假设样本空间中全体样本服从一个**“未知”分布**,我们获得的每个样本都是独立从这个分布上采样得到的,即“独立同分布”;一般而言,训练样本越多,我们得到关于“未知”分布的信息越多,这样越可能通过学习获得具有强泛化能力的模型

1.2假设空间

任务一:

通过表1数据集学习模型,

学习目标是:是否“好瓜”
在这里插入图片描述
学习过程(训练模型过程):可以看作一个在所有假设空间中进行搜索的过程。

搜索目标:找到与训练集“匹配”的假设

假设空间:如下图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-InigvTkE-1647329348720)(C:\Users\28960\AppData\Roaming\Typora\typora-user-images\image-20220314110959684.png)]
由于假设空间太大,特意提出版本空间

版本空间:训练过程是基于有限样本训练集进行的,故存在着一个与训练集一致的“假设集合”
在这里插入图片描述

1.4归纳偏好

上述版本空间三个假设,通过已有数据集无法判断哪个“更好”,对于一个具体算法来讲,它必须产生一个模型(学习算法本身的“偏好”会起到关键作用)

归纳偏好:机器学习算法在训练过程中对某种类型假设的偏好。

奥卡姆剃刀”:若有多个假设与观察一致,则选择最简单的哪个。

没有免费午餐”:无论聪明算法还是笨算法,他们的期望性能一致;(也就是说没有好算法与坏算法,只能说在不同情况下,算法取得的效果不同。)

结论:学习算法自身的归纳偏好与实际问题是否匹配,往往对预测结果起到重要作用

2、模型评估与选择

2.1 经验误差与过拟合

错误率:分类错误样本占样本总数比例

精度:(1-错误率)*100%

训练误差(经验误差):学习器在训练集上的误差

验证误差:学习器在验证集上的误差

泛化误差:新样本(测试样本)上的误差

目标:实际上由于不知道泛化误差,所以我们都是努力降低验证误差

过拟合:验证误差低,精度高,泛化能力弱。

欠拟合:训练样本的一般性质没学好。(学习能力太弱)

2.2评估方法

2.2.1留出法

数据集(100)划分为训练集(70)和验证集(30)

2.2.2交叉验证

数据集划分为k个大小相似的互斥子集。然后取其中的(k-1)个自己当训练集,剩下的一个当验证集。从而获得了k组训练集/验证集,即进行k次训练和验证,最终返回k个测试结果的均值
在这里插入图片描述

from sklearn.model_selection import KFold

"""
catboost十折验证
"""
kfolder = KFold(n_splits=10, shuffle=True, random_state=2018)  #实例化
oof_cb = np.zeros(len(X_data))  # 预测验证集占位
predictions_test_cb = np.zeros(len(X_test)) # 预测测试集占位
predictions_train_cb = np.zeros(len(X_data)) # 预测训练集占位
kfold = kfolder.split(X_data, Y_data)     #split(X,Y) 返回分类后训练集的index,验证集的index
for fold_, (train_index, vali_index) in enumerate(kfold):
    print("fold n°{}".format(fold_+1))
    k_x_train, k_y_train = X_data[train_index], Y_data[train_index]
    k_x_vali,k_y_vali = X_data[vali_index],Y_data[vali_index]
       cb_params = {
        'n_estimators': 1000000,
        'loss_function': 'MAE',
        'eval_metric': 'MAE',
        'learning_rate': 0.02,
        'depth': 6,
        'use_best_model': True,
        'subsample': 0.6,
        'bootstrap_type': 'Bernoulli',
        'reg_lambda': 3,
        'one_hot_max_size': 2,
    }
    model_cb = CatBoostRegressor(**cb_params)
    # train the model
    model_cb.fit(k_x_train, k_y_train, eval_set=[(k_x_vali, k_y_vali)], verbose=300, early_stopping_rounds=300)
    oof_cb[vali_index] = model_cb.predict(k_x_vali, ntree_end=model_cb.best_iteration_)
    predictions_test_cb += model_cb.predict(X_test, ntree_end=model_cb.best_iteration_) / kfolder.n_splits   #多少折
    predictions_train_cb += model_cb.predict(X_data, ntree_end=model_cb.best_iteration_) / kfolder.n_splits #多少折

2.3性能度量

回归任务,常使用的性能度量“均方误差”(MSE)
在这里插入图片描述
w i w_i wi权重一般为1

2.3.1 错误率与精度

分类任务中最常用的两种性能度量

2.3.2查准率P、查全率R与F1

如果关心的是“挑出西瓜中有多少比例是好瓜”错误率就无法衡量
在这里插入图片描述

查准率: P = T P T P + F P P=\frac{TP}{TP+FP} P=TP+FPTP

查全率: R = T P T P + F N R=\frac{TP}{TP+FN} R=TP+FNTP

查准率与查全率是一对矛盾的度量,一般查准率高的时候查全率就会低,反之亦然。

P-R图
在这里插入图片描述

由图可知性能A>性能B>性能C

若一个学习器的P-R曲线被另外一个学习器的曲线完全“包住”——则可断言面积大P-R的曲线的性能好

“平衡点”(BEP)——查准率=查全率的取值

若无法直接看出大小的P-R曲线,则谁的**‘平衡点’**大,谁性能好.

由于BEP的度量过于简化,故采用F1度量:
F 1 = 2 ∗ P ∗ R P + R F1=\frac{2*P*R}{P+R} F1=P+R2PR

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值