来源教程

基础

  • 有编程基础
  • 有一定数学概念

目标

使用tensorflow进行回归预测协同过滤推荐

学习路径

  1. 看完机器学习100天的函数部分,学习一些基本概念和常用方法
    • 线性回归、最佳拟合线、多元线性回归
    • 逻辑回归、S函数
    • K-NN
    • SVM
    • 决策树及算法
    • 随机森林
    • K-均值聚类
    • 层次聚类
  2. 看完google机器学习速成教程
    • 了解机器学习的基本概念及术语:标签、特征、模型
    • 优化函数、损失函数、梯度下降、学习速率、步数
    • 过拟合与欠拟合概念
    • 训练集、验证集、测试集
    • 数据处理、分箱
    • 正则化L1,L2
    • 精确率和召回率
    • 阈值
    • 神经网络、隐藏层与神经元、激活函数
    • 多类别神经网络、softmax
    • 嵌入、嵌套转换到低维空间
  3. 查看官网示例,学习keras高阶API
    • 回归示例:数据转换、特征绘图、数据分拆与随机排序、构建分层模型、结果评估、预测数据

Regression demo

解决问题步骤

  1. 使用puppteercheerio建立一个爬虫框架程序用于抓取数据。

关于puppteer可以参考使用puppeteer进行浏览器模拟

  1. 使用node-xlsx进行数据处理并导出处理结果。

这里做了一个简单的稀疏数据低维转换,用于集合数据。如果用于生产,可以使用数据库来做低维转换。
或者我们可以做个K均值聚类来实现该目标?

  1. 导入python程序进行回归预测

运行结果

模型测试结果如下:
loss
损失趋势

prediction_point
预测值与实际值的点分布

prediction_map
预测值与实际值差异的柱状分布

感想

原始数据量在2400条左右(80%的训练数据,其中30%被拆分为验证集,20%的测试数据)用于预测1-10分的分数,生成的模型在预测时遵循高斯分布,模型已经达到预期水平。

由于使用了EarlyStopping函数,在70轮左右(默认为1000轮)即可收敛。

后续优化

  1. 验证集测试时波动比较大,看看能不能解决掉它。

添加L2正则化(正则化率0.001),同时增大了EarlyStopping的检测长度后,有一定程度的提升。epoch扩大到150轮左右,后期的波动幅度明显减小。

  1. 在特征分数计算时,抓取程序可能还有问题,后续将改进抓取程序继续优化。

修改了特征分数的输出规则

Recommender system demo

解决问题步骤

  1. 使用已有的爬虫框架抓取用户喜好数据