预测模型 订阅
预测模型是在采用定量预测法进行预测时,最重要的工作是建立预测数学模型。预测模型是指用于预测的,用数学语言或公式所描述的事物间的数量关系。它在一定程度上揭示了事物间的内在规律性,预测时把它作为计算预测值的直接依据。因此,它对预测准确度有极大的影响。任何一种具体的预测方法都是以其特定的数学模型为特征。预测方法的种类很多,各有相应的预测模型。 [1] 展开全文
预测模型是在采用定量预测法进行预测时,最重要的工作是建立预测数学模型。预测模型是指用于预测的,用数学语言或公式所描述的事物间的数量关系。它在一定程度上揭示了事物间的内在规律性,预测时把它作为计算预测值的直接依据。因此,它对预测准确度有极大的影响。任何一种具体的预测方法都是以其特定的数学模型为特征。预测方法的种类很多,各有相应的预测模型。 [1]
信息
外文名
prediction model
方    法
定量预测法
地    位
预测时作为计算预测值的直接依据
中文名
预测模型
模    型
Y=a+bl*x1+b2*x2+…+bm*xm
学    科
矿产资源经济与管理
预测模型简介
学科:矿产资源经济与管理词目:预测模型英文:prediction model
收起全文
精华内容
参与话题
问答
  • 常见的预测模型及算法

    千次阅读 2020-05-01 13:22:18
    如果得到一份数据集,任务是要预测出一系列的值,而在预测任务中,我们大多数都采用的是拟合的方法,这篇文字主要介绍三种预测方法时间序列分析,灰色预测模型,神经网络。 时间序列分析 时间序列也叫动态序列,数据...

    如果得到一份数据集,任务是要预测出一系列的值,而在预测任务中,我们大多数都采用的是拟合的方法,这篇文字主要介绍三种预测方法时间序列分析,灰色预测模型,神经网络。

    时间序列分析

    时间序列也叫动态序列,数据是按时间和数值性成的序列。而时间序列分析有三种作用,大致可以描述为描述过去,分析规律,预测将来。接下来将会讲到三种模型(季节分解,指数平滑,ARIMA模型)。
    一般情况下时间序列的数值变化规律有四种(长期趋势T,循环变动C,长期趋势T,不规则变动I)。我们先要对数据做出时间序列图,观察数据随周期的变化,进而判断序列是否随周期波动大,如果说整体序列随周期波动大,或波动不大,我们对其进行季节性分解,分别采用乘法和叠加模型。
    在这里插入图片描述
    在这里插入图片描述

    至于缺失值可以自己选择方法填补,这里主要介绍该模型的思想以及步骤。下面介绍具体预测模型。
    首先介绍的是指数平滑模型
    指数平滑大致分为简单平滑,Holt线性趋势模型,阻尼趋势模型,简单季节性温特模型

    简单平滑模型
    这里截取了一个文章的段落。在这里插入图片描述
    这里说明一下平滑参数α的选择:(1)如果时间序列不规则起伏但长期趋于一个较稳定的数,那么α在(0.05,0.2)之间,(2)如果序列有明显的变化,那么α在(0.3,0.5)之间,(3)如果序列变化比较缓慢则,α在(0.1,0.4)之间。要注意的是,这个模型只能预测一期数据,原因是他的预测公式。在这里插入图片描述
    这里我们的第一项是要预测的。如果预测出来,再想要预测t+2时的数据,可见我们需要Xt+1的真实数据,而我们不存在它的真实数据,最终预测t+2时只能用t+1预测值代替,带入方程中就会得到Xt+2=Xt+1。就会有下面的现象。在这里插入图片描述
    当再到2014后面时都为一个数。各个模型的具体介绍及比较
    Hole现象趋势模型
    Hole对简单的指数平滑模型进行了延申,能够预测包含趋势的数据,该方法包含一个预测方程和两个平滑方法。适用条件:线性趋势,不含季节成分。此外还有Brown线性趋势模型是此模型的特例。
    在这里插入图片描述

    阻尼趋势模型
    适用条件:线性趋势逐渐减弱且不含季节成分。Hole的线性趋势模型对未来预测值过高,这此基础上对该模型调整,加入阻力效应有效缓解较高的线性趋势。
    模型如下:在这里插入图片描述
    如下是两模型的比较,红色指的是加入阻尼后的模型,蓝色指的是Hole线性趋势模型。在这里插入图片描述
    简单季节性
    适用条件:含有稳定的季节性,不含趋势。模型如下:在这里插入图片描述
    温特加法与温特乘法
    他们的适用条件均是含有季节性和稳定的季节成分,但是前面提到过,加法和乘法的选择是要看时间序列的波动性,呈周期波动大的则是乘法,反之是加法。下面分别是温特加法和温特乘法。温特加法
    在这里插入图片描述
    从图中更清楚的看到他们的区别,一者预测波动较大的另一个预测波动较为平缓的。在这里插入图片描述
    此外运用这些模型要需要时间序列的平稳性,若平稳度低,并时间序列间隔与预测无关即协方差为0则说明Xt是个白噪声序列。一般用ACF和PACF检测但是这两种检测偶然情况太多,很难判断出来,下文会提到,如果是ARMA模型,根本判断不出来。
    由上面的指数平滑模型,这里预测女装的销售额,在这里插入图片描述
    首先对数据做出时间序列图:在这里插入图片描述
    从中发现整体序列呈周期波动越来越大,因此,本文采用叠加模型对周期进行季节性分解。因时间序列数据受季节性影响较大和数据的波动规律,本文选取温特的乘法模型。

    通过观察数据,在每年中三月和十二月中,在一个周期内明显比其他月份的销售额大,并且随着周期的进行,我们发现整体时间序列数据随周期波动逐渐升高,因而,我们对该时间序列采用乘法模型的季节性分解,分解后如下图:在这里插入图片描述
    在这里插入图片描述
    由于时间序列数据受季节性波动影响较大,本文采用温特乘法(Winter’s multiplicative)模型对数据建模在这里插入图片描述
    说明温特乘法序列模型的三个参数α,β,γ的值分别为0.034,2.4.6E-7,0.001,且此时Q检验服从原假设,并且做出残差ACF以及残差PACF图如下,可见在ACF检验中,所由滞后性阶数均与0无差异,而PACF中可能存在少许误差,说明扰动项噪声数据基本属于白噪声,温特乘法能够较好低识别本数据。

    在这里插入图片描述
    根据温特乘法,预测出的数据如下图所示,实际值与拟合值趋势基本符合,根据上表,拟合优度有0.815,说明拟合效果良好,预测出来的数据也显示出了周期性和波动的趋势。
    最后预测出十年女装销售额的数据如下:在这里插入图片描述
    在这里插入图片描述
    待更…

    展开全文
  • 数学建模之预测模型总结

    万次阅读 多人点赞 2018-01-29 19:51:56
    当在使用相应的预测方法建立预测模型时,我们需要知道主要的一些预测方法的研究特点,优缺点和适用范围。下面就当下一些主要的预测方法进行总结: 预测模型名称 适用范围 优点 缺点 灰色预测模型 ...
          基于数学建模的预测方法种类繁多,从经典的单耗法、弹性系数法、统计分析法,到目前的灰色预测法。当在使用相应的预测方法建立预测模型时,我们需要知道主要的一些预测方法的研究特点,优缺点和适用范围。下面就当下一些主要的预测方法进行总结:

    预测模型名称

    适用范围

    优点

    缺点

    灰色预测模型

    该模型使用的不是原始数据的序列,而是生成的数据序列。核心体系是Grey Model.即对原始数据作累加生成(或其他处理生成)得到近似的指数规律再进行建模的方法。

    在处理较少的特征值数据,不需要数据的样本空间足够大,就能解决历史数据少、序列的完整性以及可靠性低的问题,能将无规律的原始数据进行生成得到规律较强的生成序列。

    只适用于中短期的预测,只适合近似于指数增长的预测。

    插值与拟合

    适用于有物体运动轨迹图像的模型。如导弹的运动轨迹测量的建模分析。

    分为曲面拟合和曲线拟合,拟合就是要找出一种方法(函数)使得得到的仿真曲线(曲面)最大程度的接近原来的曲线(曲线),甚至重合。这个拟合的好坏程度可以用一个指标来判断。

    时间序列预测法

    根据客观事物发展的这种连续规律性,运用过去的历史数据,通过统计分析,进一步推测市场未来的发展趋势。时间序列在时间序列分析预测法处于核心位置。

    一般用ARMA模型拟合时间序列,预测该时间序列未来值。

    Daniel检验平稳性。

    自动回归AR(Auto regressive)和移动平均MA(Moving Average)预测模型。

    当遇到外界发生较大变化,往往会有较大偏差,时间序列预测法对于中短期预测的效果要比长期预测的效果好。

    马尔科夫预测

    适用于随机现象的数学模型(即在已知现情况的条件下,系统未来时刻的情况只与现在有关,而与过去的历史无直接关系)

    研究一个商店的未来某一时刻的销售额,当现在时刻的累计销售额已知。

    不适宜用于系统中长期预测

    差分方程

    利用差分方程建模研究实际问题,常常需要根据统计数据用最小二乘法来拟合出差分方程的系数。

    适用于商品销售量的预测、投资保险收益率的预测。

    数据系统的稳定性还要进一步讨论代数方程的求根。

    微分方程模型

    适用于基于相关原理的因果预测模型,大多是物理或几何方面的典型问题,假设条件,用数学符号表示规律,列出方程,求解的结果就是问题的答案。

    优点是短、中、长期的预测都适合。如传染病的预测模型、经济增长(或人口)的预测模型、Lanchester战争预测模型。

    反应事物内部规律及其内在关系,但由于方程的建立是以局部规律的独立性假定为基础,当作为长期预测时,误差较大,且微分方程的解比较难以得到。

    神经元网络

    数学建模中常用的是BP神经网络和径向基函数神经网络的原理,及其在预测中的应用。

    BP神经网络拓扑结构及其训练模式。

    RBF神经网络结构及其学习算法。

    模型案例:预测某水库的年径流量和因子特征值

    原文链接

    展开全文
  • 时间序列的7种预测模型

    万次阅读 多人点赞 2018-12-23 20:02:00
    背景 时间序列问题比较常见,比如股市,工业生产指标等。 1 朴素估计 使用最后一个时间点的值估测后面一段时间段的值。 2 简单平均 ...y_hat_avg['moving_avg_forecast'] = train['Count'].rollin...

    背景

    时间序列问题比较常见,比如股市,工业生产指标等。

    导入必要的Python包:

    from statsmodels.tsa.api import ExponentialSmoothing, \
    SimpleExpSmoothing, Holt
    
    import statsmodels.api as sm
    

    1. 朴素估计

    y^t+1=yt \hat{y}_{\mathrm{t}+1}=\mathrm{y}_{\mathrm{t}}

    使用最后一个时间点的值估测后面一段时间段的值。

    dd= np.asarray(train.Count)
    y_hat = test.copy()
    y_hat['naive'] = dd[len(dd)-1]
    

    在这里插入图片描述

    2. 简单平均

    把历史时刻变量所有值的平均值作为预测值:
    在这里插入图片描述

    y_hat_avg = test.copy()
    y_hat_avg['avg_forecast'] = train['Count'].mean()
    

    在这里插入图片描述

    4. 滑动窗平均

    使用之前一定大小时间段的平均值作为这个时间点的值。
    在这里插入图片描述

    或者使用加权的滑动窗平均:

    加权的权重可以根据时间来设定,比如越是近的时刻的权重越大。

    在这里插入图片描述

    y_hat_avg = test.copy()
    y_hat_avg['moving_avg_forecast'] = train['Count'].rolling(60).mean().iloc[-1]
    

    在这里插入图片描述

    5. 简单指数平滑

    当前时刻的值由历史时刻的值确定,但是根据时刻进行了指数衰减。

    在这里插入图片描述
    where 0≤ α ≤1 是平滑参数.

    如果时间序列很长,可以看作:
    在这里插入图片描述

    from statsmodels.tsa.api import ExponentialSmoothing, \
    SimpleExpSmoothing, Holt
    y_hat_avg = test.copy()
    fit2 = SimpleExpSmoothing(np.asarray(train['Count'])).fit(
    smoothing_level=0.6,optimized=False)
    y_hat_avg['SES'] = fit2.forecast(len(test))
    

    5 Holt’s线性趋势方法

    在这里插入图片描述

    主要考虑趋势。

    import statsmodels.api as sm
    sm.tsa.seasonal_decompose(train.Count).plot()
    result = sm.tsa.stattools.adfuller(train.Count)
    

    7 Holt-winters 方法

    在这里插入图片描述

    这种思想比较简单有效,假设数据服从两点,

    1.数据是呈递增、递减趋势的;
    2.数据服从一个周期变化。

    然后,对残差,再进行其他方式的拟合,比如三次样条曲线。

    y_hat_avg = test.copy()
    fit1 = ExponentialSmoothing(np.asarray(train['Count']) ,
    seasonal_periods=7 ,trend='add', seasonal='add',).fit()
    y_hat_avg['Holt_Winter'] = fit1.forecast(len(test))
    

    8 Arima方法

    ARIMA模型(Autoregressive Integrated Moving Average model)整合移动平均自回归模型。

    ARIMA(p,d,q)模型:

    在这里插入图片描述

    ARIMA(p, d, q) 由三个部分组成:

    • AR§:AR是autoregressive的缩写,表示自回归模型,含义是当前时间点的值等于过去若干个时间点的值的回归——因为不依赖于别的解释变量,只依赖于自己过去的历史值,故称为自回归;如果依赖过去最近的p个历史值,称阶数为p,记为AR(p)模型。
    • I(d):I是integrated的缩写,含义是模型对时间序列进行了差分;因为时间序列分析要求平稳性,不平稳的序列需要通过一定手段转化为平稳序列,一般采用的手段是差分;d表示差分的阶数,t时刻的值减去t-1时刻的值,得到新的时间序列称为1阶差分序列;1阶差分序列的1阶差分序列称为2阶差分序列,以此类推;另外,还有一种特殊的差分是季节性差分S,即一些时间序列反应出一定的周期T,让t时刻的值减去t-T时刻的值得到季节性差分序列。
    • MA(q):MA是moving average的缩写,表示移动平均模型,含义是当前时间点的值等于过去若干个时间点的预测误差的回归;预测误差=模型预测值-真实值;如果序列依赖过去最近的q个历史预测误差值,称阶数为q,记为MA(q)模型。
    y_hat_avg = test.copy()
    fit1 = sm.tsa.statespace.SARIMAX(train.Count, order=(2, 1, 
    4),seasonal_order=(0,1,1,7)).fit()
    y_hat_avg['SARIMA'] = fit1.predict(start="2013-11-1", 
    end="2013-12-31", dynamic=True)
    

    9. PROPHET 方法

    Facebook提出的一种方法,与Holt-winters类似,主要想法是"
    时间序列的分解(Decomposition of Time Series),它把时间序列 分成几个部分,分别是季节项 ,趋势项 ,剩余项,与Holt-winters方法类似 。

    fbprophet的安装依赖Pystan.


    最近开通了个公众号,主要分享python原理与应用,推荐系统,风控等算法相关的内容,感兴趣的伙伴可以关注下。
    在这里插入图片描述
    公众号相关的学习资料会上传到QQ群596506387,欢迎关注。


    reference:

    1. analytics : Time-series forecast
    2. 知乎 arima详解
    3. Forecasting at Scale Facebook
    4. Wiki Arima;
    5. ARIMA模型详解;
    6. Fbprophet 使用官网;
    展开全文
  • 【机器学习之路】十三种回归模型预测房价

    万次阅读 多人点赞 2019-03-24 21:15:40
    这篇文章汇总了13个机器学习的回归算法,对比它们在同一个数据下的预测的效果。其实就是为了选模型的时候方便一点,一个一个试太麻烦了 导入需要的库 import pandas as pd import numpy as np import matplo...

    数据:https://www.kaggle.com/santibermejo/xgboost-for-house-price-prediction
    这篇文章汇总了13个机器学习的回归算法,对比它们在同一个数据下的预测的效果。其实就是为了选模型的时候方便一点,一个一个试太麻烦了

    • 导入需要的库
    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    import os
    from sklearn.model_selection import train_test_split
    from sklearn.preprocessing import StandardScaler
    import warnings
    # filter warnings
    warnings.filterwarnings('ignore')
    # 正常显示中文
    from pylab import mpl
    mpl.rcParams['font.sans-serif'] = ['SimHei']
    # 正常显示符号
    from matplotlib import rcParams
    rcParams['axes.unicode_minus']=False
    
    
    • 导入数据
    os.chdir('E:\\kaggle\\house_price')
    data=pd.read_csv('train.csv')
    
    • 数据预处理
    data['MSSubClass']=data['MSSubClass'].astype(str)  #MSSubClass是一个分类变量,所以要把他的数据类型改为‘’str‘’
    Id=data.loc[:,'Id']   #ID先提取出来,后面合并表格要用
    data=data.drop('Id',axis=1)
    
    x=data.loc[:,data.columns!='SalePrice']
    y=data.loc[:,'SalePrice']   
    mean_cols=x.mean()
    x=x.fillna(mean_cols)  #填充缺失值
    x_dum=pd.get_dummies(x)    #独热编码
    x_train,x_test,y_train,y_test = train_test_split(x_dum,y,test_size = 0.3,random_state = 1)
    
    #再整理出一组标准化的数据,通过对比可以看出模型的效果有没有提高
    x_dum=pd.get_dummies(x)
    scale_x=StandardScaler()
    x1=scale_x.fit_transform(x_dum)
    scale_y=StandardScaler()
    y=np.array(y).reshape(-1,1)
    y1=scale_y.fit_transform(y)
    y1=y1.ravel()
    x_train1,x_test1,y_train1,y_test1 = train_test_split(x1,y1,test_size = 0.3,random_state = 1)
    
    
    • 导入模型
    from sklearn.linear_model import LinearRegression
    from sklearn.neighbors import KNeighborsRegressor
    from sklearn.svm import SVR
    from sklearn.linear_model import Lasso
    from sklearn.linear_model import Ridge
    from sklearn.neural_network import MLPRegressor
    from sklearn.tree import DecisionTreeRegressor
    from sklearn.tree import ExtraTreeRegressor
    from xgboost import XGBRegressor
    from sklearn.ensemble import RandomForestRegressor
    from sklearn.ensemble import AdaBoostRegressor
    from sklearn.ensemble import GradientBoostingRegressor
    from sklearn.ensemble import BaggingRegressor
    
    
    

    将模型和他们的名字分别放到两个列表里,然后建一个空列表保存他们的得分

    models=[LinearRegression(),KNeighborsRegressor(),SVR(),Ridge(),Lasso(),MLPRegressor(alpha=20),DecisionTreeRegressor(),ExtraTreeRegressor(),XGBRegressor(),RandomForestRegressor(),AdaBoostRegressor(),GradientBoostingRegressor(),BaggingRegressor()]
    models_str=['LinearRegression','KNNRegressor','SVR','Ridge','Lasso','MLPRegressor','DecisionTree','ExtraTree','XGBoost','RandomForest','AdaBoost','GradientBoost','Bagging']
    score_=[]
    
    

    写一个训练模型的循环

    for name,model in zip(models_str,models):
        print('开始训练模型:'+name)
        model=model   #建立模型
        model.fit(x_train,y_train)
        y_pred=model.predict(x_test)  
        score=model.score(x_test,y_test)
        score_.append(str(score)[:5])
        print(name +' 得分:'+str(score))
    

    看一下训练的结果

    SVR的得分是负值,原因是SVR训练数据需要标准化处理。
    得分最高的是’XGBoost’和’GradientBoost’,他们都是集成学习,得分都超过了百分之九十,如果再分别进行调参的话,效果可能会更好,这里调参过程就不给大家演示了。

    • 平滑处理预测值y
      平滑处理y值,x不处理。(x代表特征,y代表预测值)
    y_log=np.log(y)
    x_train,x_test,y_train_log,y_test_log = train_test_split(x_dum,y_log,test_size = 0.3,random_state = 1)
    

    得到结果对比
    在这里插入图片描述
    SVR(),MLP,等一些模型的效果明显提升,集成学习的算法都出现了轻微的下降,看样子集成学习不太适合将预测值平滑处理。
    如果所有的模型都用标准化过的数据来训练效果会怎么样呢?

    models=[LinearRegression(),KNeighborsRegressor(),SVR(),Ridge(),Lasso(),MLPRegressor(alpha=20),DecisionTreeRegressor(),ExtraTreeRegressor(),XGBRegressor(),RandomForestRegressor(),AdaBoostRegressor(),GradientBoostingRegressor(),BaggingRegressor()]
    models_str=['LinearRegression','KNNRegressor','SVR','Ridge','Lasso','MLPRegressor','DecisionTree','ExtraTree','XGBoost','RandomForest','AdaBoost','GradientBoost','Bagging']
    score_1=[]
    for name,model in zip(models_str,models):
        print('开始训练模型:'+name)
        model=model
        model.fit(x_train1,y_train1)
        y_pred=model.predict(x_test1)
        score=model.score(x_test1,y_test1)
        score_1.append(str(score)[:5])
        print(name +' 得分:'+str(score))
    

    训练结果如下图所示:
    在这里插入图片描述
    由结果可以看出来线性回归和Lasso回归并不适合用标准化的数据来训练模型。把两种结果对比你一下,看一看哪些模型需要把数据标准化处理,哪些不需要。
    在这里插入图片描述
    三个结果一起看
    在这里插入图片描述
    需要标准化的模型:[‘SVR’,‘MLPRegressor’,‘Bagging’,‘AdaBoost’,‘KNNRegressor’]
    需要平滑处理y的模型:[‘LinearRegression’,‘Ridge’,‘ExtraTree’]
    剩下的模型就不需要对数据进行处理了

    下面就分别来训练这些模型,得到最后的结果。

    models=[LinearRegression(),KNeighborsRegressor(),SVR(),Ridge(),Lasso(),MLPRegressor(alpha=20),DecisionTreeRegressor(),ExtraTreeRegressor(),XGBRegressor(),RandomForestRegressor(),AdaBoostRegressor(),GradientBoostingRegressor(),BaggingRegressor()]
    models_str=['LinearRegression','KNNRegressor','SVR','Ridge','Lasso','MLPRegressor','DecisionTree','ExtraTree','XGBoost','RandomForest','AdaBoost','GradientBoost','Bagging']
    score_adapt=[]
    for name,model in zip(models_str,models):
        if name in ['LinearRegression','Ridge','ExtraTree']:   
            print('开始训练模型:'+name+' 平滑处理')
            model=model
            model.fit(x_train,y_train_log)
            y_pred=model.predict(x_test)     
            score=model.score(x_test,y_test_log)
            score_adapt.append(str(score)[:5])
            print(name +' 得分:'+str(score))
            
        elif name in ['SVR','MLPRegressor','Bagging','AdaBoost','KNNRegressor']:
            print('开始训练模型:'+name+' 标准化处理')
            model=model
            model.fit(x_train1,y_train1)
            y_pred=model.predict(x_test1)
            ypred_original=scale_y.inverse_transform(y_pred)
            score=model.score(x_test1,y_test1)
            score_adapt.append(str(score)[:5])       
            print(name +' 得分:'+str(score))
            
        else:
            print('开始训练模型:'+name+' 普通')
            model=model
            model.fit(x_train,y_train)
            y_pred=model.predict(x_test)
            ypred_original=scale_y.inverse_transform(y_pred)
            score=model.score(x_test,y_test)
            score_adapt.append(str(score)[:5])       
            print(name +' 得分:'+str(score))
    

    得到最后结果:
    在这里插入图片描述
    基本上每个模型都找到了效果最好的数据形式,得到了相对其他数据形式更好的效果。
    下面是每组模型拟合的图像

    1. 还有可以改进的地方
      对于标准化处理的模型,其他模型的训练数据形式不变。只将连续型变量标准化处理,分类变量热码处理得到训练结果如下所示
      在这里插入图片描述
      KNN和SVR 都有明显的提升
    score_x=[]
    for name,model in zip(models_str,models):
        if name in ['MLPRegressor','AdaBoost','Bagging','ExtraTree']:
            print('开始训练模型:'+name+' 标准化处理')
            model=model
            model.fit(x_train1,y_train1)
            y_pred=model.predict(x_test1)
            ypred_original=scale_y.inverse_transform(y_pred)
            score=model.score(x_test1,y_test1)
            score_x.append(str(score)[:5])       
            print(name +' 得分:'+str(score))
        elif name in['SVR','KNNRegressor']:
            print('开始训练模型:'+name+' 分开标准化处理')
            model=model
            model.fit(x_trainx,y_train1)
            y_pred=model.predict(x_testx)
            ypred_original=scale_y.inverse_transform(y_pred)
            score=model.score(x_testx,y_test1)
            score_x.append(str(score)[:5])       
            print(name +' 得分:'+str(score))
    
        elif name in ['LinearRegression','Ridge']:
            
            print('开始训练模型:'+name+' 平滑处理')
            model=model
            model.fit(x_train,y_train_log)
            y_pred=model.predict(x_test)     
            score=model.score(x_test,y_test_log)
            score_x.append(str(score)[:5])
            print(name +' 得分:'+str(score))
    
        else:
            print('开始训练模型:'+name+' 普通')
            model=model
            model.fit(x_train,y_train)
            y_pred=model.predict(x_test)
            ypred_original=scale_y.inverse_transform(y_pred)
            score=model.score(x_test,y_test)
            score_x.append(str(score)[:5])       
            print(name +' 得分:'+str(score))
    

    汇总所有数据

    在这里插入图片描述
    你可以看到每个模型的精度变化

    总结:不同的模型需要训练数据的形式是不同的
    需要对x,y都标准化处理的模型有:[‘MLPRegressor’,‘AdaBoost’,‘Bagging’,‘ExtraTree’]
    需要只对y平滑处理的有:[‘LinearRegression’,‘Ridge’]
    需要对y和x中的连续型数据标准化处理的模型:[‘SVR’,‘KNNRegressor’]
    剩下的5个模型不需要对x和y进行处理:[‘Lasso’,‘DecisionTree’,‘XGBoost’,‘RandomForest’,‘GradientBoost’]
    准确率最高的模型为【‘XGBoost’,‘RandomForest’,‘GradientBoost’】,都是集成学习算法。
    线性回归模型

    在这里插入图片描述
    KNN
    在这里插入图片描述

    Ridge
    在这里插入图片描述
    Lasso
    在这里插入图片描述
    XGBoost在这里插入图片描述
    Bagging
    在这里插入图片描述

    GradientBoost

    剩下的图片就不一一展示了。

    • 基展开
      基展开就是增加维度

    原始数据共有79个特征,但是这些特征可能还不足以预测房价,房价的高低可能还有这些特征的两两组合有关系,所以我们可以尝试一下。
    步骤

    1.将原始数据的 连续型变量和分类型变量拆开。
    2.将连续型变量基展开(用到PolynomialFeatures函数),将分类型变量独热编码。
    3. 最后合在一起

    #将连续型变量和分类型变量分开
    numeric_cols=x.columns[x.dtypes !='object']
    object_cols=x.columns[x.dtypes =='object']
    x_num=x.loc[:,numeric_cols]
    x_object=x.loc[:,object_cols]
    #将连续型变量积展开,将分类变量热码处理
    from sklearn.preprocessing import PolynomialFeatures
    pf = PolynomialFeatures(degree=2)
    x_num_big=pf.fit_transform(x_num)
    x_num_big=pd.DataFrame(x_num_big)
    x_object_big=pd.get_dummies(x_object)
    x_num_big['id']=Id
    x_object_big['id']=Id
    x_ji=pd.merge(x_num_big,x_object_big,on='id',how='left')
    x_ji=x_ji.drop('id',axis=1)
    x_train_ji,x_test_ji,y_train,y_test = train_test_split(x_ji,y,test_size = 0.3,random_state = 1)
    
    

    x_ji 是我们对连续型变量基展开和对分类型变量独热编码后最后的到的数据,通过下图可以看出,原始数据由原来的79个特征,转化为933个特征
    在这里插入图片描述

    对于神经网络和SVR也同样需要一组标准化的测试集和训练集,y1就不需要处理了,直接用上面被处理过的。x_jin表示被标准化后的基展开数据

    scale_xji=StandardScaler()
    x_jin=scale_xji.fit_transform(x_ji)
    scale_y=StandardScaler()
    x_train_jin,x_test_jin,y_train1,y_test1 = train_test_split(x_jin,y1,test_size = 0.3,random_state = 1)
    
    

    然后再一次开始训练模型
    代码还是个上面的基本一样,只不过将x_train改成x_train_ji,x_test改成x_test_ji。else语句下面的改成x_train_jin,x_test_jin。

    models=[LinearRegression(),KNeighborsRegressor(),SVR(),Ridge(),Lasso(),MLPRegressor(alpha=20),DecisionTreeRegressor(),ExtraTreeRegressor(),XGBRegressor(),RandomForestRegressor(),AdaBoostRegressor(),GradientBoostingRegressor(),BaggingRegressor()]
    models_str=['LinearRegression','KNNRegressor','SVR','Ridge','Lasso','MLPRegressor','DecisionTree','ExtraTree','XGBoost','RandomForest','AdaBoost','GradientBoost','Bagging']
    score_ji=[]
    for name,model in zip(models_str,models):
        if name not in ['KNNRegressor','SVR','MLPRegressor','ExtraTree','AdaBoost']:   
            print('开始训练模型:'+name)
            model=model
            model.fit(x_train_ji,y_train)
            y_pred=model.predict(x_test_ji)
            score=model.score(x_test_ji,y_test)
            score_ji.append(str(score)[:5])
            print(name +' 得分:'+str(score))
    
        else:
            print('开始训练模型:'+name)
            model=model
            plt.figure(figsize=(14,4)
            score=model.score(x_test_jin,y_test1)
            score_ji.append(str(score)[:5])       
            print(name +' 得分:'+str(score))
    

    看一下效果

    在这里插入图片描述

    线性模型和岭回归模型出现了负值,应该是线性回归模型不适合高维特征,除了GradientBoost其它模型的结果都没有向好的方向发展,下面将这两次的预测结果对比一下就知道了

    accuray_stats=pd.DataFrame({'model':models_str,'score':score_,'score2':score_2})
    

    在这里插入图片描述
    线性回归和岭回归模型出错,Lasso回归精度明显下降,DecisionTree精度轻微下降,ExtraTree模型精度提高,其他模型预测效果没有明显的变化。集成学习模型的效果普遍好于其他模型。

    • 总结
      这篇文章展示了不同回归模型在同一数据集下的预测效果。集成学习模型普遍优于其他简单模型。文章并没有涉及调整参数来提高训练精度的内容,大家有兴趣可以自己尝试,通过.get_params()来查看模型的参数,让后通过GridSearchCV进行网格搜索。
      本文主要展示了不同模型和增加维度的方法来找到一个高精度的训练模型,由上文的结果可以看出,同一数据集在不同的模型下的到的预测结果是有很大差别的。通过增高维度并没有明显影响预测的精度,但这并不代表增加维度是一个没有多大用处的方法。
    展开全文
  • 几种常见的预测模型

    万次阅读 多人点赞 2018-03-26 16:14:42
    几种常见的预测模型1.趋势外推预测方法趋势外推预测方法是根据事物的历史和现实数据,寻求事物随时间推移而发展变化的规律,从而推测其未来状况的一种常用的预测方法。 趋势外推法的假设条件是: (1)假设事物发展...
  • AR预测模型算法实例,针对现在数据对未来数据进行预测,程序中给出油价实例非常实用!
  • 传统的时序模型预测

    千次阅读 2019-08-11 23:28:50
    1)平滑法 2)趋势拟合法 3)组合模型 4)AR模型 5)MA模型 6)ARMA模型 ...7)ARIMA模型 ...8)ARCH模型和GARCH模型 ...传统的时序模型预测问题一共有8类模型: 1)平滑法 平滑法常用于趋势分析和预...
  • 介绍 评价指标与机器学习任务具有相关性。分类、回归、排序、聚类、主题建模等任务都有不同的度量标准。一些度量标准,如精度、召回率,可用于多个任务。分类、回归和排序是监督学习的例子,...评估模型是整个机...
  • 预测模型评估

    千次阅读 2019-07-22 16:11:14
    偏差描述的是模型预测准不准,低偏差就是表示模型预测能力是不错的,就像图中的点都在靶心附近。 方差描述的是模型稳不稳定,就像图中高方差的那些点,它们很分散,说明射击的成绩不稳定,波动很大。 二、用学习...
  • 基于LSTM的股票预测模型_python实现_超详细

    万次阅读 多人点赞 2019-07-05 22:25:13
    文章目录一、背景二、主要技术介绍1、RNN模型2、LSTM模型3、控制门工作原理四、代码实现五、案例分析...因此本文想利用现有的模型算法,对股票价格进行预测,从而使自然人股民可以自己对股票进行预测。 理论上,...
  • 数据建模中分类与预测模型主要是寻求合适的分类模型并在此基础之上进行未来预测。 01预测方法 02灰色预测及其matlab实现 03灰色预测模型 04时间序列预测模型 05预测方法习题解答 06基于RLS算法的数据预测与...
  • MATLAB 时间序列预测算法(有代码)

    万次阅读 多人点赞 2019-09-05 09:57:44
    ##MATLAB 时间序列预测算法(有代码) #最近在学习时间序列,找了很多资料,都需要会员,充值,本着共同进步的原则,给大家分享一下我找到的学习资料,里面大部分代码能实现,只有ARMA部分不能,因为现在的库中没有...
  • 灰色预测模型概念 灰色系统内的一部分信息是已知的,另一部分信息是未知的,系统内各因素间有不确定的关系。 灰色预测法是一种对含有不确定因素的系统进行预测的方法,对在一定范围内变化的、与时间有关的灰色过程...
  • 时间序列预测算法总结

    万次阅读 多人点赞 2018-10-18 10:30:48
    时间序列算法 time series data mining 主要包括decompose(分析数据的各个成分,例如趋势,周期性),prediction(预测未来的值),classification(对有序数据序列的feature提取与分类),clustering(相似数列...
  • 常见的预测算法

    万次阅读 2016-05-19 14:13:19
    常见的预测算法有 1.简易平均法,包括几何平均法、算术平均法及加权平均法; 2.移动平均法,包括简单移动平均法和加权移动平均法; 3,指数平滑法,包括 一次指数平滑法和二次指数平滑法,三次指数平滑法; 4,线性回归法...
  • BP神经网络回归预测模型(python实现)

    万次阅读 多人点赞 2018-03-20 17:35:49
    神经网络模型一般用来做分类,回归预测模型不常见,本文基于一个用来分类的BP神经网络,对它进行修改,实现了一个回归模型,用来做室内定位。模型主要变化是去掉了第三层的非线性转换,或者说把非线性激活函数...
  • 来了来了!趋势预测算法大PK!

    千次阅读 2020-05-26 21:03:13
    作者 |王哲责编 |Carol头图 | CSDN 付费下载自视觉中国趋势预测在很多应用场景中都会起到至关重要的作用,比如淘宝商家会考虑库存量应该保持在多少才能够满足客户需求,商场希望...
  • 预测算法用java实现

    万次阅读 2013-05-20 13:14:12
    常见的预测算法有1.简易平均法,包括几何平均法、算术平均法及加权平均法;2.移动平均法,包括简单移动平均法和加权移动平均法;3,指数平滑法,包括一次指数平滑法和二次指数平滑法,三次指数平滑法;4,线性回归法,...
  • 数学建模——灰色预测模型及matlab代码实现

    万次阅读 多人点赞 2019-09-02 20:52:58
    灰色预测的主要特点是模型使用的不是原始数据序列,而是生成的数据序列。其核心体系是灰色模型(Grey Model,简称GM),即对原始数据作...GM(1,1)预测模型1阶微分方程,只含1个变量 GM(1,1)模型预测步骤 1.数据的检...
  • 1.马尔可夫链预测模型介绍 2.马尔可夫链的数学概念和性质 3.离散型马尔可夫链变量预测步骤 4.离散型马尔可夫链模型代码 5.实际案例 前言:彩票是一个坑,千万不要往里面跳。任何预测彩票的方法都不可能100%,都...
  • 摘要:文章讨论了多变量灰色预测模型的建模方法及其算法思想,得到了多变量灰色预测模型的检验方法。为了简化模型求解,给出多变量灰色预测模型的MATLAB 程序实现。通过应用实例说明算法程序的应用和效果。关键词:...
  • MATLAB BP神经网络预测算法

    千次阅读 2019-11-24 06:22:53
    BP神经网络预测算法预测序号15的跳高成绩。 下表是国内男子跳高运动员各项素质指标 P=[3.2 3.2 3 3.2 3.2 3.4 3.2 3 3.2 3.2 3.2 3.9 3.1 3.2; 9.6 10.3 9 10.3 10.1 10 9.6 9 9.6 9.2 ...
  • 生产经营中常用的预测算法

    千次阅读 2017-04-20 13:35:50
    常见的预测算法有: 1.简易平均法,包括几何平均法、算术平均法及加权平均法; 2.移动平均法,包括简单移动平均法和加权移动平均法; 3,指数平滑法,包括 一次指数平滑法和二次指数平滑法,三次指数平滑法; 4,线性...
  • 在开发预测模型算法时,无论是线性回归模型还是ARIMA模型 ,重要的是量化模型对未来观察的适应程度。 最简单的方法之一是利用预测值和实际值之间的误差来计算模型的正确性。在此基础上,有几种方法可以利用这种...
  • MATLAB 时间序列预测算法的实现

    千次阅读 2020-01-27 17:30:39
    最近看了一篇关于时间序列模型的论文 以下是关于matlab代码的部分各个方法都有实现 觉得还是这样用起来方便 %平均移动法 %clc; %clear all; %y=[533.8 574.6 606.9 649.8 705.1 772.0 816.4 892.7 963.9 1015.1 ...
  • 数据分析|销量预测模型

    万次阅读 2019-06-25 14:13:29
    一、什么是预测 通过研究过去、了解现在、预测未来。 二、为什么做预测 销量的多少会直接影响整个公司的运作,通过预计提前做出合理安排。 三、预测的基本依据 满足什么条件才可以做预测 四、常用预测的方法...
  • 灰色预测模型(Gray Forecast Model)是通过少量的、不完全的信息,建立数学模型并做出预测的一种预测方法灰色预测模型适用于小样本,含有不确定性因素的系统首先,假如给定一组数据X1={x11,x12,x13…x1n},你需要预测...
  • 基于FTRL的在线CTR预测算法

    千次阅读 2017-07-18 09:35:04
    本文主要讲解基于FTRL的在线CTR预测算法的主要思想以及Java实现
  • 1、预测模型 2、优化模型 3、评价模型 数学建模的十大常用算法 预测模型:神经网络预测、灰色预测、拟合插值预测(线性回归)、时间序列预测、马尔科夫链预测、微分方程预测、Logistic 模型等等。 应用领域:人口...
  • 数据分析之预测模型项目模板

    千次阅读 2018-01-27 10:39:14
    机器学习是一项经验技能,经验越多越擅长。...端到端的预测模型的项目结构  2.如何将前面学到的内容引入到项目中  3.如何通过这个项目模版来得到一个高准确度的模型 一、 在项目中实践机器学习  从端到端

空空如也

1 2 3 4 5 ... 20
收藏数 452,539
精华内容 181,015
关键字:

预测模型