怎样通过历史数据预测未来?

很多人或许都看过火影忍者,你是否对蛤蟆丸口中的预言之子感到很神奇,这个老蛤蟆预言了很多事情,他在梦里可以预见未来。如果我们在现实生活中也能预测未来该有多好,每天坐等买彩票就可以致富了(笑醒)。当然彩票因为其随机性,肯定是不能预测的,不过有些事情倒是可以预测,只是现有的技术还做不到百分百正确。那么哪些事情是可以预测的呢,比如预测天气、预测股票,预测世界杯或NBA,预测疾病,事故,公司明年的销量,未来的房价走向等等。其实预测可以用于几乎每个行业,通过预测可以对一些决策提供客观参考。那么怎么做到预测呢?下面我们通过一个简单的示例来理解预测。

假设有这样一个场景,每天上下班的时候,我们乘坐的电梯有时候会出故障,有的电梯一下掉十几楼,我每天坐电梯的时候心都是提着的。那么我们是否可以对某部电梯的故障进行预测,来减少未来发生故障的次数?当然可以的。

选用较为主流的一些工具来搭建我们的预测环境。

jupyter安装:https://www.cnblogs.com/bxyan/p/7203966.html可以参照该文章进行安装

hadoop安装:https://blog.csdn.net/hliq5399/article/details/78193113安装本地模式就可以了

spark安装:https://www.cnblogs.com/tijun/p/7561718.html 由于spark是运行在hdfs上,所以需要先安装好hadoop

以上环境搭建好了后,我们就以hadoop为数据源,来计算预测模型,再以该模型实时预测电梯故障。

我们采集到电梯正常运行和故障发生前的一些数据:

 

 

 

运行时长

200370130245360365345361112190234564670200240490785280150530489389
载重5001009003007009005552331000110023460030011009004001000120011899991001009
是否高峰期1010110011010110011101
是否故障0000000000011111111111

我们将其中的70%作为训练数据,30%作为测试数据。首先利用训练数据训练出预测模型。我们用pyspark从hadoop中提取出数据:

import findspark
import os
#初始化pyspark的依赖
findspark.init()
%matplotlib inline
# 实例化sparksession
from pyspark.sql import SparkSession
spark = SparkSession.builder \
    .master("local") \
    .appName("Python Spark SQL basic example") \
    .config("spark.some.config.option", "some-value") \
    .enableHiveSupport() \
    .getOrCreate()

spark实例已经初始化成功,接下来从hadoop中提取数据到spark中,

#提取hadoop数据到DataFram
df_train = spark.read.format("csv").option("header","true")\
.option("inferSchema","true").load("hdfs://bigdata:8020/hive/warehousedir/db.db/lift/lift_train.txt")
df_train.show()

接下来需要将这些数据构造成特征矩阵,其中feature列就是转换后的特征矩阵

from pyspark.ml.feature import *
vectorizer = VectorAssembler()
vectorizer.setInputCols(["runtime", "weight", "ishight"])
vectorizer.setOutputCol("features")
#特征矩阵
df_vect = vectorizer.transform(df_train)
df_vect.show()

我们这里选用的是逻辑回归算法来生成模型,因为我们预测的目标属性是一个二元数值。生成模型的算法还有很多,按模型的训练方式分为:有监督训练、无监督训练和半监督训练。逻辑回归是监督训练中的一种,决策树算法,神经网络,多元线性回归等也都属于监督训练。

#构建逻辑回归模型
from pyspark.ml.classification import LogisticRegression
mlor = LogisticRegression(regParam=0.1, elasticNetParam=0, family="binomial")
#设置目标属性和特征矩阵
mlor.setLabelCol("isbroken")
mlor.setFeaturesCol("features")
#生成模型
model = mlor.fit(df_vect)

pyspark.ml库给我们提供了多种分类算法,我们可以根据业务场景选择合适的算法来生成模型。根据该模型,对测试数据进行预测

df_test = spark.read.format("csv").option("header","true")\
.option("inferSchema","true").load("hdfs://bigdata:8020/hive/warehousedir/db.db/lift/lift_test.txt")
#构建测试数据的特征矩阵
df_vtest = vectorizer.transform(df_test)
#预测
transformed = model.transform(df_vtest)
transformed.show()

其中prediction这列就是我们对测试数据预测的结果,当然,用于训练的数据越多,最后预测的结果就越准确。一个模型只要预测正确的概率大于随机概率,都是有意义的。

  • 6
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值