抚州购物网站开发设计,寻求南宁网站建设人员,推广网站的广告怎样做,如何制作安卓app1. 机器学习简介 机器学习是从数据中自动分析获得模型#xff0c;并利用模型对未知数据进行预测。它是一个流程性很强的工作#xff0c;包括数据采集、数据清洗、数据预处理、特征工程、模型调优、模型融合、模型验证、模型持久化、在线服务等模块。 而在这些基本的步…1. 机器学习简介 机器学习是从数据中自动分析获得模型并利用模型对未知数据进行预测。它是一个流程性很强的工作包括数据采集、数据清洗、数据预处理、特征工程、模型调优、模型融合、模型验证、模型持久化、在线服务等模块。 而在这些基本的步骤内又存在很多种方式比如数据采集可以是爬虫可以是数据库拉取可以是通过API获取等等数据清洗要注意缺失值处理异常值处理特征工程更是复杂多样。 2. 数据采集与探索 所有的机器学习算法在应用场景、优势劣势、对数据要求、运行速度上都各有优劣但有一点不变的是数据贪婪的也就是说任何一个算法都可以通过增加数据来达到更好的结果因此第一步数据采集也是最基础最重要的一步。 2.1 数据采集的几种方式
2.1.1 API 现在有很多公开的数据集一些组织也提供开放的API接口来获取相关数据这类数据通常数据更加规范比如 1. sklearn.datasets中有很多练习数据 2. OpenDota提供的Dota2相关数据好处是通常数据更加规范。 2.1.2 数据库 这种是最常见也最理想的状态通过公司自身的数据库保存数据更加可控也更加自由灵活。
2.1.3 爬虫 这种通常在个人项目、公司资源不足以提供数据、原始数据不足需要扩展数据情况下使用较多比如根据时间获取天气数据一般都是通过爬虫爬来的
2.1.4 一些常见数据集 MNIST手写数据集 ImageNet图片数据集从图片搜索引擎上获得 AudioSet音频数据集youtube上的音频切片 Kinetics人类行为数据集youtube上的视频切片 KITTI无人驾驶数据集被相机记录到的一些交通场景 Amazon Review评论数据集亚马逊网站上的一些用户评论 SQuAD问答数据集 LibriSpeech有声读物数据集。 机器学习数据集汇总收集 https://blog.csdn.net/qq_15698613/article/details/116957307 2.2 数据信息探索 了解数据集基本信息包括数据集大小各个字段的含义类型目标和特征也可通过可视化了解数据的分布。 data.shape查看数据形状.shape[0]查看行.shape[1]查看列数 df.head()查看前几行 df.describe()查看数值数据的描述统计信息 df.info()根据行数查看数据是否有缺失值数据类型是否合适。 3. 数据清洗与预处理
3.1 数据清洗 这部分更多是针对类似爬虫这种方式获取的数据这种数据通常没有一个非常固定规范的格式数据非常不稳定因此需要进行前期的清洗工作工作量很大。清洗的目标是让模型更加泛化让数据更体现其价值从而让模型更精确。 几种清洗方向 1. 检查数据合理性比如爬到的数据是否满足需求 2. 检查数据有效性爬到的数据量是否足够大以及是否都是相关数据 3. 检查工具爬虫工具是否有bug。 3.2 数据预处理 因为人为、软件、业务导致的异常数据还是比较多的比如性别数据的缺失、年龄数据的异常负数或者超大的数而大多数模型对数据都有基本要求比如不能缺失而异常数据对模型是有影响的因此通常都需要进行预处理。
3.2.1 数据缺失及异常场景
1. 数据缺失场景 1. bug导致缺失 因为程序bug导致缺失这种缺失通常是少数的一般都需要进行某种方式的填充 2. 打点缺失 3. 正常业务情况导致缺失 比如性别字段本身就是可以不填的那么性别就存在缺失且这种缺失可能是大量的这里就要首先评估该字段的重要性以及缺失率再考虑是填充还是丢弃 2. 数据异常场景 1. 绝对异常 比如人的年龄200岁这个数据放到什么场景下都是异常 2. 统计异常 比如某个用户一分钟内登陆了100次虽然每一次登陆看着都是正常的但是统计起来发现是异常的可能是脚本在自动操作 3. 上下文异常 比如冬天的北京晚上温度为30摄氏度虽然但看数据是正常但是跟当前的日期、时间一关联发现是异常 3.2.2 数据预处理 一般包括缺失值处理、重复值处理、数据类型的转换、字符串数据的规整。1. 缺失值处理 1. 直接删除适合缺失值数量较多并且是随机出现的删除它们对整体数据影响不大 2. 数值类型用平均值取代data[A].fillna(data[A].mean()) 3. 分类数据用最常见的类别或代表未知的字符串填充data[A].value_counts() data[A].fillna(前面得到的最常见的类别) data[A].fillna(U)缺失比较多时填充代表未知的字符串 4. 使用模型预测缺失值例如K-NN。 2. 数据归一化/标准化 一些模型具有伸缩可变性如SVM最好进行标准化避免模型参数受极值影响另一方面对于伸缩不变模型如逻辑回归最好也进行标准化可以加快训练速度。 归一化/标准化常见两种方法 1. min-max 化为[0,1] 适合分别在有限范围内的数据数值较集中但min/max不稳定会影响结果。 2. Z-core 化为均值为0方差为1适合最大/最小值未知或者有超出取值范围的离散值。 3.处理离群/极端值 识别异常值的方法有以下几种 1简单的统计分析 23∂原则 如果数据服从正态分布在3∂原则下异常值为一组测定值与平均值的偏差超过3倍标准差的值。如果数据服从正态分布距离平均值3∂之外的值的出现的概率为P(|x-u|3∂)0.003属于极个别的小概率事件。如果数据不服从正态分布也可以用远离平均值的多少倍标准差来描述。 3箱型图分析 箱型图提供了识别异常值的一个标准如果一个值小于Q1-1.5IQR或大于Q31.5IQR则被称为异常值。箱型图判断异常值的方法以四分位数和四分位距为基础四分位数具有鲁棒性25%的数据可以变得任意远并且不会干扰四分位数所以异常值不能对这个标准施加影响因此箱型图识别异常值比较客观。 4基于模型检测 首先建立一个模型异常值是那些与模型不能完美拟合的数据。
如何最大限度降低这些极端离群值的影响? 1. 对每个值取对数对数缩放 2. 限制最大/最小值 3. 删除异常值 4. 平均值替代 5. 视为缺失值 4. 数据分箱Binning 将特征值浮点数分为几个范围如32.3 32.5 为32-33范围相应值为1为了将纬度变为一项实用的预测指标对纬度“分箱”。 4. 特征工程 特征工程决定了机器学习的上限模型只是逼近这个上限特征工程是机器学习中最重要也最难的部分它难并不是技术上的而是经验上的一个经验丰富的算法工程师在看到项目、数据的同时脑子里已经有了特征工程的雏形这可以帮助他很快的得到一个不错的分数而后续的优化上经验也是最重要的参考。
4.1 特征构建
4.1.1 特征组合 例如组合日期、时间两个特征构建是否为上班时间(工作日的工作时间为1其他为0)特征特征组合的目的通常是为了获得更具有表达力、信息量的新特征
4.1.2 特征拆分 将业务上复杂的特征拆分开比如将登陆特征拆分为多个维度的登陆次数统计特征拆分为多个的好处一个是从多个维度表达信息另一个多个特征可以进行更多的组合
4.1.3 外部关联特征 例如通过时间信息关联到天气信息这种做法是很有意义的首先天气数据不是原始数据集的因此这样想当于丰富了原始数据通常来讲会得到一个比仅仅使用原始数据更好的结果不仅仅是天气很多信息都可以这样关联比如在一个Kaggle上的房屋预测问题上可以通过年份关联到当时的一些地方政策、国际大事等等都是有影响的比如金融危机 4.2 特征选择 1. 特征自身的取值分布 主要通过方差过滤法比如性别特征1000个数据999个是男的1个是女的这种特征由于自身过于偏斜因此是无法对结果起到足够的帮助 2. 特征与目标的相关性 可以通过皮尔逊系数、信息熵增益、基尼指数等来判断思路是如果一个特征与目标的变化是高度一致的那么它对于预测目标就是具有很大指导意义的 3. 单特征AUC 4. 特征分裂次数 5. 模型输出特征重要度 4.3 特征处理
4.3.1 离散特征处理
1. 独热编码one-hot encoding 处理方法比较简单比如某特征的取值是高、中和低那么就可以创建三个取值为0或者1的特征将高编码为1,0,0中编码为0,1,0低编码为0,0,1。也就是说之前的一个特征被转化为了三个特征。2. 特征嵌入embedding 这个一般用于深度学习中。比如对于用户的ID这个特征如果要使用独热编码则维度会爆炸如果使用特征嵌入维度就低很多了。对于每个要嵌入的特征会有一个特征嵌入矩阵这个矩阵的行很大对应该特征的数目。比如用户ID如果有100万个那么嵌入的特征矩阵的行就是100万。但是列一般比较小比如可以取20。这样每个用户ID就转化为了一个20维的特征向量进而参与深度学习模型。 在tensorflow中可以先随机初始化一个特征嵌入矩阵对于每个用户可以用tf.nn.embedding_lookup找到该用户的特征嵌入向量。特征嵌入矩阵会在反向传播的迭代中优化。
4.3.2 连续特征的离散化处理 连续特征的离散化就是在数据的取值范围内设定若干个离散的划分点将取值范围划分为一些离散化的区间最后用不同的符号或整数值代表落在每个子区间中的数据值。首先要确定分类数然后将连续特征值映射到这些分类值等宽法、等频法、一维聚类。1. 根据阈值进行分组 比如根据连续值特征的分位数将该特征分为高中和低三个特征。将分位数从0-0.3的设置为低0.3-0.7的设置为中0.7-1的设置为高。2. 基于聚类分析的方法 一维聚类的方法包括两个步骤首先将连续特征的值用聚类算法如K-Means算法进行聚类然后再将聚类得到的簇进行处理合并到一个簇的连续特征值并做同一标记。聚类分析的离散化方法也需要用户指定簇的个数从而决定产生的区间数。3. 使用梯度提升树(GDBT)将连续值转化为离散值 在sklearn中可以用GradientBoostingClassifier的 apply方法很方便的得到样本离散化后的特征然后使用独热编码即可。
4.3.3时间类型的数据处理
1. 连续的时间差值法 即计算出所有样本的时间到某一个未来时间之间的数值差距这样这个差距是UTC的时间差从而将时间特征转化为连续值。2. 将一个时间转化为离散特征 根据时间所在的年月日星期几小时数将一个时间特征转化为若干个离散特征这种方法在分析具有明显时间趋势的问题比较好用。
4.3.4 文本类型的数据预处理
1. 词袋 直接把文本数据丢给模型模型是无法解释的因此需要把文本型的数据用数值表示。去掉停用词标点符号留下表达实际含义的词组成列表在词库中映射稀疏向量。 2. 把词袋中的词扩充到 n-gram 它的思想是在整个语言环境中句子T的出现概率是由组成T的N个词组成的。 3. 使用TF-IDF方法 4. word2vec将词转化为词向量NLP
4.4 降维 当特征选择完成后可以直接训练模型了但是可能由于特征矩阵过大导致计算量大训练时间长的问题因此降低特征矩阵维度也是必不可少的。常见的降维方法除了以上提到的基于L1惩罚项的模型以外另外还有主成分分析法PCA和线性判别分析LDA线性判别分析本身也是一个分类模型。PCA和LDA有很多的相似点其本质是要将原始的样本映射到维度更低的样本空间中但是PCA和LDA的映射目标不一样PCA是为了让映射后的样本具有最大的发散性而LDA是为了让映射后的样本有最好的分类性能。所以说PCA是一种无监督的降维方法而LDA是一种有监督的降维方法。 1. 主成分分析法PCA 2. 线性判别分析法LDA 3. 奇异值分解SVD-文本降维 降维技术不是特征选择降维是把高维数据的特征映射到低维空间中而特征选择是在高维空间中直接剔除部分特征选出重要特征。 5. 模型构建
5.1 训练集测试集划分 训练模型前常用的HoldOut验证法此外还有留一法、k折交叉验证等方法把数据集分为训练集和测试集并可再对训练集进一步细分为训练集和验证集以方便评估模型的性能。 1. 训练集(training set): 用于运行学习算法训练模型 2. 开发验证集(development set): 用于调整超参数、选择特征等以选择合适模型 3. 测试集(test set): 只用于评估已选择模型的性能但不会据此改变学习算法或参数。 5.2 模型选择 在更复杂的情况下我们需要做出与预期结果相匹配的选择。可以在3大类中探索机器学习模型的选项。
5.2.1 监督学习模型 在这样的模型中结果是已知的因此不断改进模型本身直到输出达到所需的精度水平。
5.2.2 无监督学习 如果结果未知但需要分类则需使用无监督学习。无监督学习的示例包括K-means和Apriori算法。
5.2.3 强化学习 它着重于学习在反复试验的基础上做出更好的决策。它们通常在商业环境中使用。马尔可夫的决策过程就是一个例子。
5.3 模型调优 模型的训练过程即学习数据经验得到较优模型及对应参数如神经网络最终学习到较优的权重值。整个训练过程还需要通过调节超参数如神经网络层数、梯度下降的学习率)进行控制优化的。调节超参数是一个基于数据集、模型和训练过程细节的实证过程需要基于对算法的原理理解和经验借助模型在验证集的评估进行参数调优。 同一个模型不同参数下的表现依然是天差地别通常在特征工程部分结束后就进入到模型参数调优的步骤这一步也是最无聊最耗时间的因此一个好的技巧还是比较实用的。 调参方式与工具 1. 自动调参技术网格搜索GridSearch、随机搜索及贝叶斯优化等 2. 调参顺序上建议是先重要的影响大的参数后没那么重要的影响小的参数 3. 举例随机森林作为集成方法中最常用的模型之一通常第一个调的是n_estimator即树的个数其次是学习率再其次是max_feature会发现这三个都是随机森林自身的参数后面可以细调每棵树的参数比如最小分裂样本数等等 5.4 模型融合 一般来讲任何一个模型在预测上都无法达到一个很好的结果这是因为通常来说单个模型无法拟合所有数据及不具备对所有未知数据的泛化能力因此需要对多个模型进行融合这一点在Kaggle上体现的也很明显好的排名中基本都用了模型融合。主要有以下融合方式
5.4.1 简单融合 1. 分类问题 投票法融合不考虑单个模型自身的得分 2. 回归问题 假设每个模型权重一致计算融合结果 5.4.2 加权融合 基本同上区别是考虑每个模型自身得分得分高的权重大
5.4.3 使用模型进行融合 即将多个单模型的输出作为输入送入到某个模型中让模型去做融合通常可以达到最好的效果但是由于用到了模型因此要注意过拟合问题。
6. 模型评估 机器学习的直接目的是学拟合到“好”的模型不仅仅是学习过程中对训练数据的良好的学习预测能力根本上在于要对新数据能有很好的预测能力泛化能力所以客观地评估模型性能至关重要。技术上常根据训练集及测试集的指标表现评估模型的性能。
6.1 评估分类模型 常用的评估标准有查准率P、查全率R及两者调和平均F1-score 等并由混淆矩阵的统计相应的个数计算出数值。 查准率是指分类器分类正确的正样本TP的个数占该分类器所有预测为正样本个数TPFP的比例查全率是指分类器分类正确的正样本个数TP占所有的正样本个数TPFN的比例。F1-score是查准率P、查全率R的调和平均 6.2 评估回归模型 常用的评估指标有MSE均方误差等。反馈的是预测数值与实际值的拟合情况。 6.3 评估聚类模型 可分为两类方式一类将聚类结果与某个“参考模型”的结果进行比较称为“外部指标”external index如兰德指数FM指数等。另一类是直接考察聚类结果而不利用任何参考模型称为“内部指标”internal index如紧凑度、分离度等。
6.4 常用评估指标
6.4.1 P-R曲线 P-R曲线的横轴是召回率纵轴是精确率。对于一个排序模型来说其P-R曲 线上的一个点代表着在某一阈值下模型将大于该阈值的结果判定为正样本 小于该阈值的结果判定为负样本此时返回结果对应的召回率和精确率。整条P-R 曲线是通过将阈值从高到低移动而生成的。下图是P-R曲线样例图其中实线代表 模型A的P-R曲线虚线代表模型B的P-R曲线。原点附近代表当阈值最大时模型的 精确率和召回率。 6.4.2 F1分数 F1分数是精度和召回率的谐波平均值正常的平均值平等对待所有的值而谐波平均值回给予较低的值更高的权重因此只有当召回率和精度都很高时分类器才能得到较高的F1分数。 6.4.3 AUC AUC指的是ROC曲线下的面积大小该值能够量化地反映基于ROC曲线衡量出的模型性能。计算AUC值只需要沿着ROC横轴做积分就可以了。 由于ROC曲线一般都处于 。这条直线的上方如果不是的话只要把模型预测的概率反转成 1− 就可以得到一个更好的分类器所以AUC的取值一般在 0.51 之间。AUC越大说明分类器越可能把真正的正样本排在前面分类性能越好。 7. 模型持久化 将得到的模型持久化到磁盘方便后续使用、优化时不需要从头开始
8. 模型部署及监控
8.1 模型部署 模型评估通过后模型将部署上线投入运营接受线上的考验任何的错误将直接造成经济损失。所以在评估、验证模型的过程中除了常规的模型性能统计指标外还要重视可视化方法、多维度分析、线上比对分析灰度上线、小流量测试等。上线时确保模型开发环境和线上环境一致例如查看主要包的版本是否一致特征处理结果是否一致、同一批数据的预测结果在开发和线上两个环境中是否一致统计指标是否一致AUC、KS等。
8.2 模型监控 模型监控应该在模型上线前就有所准备并在模型上线时一并上线有时模型异常可能导致巨大的经济损失。当模型评分出现了偏移需要查找是哪些特征造成的此时特征监控将指出问题所在。当寻找这些问题的原因时也可能牵扯出IT系统的故障。发现问题就是模型监控的意义所在。 模型监控的内容可分为如下几个部分。 1. 模型评分稳定性的监控分布、稳定性指标、业务指标等 2. 特征稳定性的监控分布、稳定性指标等 3. 线上服务稳定运行的监控。