决定如何建模(有许多方法!) .例如,建一个分类模型,给定用户和歌曲,模型将返回用户是否会对这首歌感兴趣的结果。或者我们有一个歌曲列表,把它给模型运行,模型将显示它认为用户可能会喜欢的歌曲。 考虑你有什么数据(例如,用户收听歌曲的历史记录和用户配置文件信息)。
考虑可能相关的要素:用户年龄(可能相关?); 用户名和电子邮件地址(完全无关); 用户位置(可能相关?);用户收听歌曲的历史记录(相关)。用户之前听过的歌曲的类型(乡村,摇滚,流行等)(非常相关) 把相关信息用数字表示(找到特征):描述用户的特征;描述歌曲的特征
准备最终的训练数据 给定用户u(u1,u2,u3 ... un)的特征 歌曲的特征s1(s11,s12,s13,...,s1k),s2(s21,s22 ,... s2k)... 为用户创建训练实例,u(u,si)(1 - 收听)和(u,sj)(0 - 没有收听)
特征标准化(Feature normalization ) 你的特征很有可能比例不同: 用户年龄:0到100 用户收入:从0到数百万 有些机器学习模型可能无法很好地处理这样的范围各异的特征。 正则化将对特征的惩罚不一致 距离将受到范围最大的特征的控制 一些优化算法可以更快地收敛(梯度下降) …… 解决方案: 标准化特征,使特征的范围大致相同
怎样评估模型? 你最关心的是什么?是“没有假正(false positives)”吗?还是整体的预测准确度? 将你关心的问题表达为一个可计算的指标,确保该指标与你关心的内容直接相关。 此指标可用于:选择模型;在部署之前测试模型;对模型或数据进行细化(例如添加更多特征)。
模型选择: 用简单的模型入手。 例如,尝试线性模型。 这些模型通常有效: 分类:逻辑回归,感知器算法,AdaBoost,SVM(线性内核为大量数据,RBF为小数据),随机森林 回归:线性回归,随机森林 尝试几个不同的模型 基于模型在数据集上的性能选择模型 确保在对不同数据集进行模型选择之后评估最终性能指标(例如,不要使用相同的数据集来选择模型)
考虑深度学习 如果你有大量的有标记数据 如果你很难找到特征或特征之间的连接非常复杂(例如:对象检测) 能够忍受更长的训练/细化时间 如果你对深度学习有基本的了解:什么是架构选择?(多少层?完全连接还是不完全链接?等等); 如何防止过拟合?
超参数调优(Hyperparameter tuning) ML模型具有超参数:这些是在训练开始之前就已经固定并且影响训练过程和复杂性的参数。 例如:学习率,正则化常数等 默认值只是让它们得到平均的性能; 为了得到最好的ML模型,需要调优超参数 过程:设置值,训练模型, 评估,(基于评估)细化值 方法:Grid;算法辅助超参数调优(贝叶斯等)
有监督 ML pipelines 需要为以下内容设置 pipeline: 训练:获取数据(可能还需要存储数据);特征提取和数据标记; 拟合模型; 测试模型/选择模型;存储模型 预测:获取实时数据;从中提取特征;检索模型;在新数据上使用模型进行预测;根据预测执行
选择工具/框架前需要考虑的事 训练数据存储在哪里?数据库? 云?需要存储特征和标记吗?还是在训练时再提取特征和标记? 怎样训练?在云上训练?还是离线?数据变化的频率如何? 怎样使模型可用于预测?使用框架工具?还是从头开始编写pipeline? 你希望框架具有监控功能吗?出现问题时能够 fallback 吗?
初步的分析是有必要的,那么下一步该做什么? 验证是否需要用大量数据训练(模型在增加训练规模时能表现得更好) 如果是,请考虑用完整的数据进行训练 考虑其他要求: - 在有新数据时更新模型,还是根据情况进行再训练? - 训练数据是否都适合内存? - 是否有资源在云中设置一个完整的ML云 pipeline(DIY方法)? - 还是利用“ML即服务” (ML as a service)?
ML生产工具:实践方法 (责任编辑:本港台直播) |