怎样把网站上传到服务器上,建设银行企业网上银行网站,yy直播能赚钱吗,做网站的结论一#xff0c;机器学习系统分类
机器学习系统分为三个类别#xff0c;如下图所示: 二#xff0c;如何处理数据中的缺失值
可以分为以下 2 种情况#xff1a;
缺失值较多#xff1a;直接舍弃该列特征#xff0c;否则可能会带来较大噪声#xff0c;从而对结果造成不良影…一机器学习系统分类
机器学习系统分为三个类别如下图所示: 二如何处理数据中的缺失值
可以分为以下 2 种情况
缺失值较多直接舍弃该列特征否则可能会带来较大噪声从而对结果造成不良影响。缺失值较少当缺失值较少 10%时可以考虑对缺失值进行填充有几下几种填充策略 用一个异常值填充比如 0 缺失值作为一个特征处理data.fillna(0)用均值|条件均值填充data.fillna(data.mean())用相邻数据填充data.fillna(methodpad)data.fillna(methodbfill)插值data.interpolate()拟合简单来说就是将缺失值也作为一个预测问题来处理将数据分为正常数据和缺失数据对有值的数据采用随机森林等方法拟合然后对有缺失值的数据进行预测用预测的值来填充
三数据清洗与特征处理 机器学习中的数据清洗与特征处理综述 美团的这篇综述文章总结得不错虽然缺少实例不容易直观理解但是初学者来说也足够了。 3.1清洗标注数据
清洗标注数据的方法主要是是数据采样和样本过滤。
数据采样对于分类问题选取正例负例。对于回归问题需要采集数据。对于采样得到的文本根据需要设定样本权重当模型不能使用全部的数据来训练时需要对数据进行采样设定一定的采样率。采样的方法包括随机采样固定比例采样等方法。样本过滤1.结合业务情况进行数据的过滤例如去除crawler抓取spam作弊等数据。 - 2.异常点检测采用异常点检测算法对样本进行分析常用的异常点检测算法包括 - 偏差检测例如聚类最近邻等。
3.2特征分类
根据不同的分类方法可以将特征分为
Low level 特征和 High level 特征稳定特征与动态特征。二值特征、连续特征、枚举特征
Low level 特征是较低级别的特征主要是原始特征不需要或者需要很少的人工处理和干预例如文本中的词向量特征图像特征中的像素点大小用户 id商品 id等。High level 特征是经过比较复杂的处理结合部分业务逻辑或者规则、模型得到的特征例如人工打分模型打分等特征可以用于较复杂的非线性模型。Low level 比较针对性覆盖面小。长尾样本的预测值主要受 high level 特征影响。 高频样本的预测值主要受 low level 特征影响。
稳定特征 是变化频率较少的特征例如评价平均分团购单价价格等在较长时间段内数值都不会发生变化。动态特征是更新变化比较频繁的特征有些甚至是实时计算得到的特征例如距离特征2 小时销量等特征。或者叫做实时特征和非实时特征。针对两类特征的不同可以针对性地设计特征存储和更新方式例如对于稳定特征可以建入索引较长时间更新一次如果做缓存的话缓存的时间可以较长。对于动态特征需要实时计算或者准实时地更新数据如果做缓存的话缓存过期时间需要设置的较短。
二值特征主要是 0/1 特征即特征只取两种值0 或者 1例如用户 id 特征目前的 id 是否是某个特定的 id词向量特征某个特定的词是否在文章中出现等等。连续值特征是取值为有理数的特征特征取值个数不定例如距离特征特征取值为是0~正无穷。枚举值特征主要是特征有固定个数个可能值例如今天周几只有7个可能值周1周2…周日。在实际的使用中我们可能对不同类型的特征进行转换例如将枚举特征或者连续特征处理为二值特征。枚举特征处理为二值特征技巧将枚举特征映射为多个特征每个特征对应一个特定枚举值例如今天周几可以把它转换成7个二元特征今天是否是周一今天是否是周二…今天是否是周日。连续值处理为二值特征方法先将连续值离散化后面会介绍如何离散化)再将离散化后的特征切分为N个二元特征每个特征代表是否在这个区间内。
3.3特征处理与分析
对特征进行分类后需要对特征进行处理常用的特征处理方法如下
特征归一化离散化缺省值处理特征降维方法特征选择方法
特征归一化。在有些算法中例如线性模型或者距离相关的模型聚类模型、knn 模型等特征值的取值范围会对最终的结果产生较大影响例如输入数据有两种不同的特征其中的二元特征取值范围 [0, 1]而距离特征取值可能是 [0正无穷]两种特征取值范围不一致导致模型可能会偏向于取值范围较大额特征为了平衡取值范围不一致的特征需要对特征进行归一化处理将特征值取值归一化到 [0,1] 区间常用的归一化方法包括
函数归一化通过映射函数将特征取值映射到01区间例如最大最小值归一化方法是一种线性的映射。还有通过非线性函数的映射例如 log 函数等。分维度归一化可以使用最大最小归一化方法但是最大最小值选取的是所属类别的最大最小值即使用的是局部最大最小值不是全局的最大最小值。排序归一化不管原来的特征取值是什么样的将特征按大小排序根据特征所对应的序给予一个新的值。
离散化。在上面介绍过连续值的取值空间可能是无穷的为了便于表示和在模型中处理需要对连续值特征进行离散化处理。常用的离散化方法包括等值划分和等量划分。
等值划分是将特征按照值域进行均分每一段内的取值等同处理。例如某个特征的取值范围为 [010]我们可以将其划分为10段[01)[12)…[910)。等量划分是根据样本总数进行均分每段等量个样本划分为 1 段。例如距离特征取值范围03000000现在需要切分成 10 段如果按照等比例划分的话会发现绝大部分样本都在第 1 段中。使用等量划分就会避免这种问题最终可能的切分是[0100)[100300)[300500)…[100003000000]前面的区间划分比较密后面的比较稀疏。
缺省值处理。有些特征可能因为无法采样或者没有观测值而缺失例如距离特征用户可能禁止获取地理位置或者获取地理位置失败此时需要对这些特征做特殊的处理赋予一个缺省值。缺省值如何赋予也有很多种方法。例如单独表示众数平均值等。
四交叉验证
交叉验证是机器学习当中的概念一般深度学习不会使用交叉验证方法原因是深度学习的数据集一般都很大。但是也有例外Kaggle 的一些医疗类比赛训练集一般只有几千张由于训练数据很少用来作为验证集的数据会非常少因此训练的模型在验证集上精度可能会有很大波动这直接取决于我们所选择的验证集和训练集划分方式也就是说验证集的划分方式可能会造成验证集精度存在较大方差从而无法对模型进行有效评估同时也无法进行有效的超参数调整batch 设置多少模型最佳收敛。
一个有效的解决办法是在训练数据上面我们可以进行交叉验证(Cross-Validation)·。一种方法叫做 ·K-fold Cross Validation ( K 折交叉验证), K 折交叉验证初始采样分割成 K 个子样本一个单独的子样本被保留作为验证模型的数据其他 K-1 个样本用来训练。交叉验证重复 K 次每个子样本验证一次平均 K 次模型训练的结果最终输出一个单一估测。k-折交叉验证的训练集划分方式如下图所示 当 K 值大的时候 我们会有更少的 Bias(偏差), 更多的 Variance。当 K 值小的时候 我们会有更多的 Bias(偏差), 更少的 Variance。
k 折交叉验证的代码实现可以参考《Python深度学习》第三章在模型训练好后可通过计算所有 Epoch 的 K 折验证分数的平均值并绘制每轮的模型验证指标变化曲线观察哪个 Epoch 后模型不再收敛从而完成模型调参工作。同时K 折交叉验证方式训练模型会得到 K个模型将这个 K 个模型在测试集上的推理结果取平均值或者投票也是一种 Ensemble 方式可以增强模型泛化性防止过拟合。
# 计算所有轮次中的 K 折验证分数平均值
average_mae_history [np.mean([x[i] for x in all_mae_histories]) for i in range(num_epochs)]参考资料
Machine learning basics