IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 机器学习竞赛基础知识 -> 正文阅读

[人工智能]机器学习竞赛基础知识

1. 线下评估策略

通常在数据竞赛中,参赛者是不能将全部数据都用于训练模型的,因为这会导致没有数据集对该模型的效果进行线下验证。为了解决这一问题,就要考虑如何对数据进行划分,构建合适的线下验证集。针对不同类型的问题,需要不同的线下验证方式,在此分为强时序性和弱时序性。

1.1 强时序性问题

对于含有明显时间序列因素的赛题,可将其看作强时间序行问题,即线上数据的时间都在离线数据集之后,这种情况下就可以采用时间上最接近测试集的数据做验证集

例如,天池平台上的“乘用车零售量预测”竞赛,初赛提供 2012 年 1 月至 2017 年 10 月车型销售数据,需要参赛者预测 2017 年 11 月的车型销售数据。这是一个很明显的含时间序列因素的问题,那么我们可以选择数据集的最后一个月作为验证集

1.2 弱时序性问题

这类问题的验证方式主要为 K 折交叉验证,根据 K 的取值不同,会衍生出不同的交叉验证方式,具体如下。

  1. 当 K=2 时,这是最简单的 K 折交叉验证,即 2 折交叉验证。这个时候将数据集分成两份:D1 和 D2。首先,D1 当训练集,D2 当验证集;然后,D2当训练集,D1当验证集。2 折交叉验证存在很明显的弊端,即最终模型参数的选取将在极大程度上依赖于事先对训练集和验证集的划分方法。对于不同的划分方式,其结果浮动非常大。
  2. 当 K=N 时,也就是 N 折交叉验证,被称作 留一验证。具体做法是只留一个数据作为验证集,其他数据都作为数据集,并重复 N 次(N 为数据集总量)。其优点在于,首先它不受验证集和训练集划分方式的影响,因为每一个数据都单独做过验证集;其次,它用了 N-1 个数据训练模型,也几乎用到了所有数据,从而保证模型偏差更小。同时,其缺点在于计算量过大,如果数据集是千万级的,那么就需要训练千万次。
  3. 为了解决 1 和 2 中的缺陷,我们一般取 K=5 或 10,作为一种折中处理,这也是最常用的线下验证方式。

下面给出通用的交叉验证代码,具体代码如下:

from sklearn.model_selection import KFold
NFOLDS = 5
folds = KFold(n_splits=NFOLDS, shuffle=True, random_state=2021)
for trn_idx, val_idx in folds.split(X_train, y):
    train_df, train_label = X_train.iloc[trn_idx, :], y[trn_idx]
    valid_df, valid_label = X_train.iloc[val_idx, :], y[val_idx]

2. 评价指标

2.1 分类指标

(1)错误率与精度

在分类问题中,错误率是分类结果错误的样本数占样本总数的比例,精度则是分类结果中正确的样本总数的比例。

(2)准确率与召回率

假设一个肿瘤患病问题,患肿瘤的概率为0.5%,概率很小,对于这样一个一边概率远大于另一边的我们称为倾斜分类skewed class.

如果我们仍然采用accuracy来衡量这样的问题,那么对于一个始终预测y=0的模型,它预测上面的肿瘤问题的错误率也仅仅是0.5%.

Accuracy = (true positives + true negatives) / (total examples)

为此,我们引入Precision和Recall 如下所示:
在这里插入图片描述
此时,如果我们用Precision和Recall去评判刚刚y=0的模型,那么结果都是0

在这里插入图片描述

一般而言,Precision和Recall的图像不固定,不过都呈现上图中的趋势。

当我们设高阈值时,我们得到的预测结果中得到肿瘤的概率也就越大因而Precision越高,不过可能漏掉一部分肿瘤的可能也越大从而Recall越高。

(3)F1-score

F1-score是权衡Precision和Recall后给出的一个评判模型的式子
F 1 = P R P + R F_1 = \frac{PR}{P+R} F1?=P+RPR?

(4)ROC 曲线

ROC 曲线用于绘制采用不同分类阈值时的 TP 率(TPR)与 FP 率(FPR)。我们根据学习器的预测结果,把阈值从0变到最大,即刚开始是把每个样本作为正例进行预测,随着阈值的增大,学习器预测正样例数越来越少,直到最后没有一个样本是正样例。

TP率也叫真正例率,FP率也叫假正例率,注意区别于准确率和召回率
T P R = T P T P + F N TPR = \frac{TP}{TP+FN} TPR=TP+FNTP?
F P R = F P F P + T N FPR = \frac{FP}{FP+TN} FPR=FP+TNFP?

在这里插入图片描述

(5)AUC

AUC是一个极常用的评价指标,它定义为 ROC 曲线下的面积。之所以使用 AUC 作为评价指标,是因为ROC 曲线在很多时候并不嗯呢该清晰地说明哪个分类器的效果更好,而 AUC 作为一个数值,其值越大就代表分类器的效果越好。

(6)交叉熵

