【机器学习PAI实战】—— 玩转人工智能之商品价格预测
摘要: 我们经常思考机器学习,深度学习,以至于人工智能给我们带来什么?在数据相对充足,足够真实的情况下,好的学习模型可以发现事件本身的内在规则,内在联系。我们去除冗余的信息,可以通过最少的特征构建最简单、误差最小的模型,以此将学习到的规则,逻辑应用到具体的场景中,帮助我们可以快速准确的处理某些繁琐重复的工作。
模型训练与在线预测服务、推荐算法四部曲、机器学习PAI实战、更多精彩,尽在开发者分会场
【机器学习PAI实战】—— 玩转人工智能之你最喜欢哪个男生?
【机器学习PAI实战】—— 玩转人工智能之利用GAN自动生成二次元头像
前言
我们经常思考机器学习,深度学习,以至于人工智能给我们带来什么?在数据相对充足,足够真实的情况下,好的学习模型可以发现事件本身的内在规则,内在联系。我们去除冗余的信息,可以通过最少的特征构建最简单、误差最小的模型,以此将学习到的规则,逻辑应用到具体的场景中,帮助我们可以快速准确的处理某些繁琐重复的工作。
在本篇的案例中,我们将对回归模型做一次具体的分析和应用。回归可以做什么?与分类模型不同,分类模型的预测值是固定的,而回归模型可以预测连续型的数据结果。比如商品销量预测,商品价格预测等等。常用的回归模型包括线性回归,加权线性回归,岭回归以及树回归。在接下来的具体场景中,我们将分析上述的回归算法,选择最适合目前场景和已有数据的回归算法。
场景描述
某收藏爱好者,欲购买某知名品牌的积木套装。为了了解现在的市场行情,他收集了关于该品牌积木的生成日期,是否为全新的,积木数量,原始价格等特征和已交易的价格。他想要根据这些数据,来预估现在市场上正在出售的积木价格,才可以选择合适的价格购入,但他发现经凭借经验来预测这些价格,往往不够准确,而且繁琐重复的工作相当耗费精力。并且他了解到阿里PAI平台,可以通过智能的方法,针对具体场景快速搭建解决方案。但是自己的问题能不能被很好的解决,具体该怎么去实施还是一头雾水,下面就让我们伴随他一起走进阿里机器学习平台PAI的实战。
数据分析
在拿到收集到的数据之后,我们要先对数据进行简单的分析,来选择合适的算法。
price date number is_new origin_price
0 85.00 2006 797 0.0 49.99
1 102.50 2006 799 0.0 49.99
2 77.00 2006 795 0.0 49.99
3 162.50 2006 800 0.0 49.99
4 699.99 2002 3094 0.0 269.99
5 602.00 2002 3093 0.0 269.99
6 515.00 2002 3090 0.0 269.99
7 510.00 2002 3090 0.0 269.99
8 375.00 2002 3086 0.0 269.99
9 850.00 2002 3096 1.0 269.99
10 740.00 2002 3096 0.0 269.99
11 759.00 2002 3096 1.0 269.99
12 730.00 2002 3096 0.0 269.99
13 750.00 2002 3096 1.0 269.99
14 910.00 2007 5195 0.0 499.99
15 1199.99 2007 5195 1.0 499.99
16 811.88 2007 5194 0.0 499.99
17 1324.79 2007 5195 0.0 499.99
18 850.00 2007 5195 1.0 499.99
19 800.00 2007 5195 1.0 499.99
20 810.00 2007 5194 0.0 499.99
21 1075.00 2007 5195 1.0 499.99
22 1050.00 2007 5195 0.0 499.99
我们截取了部分数据,从第三列到第为列特征含义依次是生成年份,积木数量,是否为全新以及原价。第二列为收集到的已交易的价格。
- 数据类型
我们惊喜的发现,所有数据都是连续性的,而不是标称性数据。所谓连续型就是不可枚举,数值是联系可变的,而标称型数据就是几个固定的值,比如学生性别,手机型号,衣服尺码(L,XL,XXL)等。如果不是连续型数据,就需要做数据的量化处理。
- 数据特征分析
通过上面的部分数据,我们可以直观的看出下面信息。
1,年份和原价具有强相关性,换句话说年份和原价具有对等关系,这两个特征为重复特征,其包含的信息是一样的;2,是否为全新这个特征,是二值特征。不能表示商品的新旧程度。3,积木数量若存在缺失,将严重影响价格。4,收藏品价格会在一定程度上高于原价。
- 数据量
我们从这位收藏爱好者处了解到,其收集到的数据不足100条。希望的场景是,如果再给一组样本,可以快速的给出预测的价格。
场景抽象化
接下来,我们就需要把具体的问题抽象化。假设我们只用原价一个特征来预估商品价格。
price=f(origin_price)=worigin_price+b*
f(x)就是一种目标值的计算公式。w,b就是线性回归系数,一旦得到这些系数,再输入新的特征值(原价)就可以计算出商品的交易价格。如果输入特征为多维的即:
price=f(date,number,is_new,origin_price,)=w1date+w2number+w3is_new+w4origin_price+b
当然我们有策略选择哪些系数是最优的。在模型的学习和预测中,我们遇到带标签的数据,即已经知道交易价格的数据。通过这些标签值和我们预测值的比较来判断这组回归系数是不是最好的。
E=error(price-predicted_price)=||price-predicted_price||l
当这组系数在所有数据中误差为最小的,我们就可以说学习到了最优的参数来拟合训练数据。
模型选择
我们知道这个问题可以通过回归算法来解决,就兴致冲冲的打开了PAI 可视化建模页面进入了自己搭建的机器学习项目。进入方法如下:
在组件栏发现有好多回归算法可以选择。
但是这么多算法该如何选择?
模型的选择绝大程度上依赖样本的特征,如果特征值与样本呈现明显的线性关系,我们就选择线性回归模型。比 如一本书的厚度和页码的关系。非线性回归的例子也有很多,比如圆形容器的蓄水量和容器的半径的关系。当然大多是非线性回归也可以转化成线性回归,这里就不细谈。
GBDT回归,是树回归的一种,可以解决线性和非线性回归问题。
AdaBoost回归是一种强化回归算法,AdaBoost是集成学习算法,可以将弱学习器强化为强学习器,可以应用在分类和回归算法。这里AdaBoost回归就是一种强化的集成回归算法。
PS-SMART,PS-线性回归,分别是基于PS是参数服务器(Parameter server)的GBDT算法和线性回归算法。主要用于大规模数据的学习预测任务。
针对上面样例,直观的发现,价格与特征呈明显的线性关系。我们可以选择线性回归作为尝试。
数据处理
在模型训练之前,需要对对训练数据进行预处理。主要包括类型的转化,量化,缺失值填充等等。现在我们有一份txt的格式的离线数据,内容样本如上所示。通过对数据的分析,现有数据不需要进行类型的转化和量化,可以进行缺失值的填充。在进入预处理之前,我们需要将训练样本放到odps表中。
- 首先,打开dataworks-数据开发,如下图所示,进入Dataworks 自己项目下的数据开发平台:
- 新建节点,输入下面代码,选中代码,点击运行按钮,新建odps表。
CREATE TABLE if not EXISTS item_features
(
price Double COMMENT "预测价格",
production_date BIGINT COMMENT "production_date",
quantity BIGINT COMMENT "数量",
is_new DOUBLE COMMENT "1:new,0:old",
original_price DOUBLE COMMENT "原价"
)
LIFECYCLE 7
;
- 将本地数据导入到odps表中。
分隔符为本地文件的列之间的分隔符,默认为逗号。如果本地文件中第一行不是标题,则选择起始行为1,不勾选首行为标题。下一步,然后输入新建的odps表名,选择按位置匹配(只有前面选择首行为标题,才可以选择按名称匹配),然后导入。
至此,我们对数据有了充足的了解,知道选择何种模型,需要对数据做什么预处理,而且训练数据也已准备好了。接下来,我就需要在PAI 可视化建模页面,拖拽组件,搭建可视化训练流程。
模型训练
- 首先进入PAI 可视化建模页面,点击实验-新建空白实验。
- 拖拽数据读取组件,源/目标-读数据表。
双击拖入的读数据表组件,再表名列输入,前面新建的odps表名。可以在字段信息栏看到表中部分数据。
- 拖入缺省值填充组件,数据预处理-缺失值填充。
训练数据中,可能存在部分特征值缺失的情况,缺失值填充可以选择多种测试填充缺失值。
在右侧属性栏,选择进行填充的参数,原值类型和填充值策略。
- 样本随机采样
对于所有的训练数据,我们可以有重叠的选择出训练集和测试集。拖入两个随机采样组件,数据预处理-采样与过滤-随机采样。字段参数设置如下图:
- 线性回归算法
拖入线性回归算法组件,机器学习-回归-线性回归。特征列选择 date number is_new origin_price特征,标签列为price。
至此,如下图所示,模型训练的流程已搭建完成。点击运行,就可以依托PAI平台服务,进行模型训练了。
模型测试
通过模型训练,学习得到了线性回归模型。在PAI平台上,我们可以一键拖拽测试组件,机器学习-预测。对学习到的模型就行测试,并可以直观的观测模型预测的结果。
如下图所示:
模型部署
详情参考在线部署使用说明。
- 查看模型
在线性回归模型组件,右键选择模型选项-查看模型,就可以看到学习到的模型。
- 保存模型
右键选择保存模型,就可以将模型保存到我的模型下。通过模型定位,就可以定位到我的模型处。
- 一键部署
模型训练完成之后,点击部署-在线部署。输入自定义的服务名称(全网唯一,调用服务时使用)。
在已部署模型页可以看到,自己部署的所有服务。
服务测试
详情参考在线部署使用说明。
注意事项,body参数要按照特征值的数量给出,每一条是一个字典,字段要和表结构一致,多条数据以数组形式添加。
总结
回归算法和分类算法类似,也是对目标值的预测。其中回归算法主要用于对联系值的预测,而分类算法预测的则是离散值。在PAI平台上有常用的各类回归算法,如果有兴趣,可以一一尝试,选择最适合自己场景和数据的回归算法。在接到一个具体的场景和问题后,通常我们需要一系列的步骤去解决这个问题,收集数据,准备数据,分析数据,算法选择,训练算法,测试算法,使用算法。同时,PAI平台中这些回归算法组件还支持部分算法参数的调整,比如迭代次数,最小误差,以及正则化系数等等,我们可以在训练算法模型中调整这些参数以达到最小可接受的误差。
人人用得起的机器学习平台↓↓↓↓
本文作者:伊逍
本文为云栖社区原创内容,未经允许不得转载。
【机器学习PAI实战】—— 玩转人工智能之商品价格预测的更多相关文章
- 【机器学习PAI实战】—— 玩转人工智能之综述
摘要: 基于人工智能火热的大背景下,通过阿里云的机器学习平台PAI在真实场景中的应用,详细阐述相关算法及使用方法,力求能够让读者读后能够马上动手利用PAI搭建属于自己的机器学习实用方案,真正利用PAI ...
- 【机器学习PAI实战】—— 玩转人工智能之你最喜欢哪个男生?
摘要: 分类问题是生活中最常遇到的问题之一.普通人在做出选择之前,可能会犹豫不决,但对机器而言,则是唯一必选的问题.我们可以通过算法生成模型去帮助我们快速的做出选择,而且保证误差最小.充足的样本,合适 ...
- 【机器学习PAI实战】—— 玩转人工智能之利用GAN自动生成二次元头像
前言 深度学习作为人工智能的重要手段,迎来了爆发,在NLP.CV.物联网.无人机等多个领域都发挥了非常重要的作用.最近几年,各种深度学习算法层出不穷, Generative Adverarial Ne ...
- 【机器学习PAI实战】—— 玩转人工智能之美食推荐
前言 在生活中,我们经常给朋友推荐一些自己喜欢的东西,也时常接受别人的推荐.怎么能保证推荐的电影或者美食就是朋友喜欢的呢?一般来说,你们两个人经常对同一个电影或者美食感兴趣,那么你喜欢的东西就很大程度 ...
- 机器学习入门实战——基于knn的airbnb房租预测
数据读取 import pandas as pd features=['accommodates','bathrooms','bedrooms','beds','price','minimum_nig ...
- [阿里云-机器学习PAI快速入门与业务实战 ]课时1-机器学习背景知识以及业务架构介绍
什么是机器学习? 机器学习指的是机器通过统计学算法,对大量的历史数据进行学习从而生成经验模型,利用经验模型指导业务. 目前机器学习主要在一下一些方面发挥作用: 营销类场景:商品推荐.用户群体画像.广告 ...
- Python玩转人工智能最火框架 TensorFlow应用实践 ☝☝☝
Python玩转人工智能最火框架 TensorFlow应用实践 (一个人学习或许会很枯燥,但是寻找更多志同道合的朋友一起,学习将会变得更加有意义✌✌) 全民人工智能时代,不甘心只做一个旁观者,那就现在 ...
- 天猫精灵业务如何使用机器学习PAI进行模型推理优化
引言 天猫精灵(TmallGenie)是阿里巴巴人工智能实验室(Alibaba A.I.Labs)于2017年7月5日发布的AI智能语音终端设备.天猫精灵目前是全球销量第三.中国销量第一的智能音箱品牌 ...
- Python玩转人工智能最火框架 TensorFlow应用实践
Python玩转人工智能最火框架 TensorFlow应用实践 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课 ...
随机推荐
- [转]用DateTime.ToString(string format)输出不同格式的日期
DateTime.ToString()函数有四个重载.一般用得多的就是不带参数的那个了.殊不知,DateTime.ToString(string format)功能更强大,能输出不同格式的日期.以下把 ...
- mysql工具使用
mysql -u user_name -p123456 -h host_name -P 3306 -D database_name -e "show full processlist;&qu ...
- 历届试题_DNA比对
脱氧核糖核酸即常说的DNA,是一类带有遗传信息的生物大分子.它由4种主要的脱氧核苷酸(dAMP.dGMP.dCMT和dTMP)通过磷酸二酯键连接而成.这4种核苷酸可以分别记为:A.G.C.T. ...
- iframe加载完成事件
var iframe = document.createElement("iframe"); iframe.src = "http://www.jb51.net" ...
- Spring AOP(三)--XML方式实现
本文介绍通过XML方式实现Spring AOP,在上一篇中已经介绍了通过注解+java配置的方式,这篇文章主要是看XML中怎么配置,直接上代码了: 一.创建一个连接点 1⃣️定义接口 注意⚠️:可以定 ...
- PAT甲级——A1031 Hello World for U
Given any string of N (≥) characters, you are asked to form the characters into the shape of U. For ...
- rdf(资源描述框架)
资源描述框架(Resource Description Framework),一种用于描述Web资源的标记语言.RDF是一个处理元数据的XML(标准通用标记语言的子集)应用,所谓元数据,就是“描述数据 ...
- python \r \t \n 各种转义字符
转义字符 描述 \(在行尾时) 续行符 \\ 反斜杠符号 \’ 单引号 \” 双引号 \a 响铃 \b 退格(Backspace) \e 转义 \000 空 \n 换行 \v 纵向制表符 \t 横向制 ...
- c++新特性实验(5)声明与定义:属性列表(C++11 起)
1.初识属性 1.1 实验A: noreturn 属性 [[ noreturn ]] static void thread1(void *data){ cout << "nore ...
- jdbc原始连接
public class JdbcInstrt { public static void main(String[] args) { Connection conn = null; PreparedS ...