? ln ? L ( w , b ) = ∑ i n ∑ k m ? y ^ k i ln ? f w , b ( x k i ) -\ln{L(w,b)} = \sum_{i}^{n}\sum_{k}^{m}-\hat{y}_k^i\ln{f_{w,b}(x^i_k)} ?lnL(w,b)=in?km??y^?ki?lnfw,b?(xki?)

其在二分类问题上的表现形式为:

? ln ? ( w , b ) = ∑ i n ? [ y ^ i ln ? f w , b ( x i ) + ( 1 ? y ^ i ) ln ? ( 1 ? f w , b ( x i ) ) ] -\ln{(w,b)} = \sum_{i}^{n}-[\hat{y}^{i}\ln{f_{w,b}(x^i)}+ (1-\hat{y}^{i})\ln{(1-f_{w,b}(x^i))}] ?ln(w,b)=in??[y^?ilnfw,b?(xi)+(1?y^?i)ln(1?fw,b?(xi))]

举个栗子,假设我们的一个sample经过softmax后得到的 y = f w , b ( x ) = [ 0.9 0.1 ] y=f_{w,b}(x)=\begin{bmatrix} 0.9 \\ 0.1\\ \end{bmatrix}\quad y=fw,b?(x)=[0.90.1?],其label为 y ^ = [ 1 0 ] \hat{y}=\begin{bmatrix} 1 \\ 0\\ \end{bmatrix}\quad y^?=[10?],那么在第一个式子里计算出的值为 ? ( 1 ln ? 0.9 + 0 ln ? 0.1 ) = ? ln ? 0.9 -(1 \ln0.9+0\ln{0.1})=-\ln0.9 ?(1ln0.9+0ln0.1)=?ln0.9,第二计算结果即为 ? ln ? 0.9 ? 0 ln ? 0.1 -\ln0.9-0\ln0.1 ?ln0.9?0ln0.1。再比方说,我们的另一个sample经过softmax后得到的 y = f w , b ( x ) = [ 0.1 0.8 0.1 ] y=f_{w,b}(x)=\begin{bmatrix} 0.1 \\ 0.8 \\ 0.1\\ \end{bmatrix}\quad y=fw,b?(x)=???0.10.80.1????,其label为 y ^ = [ 0 1 0 ] \hat{y}=\begin{bmatrix} 0 \\ 1 \\ 0\\ \end{bmatrix}\quad y^?=???010????,此时我们有 ? ln ? L ( w , b ) = ? 0 ln ? 0.1 ? 1 ln ? 0.8 ? 0 ln ? 0.1 = ? ln ? 0.8 -\ln{L(w,b)}=-0\ln0.1-1\ln{0.8}-0\ln0.1=-\ln0.8 ?lnL(w,b)=?0ln0.1?1ln0.8?0ln0.1=?ln0.8

像上面这样我们如果有两个distribution的点 y ^ \hat{y} y^? y y y,我们记他们的交叉熵即为 H ( y ^ , y ) = ? ∑ k y ^ k ln ? y k H(\hat{y},y)=-\sum\limits_{k}\hat{y}_k\ln{y_k} H(y^?,y)=?k?y^?k?lnyk?.

cross entropy交叉熵的含义是表达着两个distribution有多接近,如果这两个点的distribution一模一样的话,那它们计算出来的cross entropy就是0,用在我们这里的分类问题中,我们就是希望 y ^ \hat{y} y^? y y y越接近越好。

2.2 回归指标

回归指标计算公式
MSE 1 m ∑ i = 1 n ( y ? y ^ ) 2 \frac{1}{m}\sum\limits_{i=1}^{n}(y - \hat{y})^2 m1?i=1n?(y?y^?)2
RMSE 1 m ∑ i = 1 n ( y ? y ^ ) 2 \sqrt{\frac{1}{m}\sum\limits_{i=1}^{n}(y - \hat{y})^2} m1?i=1n?(y?y^?)2 ?

3. 混淆矩阵和 heatmap

混淆矩阵

一图胜千言,其实就是对比实际和预测结果差异与关系的表格,之前讨论召回率时我们也有用过
在这里插入图片描述
混淆矩阵可以帮助我们在分类问题中,用于分析模型对于那些样本或哪类样本预测能力不够从而导致结果不准确,然后分析造成结果误差的可能因素,最终修正训练数据和模型。

heatmap

热力图在实际中常用于展示一组变量的相关系数矩阵,在展示列联表的数据分布上也有较大的用途,通过热力图我们可以非常直观地感受到数值大小的差异状况。

其颜色可以直观地反映各变量之间的相关程度

import seaborn as sns

corrmat = train.corr() # 计算协方差矩阵,是 heatmap 的重要参数
f, ax = plt.subplots(figsize=(20,9))
sns.heatmap(corrmat, vmax=0.8, square=True)

在这里插入图片描述

简言之,混淆矩阵用于分析模型结果,heatmap则是用来分析数据的。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-11-25 08:07:06  更:2021-11-25 08:07:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 4:34:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码