精华内容
下载资源
问答
  • 由于观测数据中的噪声和混沌相空间重构参数对EGT预测精度有较大影响,提出利用搜索算法寻找使EGT预测精度较优的非线性去噪参数和重构相空间的延迟时间和嵌入维变量。仿真结果表明,该算法用于某型航空发动机EGT序列...
  • 13.影响预测准确度的因素

    千次阅读 2018-04-08 19:00:09
    首先,预测想达到完全准确是不可能的。然后,和随机猜测相比预测的...这篇主要谈谈影响预测准确度的因素。对于机器学习来说主要是自变量和因变量如何选取。自变量应该是我能得到的全部数据,因变量是我想得到的预测...

    首先,预测想达到完全准确是不可能的。

    然后,和随机猜测相比预测的效果也不容否认,只是预测越准参考价值越大。

    重点在于预测误差可以不断减小。对于分类问题用准确率衡量,对于回归问题用误差衡量。

    我研究的轨迹预测问题应该属于回归问题,衡量的标准就是预测出的位置和实际位置的距离。


    这篇主要谈谈影响预测准确度的因素。对于机器学习来说主要是自变量和因变量如何选取。

    自变量应该是我能得到的全部数据,因变量是我想得到的预测结果。。。这是最简单的选取

    如果改进一下,把自变量和因变量归一化。。。效果会好很多

    再改进,选择有效的自变量。

    对自变量和因变量做预处理,使两者的关系更直观。

    尽量只保留几个无法计算的参数留给模型学习,其他的处理的越好预测效果越好。



    这次研究把重心放在整体架构和数据预处理上,训练使用现成的模块。以后如果继续研究可以深入建立一个专门的机器学习模型,针对具体问题定制的模型效果应该会更好。

    展开全文
  • 针对黄陵2#煤矿二盘区煤层瓦斯含量的影响因素进行灰色关联度分析,得出影响...然后运用灰色系统理论,建立煤层瓦斯含量的灰色预测模型,经过检验,该模型精度能够满足工程要求,一定的实用性,可以作为瓦斯防治工作的依据。
  • 地下煤炭资源的开采会引起地表沉陷,地表移动变形量的大小...研究结果表明,对非等间隔数据采用不同的插值方法,预测的结果会一定的差异,根据具体观测数据,选择不同的插值法,能够提高GM(1,1)模型对下沉值的预测精度
  • 10 财政收入影响因素分析及预测模型

    万次阅读 多人点赞 2017-09-15 15:48:04
    4 10 财政收入影响因素分析及预测模型 10.1背景与挖掘目标  本案例通过研究发现影响目前以及未来地方财源建设的因素,并对其进行深入分析,提出对该市地方财源优化的具体建议,供政府决策参考,同时为其他发展较...

    4 10 财政收入影响因素分析及预测模型

    10.1背景与挖掘目标

      本案例通过研究发现影响目前以及未来地方财源建设的因素,并对其进行深入分析,提出对该市地方财源优化的具体建议,供政府决策参考,同时为其他发展较快的城市提供借鉴。本案例对1994-2013年财政收入以及相关因素的数据,数据来自统计年鉴。

    目标:

    (1) 梳理影响地方财政收入的关键特征,分析识别影响地方财政收入的关键特征的选择模型

    (2) 结合(1)的分析,对某市2015年财政总收入以及各个类别收入进行预测。

    10.2分析方法与过程

       本案例在已有的研究基础上运用Adaptive-Lasso变量选择方法来研究影响地方财政收入的因素。

       Lasso是在1996年提出的将参数估计与变量选择同时进行的一种正则化方法,参数估计被定义为如下:

     

    10.2.1 灰色预测与神经网络的组合模型

    在Lasso变量的选择基础上,鉴于灰色预测对小数据量数据预测的优良性能,对单个选定的因素建立灰色预测模型,得到他们在2014-2015年的预测值,由于神经网络较强的适应性和容错能力,对历史数据建立训练模型,把灰色预测的结果带入训练好的模型中,就得到了充分考虑历史信息的预测结果,即2015年某市财政收入及各个类别收入

    主要步骤如下:

    (1) 对数据进行预处理

    (2) 将预处理好的数据,建立Lasso变量选择模型

    (3) 在(2)的基础上建立单变量的灰色预测模型,以及人工神经网络预测模型

    (4) 在(3)的预测值带入建立好的人工神经网络模型中,从而得到2014、2015年某市财政收入以及各类别收入的预测值。

    10.2.2数据探索分析

    影响财政收入(y)的因素很多,经查阅资料选以下因素为自变量

    社会从业人数(x1)

    在岗职工工资总额(x2)

    社会消费品零售总额(x3)

    城镇居民人均可支配收入(x4)

    城镇居民人均消费性支出(x5)

    年末总人口(x6)

    全社会固定资产投入(x7)

    地区生产总值(x8)

    第一产业产值(x9)

    税收(x10)

    居民消费价格指数(x11)

    第三产业与第二产业产值比(x12)

    居民消费水平(x13)

    10.2.2.1描述性分析

       我们要对数据有个大体认识,要对其进行简单的描述性统计分析

    # encoding=utf-8
    #
    描述性分析
    import pandas as pd
    import numpy as np

    inputfile=
    'demo/data/data1.csv'
    outputfile='demo/tmp/datagaikuo.csv'
    data=pd.read_csv(inputfile)
    r=[data.min()
    ,data.max(),data.mean(),data.std()]#依次计算最小值、最大值、均值、标准差
    r=pd.DataFrame(r,index=['MIN','MAX','MEAN', 'STD']).T
    np.round(r
    ,2).to_csv(outputfile)#保留2位小数,并输出

     

    10.2.2.2相关性分析

    现在要分析一下因变量与解释变量之间的关系,它们之间是否存在相关性,下面来求一下相关系数。

    #相关系数
    np.round(data.corr(method='pearson'),2).to_csv('demo/tmp/datapearson.csv')

    从上图中的相关系数中我们可以发现居民消费价格指数(x11)与财政收入的线性关系不显著,而且呈现负相关,其余变量与财政收入呈高度正相关。

    这种表格的形式看起来不太直观,现在我们以图的形式进行可视化,首先要对数据进行0-1标准值化处理。

    #标准化处理
    dataNM=(data-data.min())/(data.max()-data.min())
    dataNM.to_csv(
    'demo/tmp/dataNM.csv')


    从图中我们可以看出x11总体呈下降趋势,与y呈负相关关系,而其他因变量都与y呈正相关关系。

    10.2.3模型构建

    10.2.3.1Lasso变量选择模型

    #Lasso变量选择
    from sklearn.linear_model import Lasso
    model=Lasso()
    model.fit(data.iloc[:
    ,0:13],data['y'])
    q=model.coef_
    #各特征的系数
    q=pd.DataFrame(q,index=['x1','x2','x3','x4','x5','x6','x7','x8','x9','x10','x11','x12','x13']).T
    np.round(q
    ,4).to_csv('demo/tmp/dataLasso.csv')

     

    观察表格中的数据我们发现x11居民消费水平为0,也就是说该因素对财政收入的影响非常小,可以忽略不计。

    10.2.4财政收入及各类别收入预测模型

     (1)某市财政收入预测模型

    对Lasso变量选择方法识别的影响财政收入的因素建立灰色预测与神经网络的组合预测模型,其参数设置为误差精度0.0000001,学习次数为10000次,输入层神经元的个数为12(除x12之外)。

    #地方财政收入灰色预测
    from GM11 import GM11
    outputfile=
    'demo/tmp/data1_GM11.xls'
    data.index=range(1994,2014)#行索引
    data.loc[2014]=None
    data.loc[2015]=None
    l=['x1','x2','x3','x4','x5','x6','x7','x8','x9','x10','x11','x13']
    for i in l:
        f=GM11(data[i][
    range(1994,2014)].as_matrix())[0]
        data[i][
    2014]=f(len(data)-1)
        data[i][
    2015]=f(len(data))
        data[i]=data[i].round(
    2)
    data[l+[
    'y']].to_excel(outputfile)

     


    预测出了这11个变量在2014和2015年的因变量,下面就要利用神经网络预测财政收入了。

    经过多次试验发现神经网络模型:输入层的节点为11,隐层节点为12,输出节点为1的效果较好,神经网络预测代码如下:

    #地方财政收入神经网络预测模型
    inputfile='demo/tmp/data1_GM11.xls'
    outputfile='demo/tmp/revenue.xls'
    modelfile='demo/tmp/1-net.model'
    data=pd.read_excel(inputfile)
    feature=[
    'x1','x2','x3','x4','x5','x6','x7','x8','x9','x10','x11','x13']#特征所在列
    data_train=data.loc[range(1994,2014)].copy()#2014年前的建模数据
    data_mean=data_train.mean()
    data_std=data_train.std()
    data_train=(data_train-data_mean)/data_std
    #数据标准化
    x_train=data_train[feature].as_matrix()#特征数据
    y_train=data_train['y'].as_matrix()#标签数据
    from keras.models import Sequential
    from keras.layers.core import Dense,Activation
    model=Sequential()
    #建立模型
    model.add(Dense(input_dim=12,output_dim=12))
    model.add(Activation(
    'relu'))#激活函数
    model.add(Dense(input_dim=12,output_dim=1))
    model.compile(
    loss='mean_squared_error',optimizer='adam')#编译模型,目标函数是均方差
    model.fit(x_train,y_train,nb_epoch=10000,batch_size=16)#训练模型
    model.save_weights(modelfile)#保存模型
    #预测并还原结果
    x=((data[feature]-data_mean[feature])/data_std[feature]).as_matrix()
    data[
    u'y_pred'] = model.predict(x) * data_std['y'] + data_mean['y']
    data.to_excel(outputfile)
    #画出预测图
    import matplotlib.pyplot as plt
    p=data[[
    'y','y_pred']].plot(subplots=True,style=['b-o','r-*'])
    plt.show()

     


    当我们把y和y_pred放在一个图上的时候,发现它们“重合”,它们只是差别小而已……并没重合……这些差别我们可以观察具体数据看出,可见我们的模型预测效果还是ganggang滴!

     




    展开全文
  • 项目为《Python 数据分析与挖掘实战》第 13 章:财政收入影响因素分析及预测模型。项目实现了因变量的筛选,阐述了灰色预测原理计算过程,实现了灰色预测和神经网络的结合模型。

    1. 背景与挖掘目标

    • 项目为《Python 数据分析与挖掘实战》第 13 章:财政收入影响因素分析及预测模型,内容参考了书中源代码及 u012063773 的博客
    • 挖掘目标为分析地方财政收入的关键特征,筛选特征进行分析建模,然后对财政收入进行预测

    2. 分析方法与过程

    2.1 数据探索

    1. 主要变量描述性分析:可以看出 y 的波动很大
    '''原始数据概括性度量'''
    import numpy as np
    import pandas as pd
    
    inputfile = 'chapter13/demo/data/data1.csv'
    data = pd.read_csv(inputfile)
    r = [data.min(), data.max(), data.mean(), data.std()]
    r = pd.DataFrame(r, index=['Min', 'Max', 'Mean', 'STD']).T
    r = np.round(r, 2)    # 保留两位小数
    r
    
    MinMaxMeanSTD
    x13831732.007599295.005579519.951262194.72
    x2181.542110.78765.04595.70
    x3448.196882.852370.831919.17
    x47571.0042049.1419644.6910203.02
    x56212.7033156.8315870.958199.77
    x66370241.008323096.007350513.60621341.85
    x7525.714454.551712.241184.71
    x8985.3115420.145705.804478.40
    x960.62228.46129.4950.51
    x1065.66852.56340.22251.58
    x1197.50120.00103.315.51
    x121.031.911.420.25
    x135321.0041972.0017273.8011109.19
    y64.872088.14618.08609.25
    1. 原始数据相关性分析:可以看出 x11 与 y 相关性不大,且为负相关
    '''原始数据求解 Pearson 相关系数'''
    pear = np.round(data.corr(method = 'pearson'), 2)
    pear
    
    x1x2x3x4x5x6x7x8x9x10x11x12x13y
    x11.000.950.950.970.970.990.950.970.980.98-0.290.940.960.94
    x20.951.001.000.990.990.920.990.990.980.98-0.130.891.000.98
    x30.951.001.000.990.990.921.000.990.980.99-0.150.891.000.99
    x40.970.990.991.001.000.950.991.000.991.00-0.190.911.000.99
    x50.970.990.991.001.000.950.991.000.991.00-0.180.900.990.99
    x60.990.920.920.950.951.000.930.950.970.96-0.340.950.940.91
    x70.950.991.000.990.990.931.000.990.980.99-0.150.891.000.99
    x80.970.990.991.001.000.950.991.000.991.00-0.150.901.000.99
    x90.980.980.980.990.990.970.980.991.000.99-0.230.910.990.98
    x100.980.980.991.001.000.960.991.000.991.00-0.170.900.990.99
    x11-0.29-0.13-0.15-0.19-0.18-0.34-0.15-0.15-0.23-0.171.00-0.43-0.16-0.12
    x120.940.890.890.910.900.950.890.900.910.90-0.431.000.900.87
    x130.961.001.001.000.990.941.001.000.990.99-0.160.901.000.99
    y0.940.980.990.990.990.910.990.990.980.99-0.120.870.991.00

    2.2 模型构建

    1. Lasso 变量选择模型(备注:书中使用的是 Adaptive-Lasso 变量选择,这个函数多处查找都没找到,因此直接使用 Lasso,得到的结果和书中略有不同,后面保留的变量暂时以书中的为准)

    '''Lasson 变量选择'''
    from sklearn.linear_model import Lasso
    model = Lasso(alpha=0.1, max_iter=100000)
    model.fit(data.iloc[:, 0:13], data['y'])
    print(model.coef_)
    
    [-3.88351082e-04 -5.85234238e-01  4.38483025e-01 -1.25563758e-01
      1.74517446e-01  8.19661325e-04  2.67660850e-01  2.89486267e-02
     -7.55994563e+00 -8.62534215e-02  3.37878229e+00  0.00000000e+00
     -7.70629587e-03]
    

    2. 财政收入及各类别收入预测模型:各类别收入预测方法一样,因此以财政收入为例,描述灰色模型的计算过程,然后建立灰色预测与神经网络的组合预测模型,参数设置为误差精度10^-7,学习次数 10000 次,神经元个数为 6 个

    • 灰色预测原理

      灰色预测对原始数据进行生成处理如累加,生成有较强规律性的数据序列,然后建立相应的微分方程模型,从而预测事物未来发展趋势的状况。

      设变量 X ( 0 ) = { X ( 0 ) ( i ) , i = 1 , 2 … n } X^{(0)} = \{X^{(0)}(i), i=1,2\dots n\} X(0)={X(0)(i),i=1,2n} 为一非负单调原始数据数列,对 X ( 0 ) X^{(0)} X(0) 进行 1 次累加得到 X ( 1 ) = { X ( 1 ) ( k ) , k = 1 , 2 … n } X^{(1)} = \{X^{(1)}(k), k=1,2\dots n\} X(1)={X(1)(k),k=1,2n},对 X ( 1 ) X^{(1)} X(1) 建立一阶线性微分方程,其中 a , u a, u a,u 为常数:
      d X ( 1 ) d t + a X ( 1 ) = u \frac{dX^{(1)}}{dt} + aX^{(1)} = u dtdX(1)+aX(1)=u
      求解微分方程,得到
      X ( 1 ) ( t ) = [ ∫ e ∫ a ⋅ d x ⋅ u ⋅ d x + C ] ⋅ ∫ e ∫ − a ⋅ d x … … … … … … (1) X^{(1)}(t) = [\int e^{\int a\cdot dx} \cdot u \cdot dx+ C] \cdot \int e^{\int -a\cdot dx}\text {………………(1)} X(1)(t)=[eadxudx+C]eadx1
         ⟹    X ( 1 ) ( t ) = ( u a ⋅ e a t + C ) ⋅ e − a t … … … … … … (2) \implies X^{(1)}(t) = (\frac {u}{a} \cdot e^{at} + C) \cdot e^{-at}\text {………………(2)} X(1)(t)=(aueat+C)eat2
      X ( 1 ) ( t 0 ) X^{(1)}(t_0) X(1)(t0) 代入(2),求解 C C C,得到:
      C = ( X ( 1 ) ( t 0 ) − u a ) ⋅ e − a t 0 … … … … … … (3) C = (X^{(1)}(t_0) - \frac{u}{a}) \cdot e^{-at_0}\text {………………(3)} C=(X(1)(t0)au)eat03
      将(3)代入(2),得到:
      X ( 1 ) ( t ) = [ X ( 1 ) ( t 0 ) − u a ] ⋅ e − a ( t − t 0 ) + u a … … … … … … (4) X^{(1)}(t) = [X^{(1)}(t_0) - \frac{u}{a}]\cdot e^{-a(t-t_0)} + \frac{u}{a}\text {………………(4)} X(1)(t)=[X(1)(t0)au]ea(tt0)+au4
      对于离散值:
      X ( 1 ) ( k + 1 ) = [ X ( 1 ) ( 1 ) − u a ] ⋅ e − a k + u a … … … … … … (5) X^{(1)}(k+1) = [X^{(1)}(1) - \frac{u}{a}]\cdot e^{-ak} + \frac{u}{a}\text {………………(5)} X(1)(k+1)=[X(1)(1)au]eak+au5
      灰色预测中对于 a , u a, u a,u 的求解使用的是最小二乘法。由于:
      X ( 1 ) ( k ) − X ( 1 ) ( k − 1 ) = Δ X ( 1 ) ( k ) Δ k = X ( 0 ) ( k ) , Δ k = 1 … … … … … … (6) X^{(1)}(k) - X^{(1)}(k-1) = \frac{\Delta X^{(1)}(k)}{\Delta k} = X^{(0)}(k), \Delta k = 1\text {………………(6)} X(1)(k)X(1)(k1)=ΔkΔX(1)(k)=X(0)(k),Δk=16
      将(6) 代入微分方程,得到:
      X ( 0 ) ( k ) = − a X ( 1 ) ( k ) + u … … … … … … (7) X^{(0)}(k) = -aX^{(1)}(k)+u \text {………………(7)} X(0)(k)=aX(1)(k)+u7
      由于 Δ X ( 1 ) ( k ) Δ k \frac{\Delta X^{(1)}(k)}{\Delta k} ΔkΔX(1)(k) 涉及 X ( 1 ) ( k ) X^{(1)}(k) X(1)(k) 两个时刻的值,因此将(7)中的 X ( 1 ) ( k ) X^{(1)}(k) X(1)(k) 换为两个时刻的均值更为合理,得到:
      Y = B U Y = BU Y=BU
      即:
      [ X ( 0 ) ( 2 ) X ( 0 ) ( 3 ) ⋮ X ( 0 ) ( N ) ] = [ − 1 2 ( X ( 1 ) ( 2 ) + X ( 1 ) ( 1 ) ) 1 − 1 2 ( X ( 1 ) ( 3 ) + X ( 1 ) ( 2 ) ) 1 ⋮ ⋮ − 1 2 ( X ( 1 ) ( N ) + X ( 1 ) ( N − 1 ) ) 1 ] [ a u ] … … … … … … (8) \begin{bmatrix} X^{(0)}(2)\\ X^{(0)}(3)\\ \vdots\\ X^{(0)}(N)\\ \end{bmatrix} = \begin{bmatrix} -\frac{1}{2}(X^{(1)}(2) + X^{(1)}(1)) & 1 \\ -\frac{1}{2}(X^{(1)}(3) + X^{(1)}(2)) & 1 \\ \vdots & \vdots \\ -\frac{1}{2}(X^{(1)}(N) + X^{(1)}(N-1)) & 1 \\ \end{bmatrix} \begin{bmatrix} a \\ u \\ \end{bmatrix}\text {………………(8)} X(0)(2)X(0)(3)X(0)(N)=21(X(1)(2)+X(1)(1))21(X(1)(3)+X(1)(2))21(X(1)(N)+X(1)(N1))111[au]8
      由最小二乘法,得到:
      U ^ = [ a ^ u ^ ] = ( B T B ) − 1 B T Y … … … … … … (9) \hat{U} = \begin{bmatrix} \hat{a} \\ \hat{u} \\ \end{bmatrix} = (B^TB)^{-1}B^TY\text {………………(9)} U^=[a^u^]=(BTB)1BTY9
      将(9)代入(5),得到:
      X ( 1 ) ( k + 1 ) = [ X ( 1 ) ( 1 ) − u ^ a ^ ] ⋅ e − a ^ k + u ^ a ^ … … … … … … (10) X^{(1)}(k+1) = [X^{(1)}(1) - \frac{\hat{u}}{\hat{a}}]\cdot e^{-\hat{a}k} + \frac{\hat u}{\hat a}\text {………………(10)} X(1)(k+1)=[X(1)(1)a^u^]ea^k+a^u^10
      将(10)代入(6):
      X ( 0 ) ( k + 1 ) = ( 1 − e a ^ ) [ X ( 0 ) ( 1 ) − u ^ a ^ ] e − a ^ k … … … … … … (11) X^{(0)}(k+1) = (1-e^{\hat{a}})[X^{(0)}(1) - \frac{\hat{u}}{\hat{a}}]e^{-\hat{a}k}\text {………………(11)} X(0)(k+1)=(1ea^)[X(0)(1)a^u^]ea^k11

    '''灰色预测函数'''
    def GM11(x0): #自定义灰色预测函数
        import numpy as np
        x1 = x0.cumsum() # 生成累加序列
        z1 = (x1[:len(x1)-1] + x1[1:])/2.0 # 生成紧邻均值(MEAN)序列,比直接使用累加序列好,共 n-1 个值
        z1 = z1.reshape((len(z1),1))
        B = np.append(-z1, np.ones_like(z1), axis = 1)    # 生成 B 矩阵
        Y = x0[1:].reshape((len(x0)-1, 1))    # Y 矩阵
        [[a],[u]] = np.dot(np.dot(np.linalg.inv(np.dot(B.T, B)), B.T), Y)    #计算参数
        f = lambda k: (x0[0]-u/a)*np.exp(-a*(k-1))-(x0[0]-u/a)*np.exp(-a*(k-2))    #还原值
        delta = np.abs(x0 - np.array([f(i) for i in range(1,len(x0)+1)]))    # 计算残差
        C = delta.std()/x0.std()
        P = 1.0*(np.abs(delta - delta.mean()) < 0.6745*x0.std()).sum()/len(x0)
        return f, a, u, x0[0], C, P #返回灰色预测函数、a、b、首项、方差比、小残差概率
    
    '''地方财政收入灰色预测'''
    import numpy as np
    import pandas as pd
    
    inputfile = 'chapter13/demo/data/data1.csv'
    outputfile = 'chapter13/demo/tmp2/data1_GM11.xls'
    modelfile = 'chapter13/demo/tmp2/net.model'
    data = pd.read_csv(inputfile)
    data.head()
    
    x1x2x3x4x5x6x7x8x9x10x11x12x13y
    03831732181.54448.197571.006212.706370241525.71985.3160.6265.66120.01.029532164.87
    13913824214.63549.979038.167601.736467115618.251259.2073.4695.46113.51.051652999.75
    23928907239.56686.449905.318092.826560508638.941468.0681.1681.16108.21.064700888.11
    34282130261.58802.5910444.608767.986664862656.581678.1285.7291.70102.21.0927694106.07
    44453911283.14904.5711255.709422.336741400758.831893.5288.88114.6197.71.2008027137.32
    data.index = range(1994, 2014)
    data.loc[2014] = None
    data.loc[2015] = None
    
    # 模型精度评价
    l = ['x1', 'x2', 'x3', 'x4', 'x5', 'x7']
    for i in l:
        GM = GM11(data[i][list(range(1994, 2014))].values)
        f = GM[0]
        c = GM[-2]
        p = GM[-1]
        data[i][2014] = f(len(data)-1)
        data[i][2015] = f(len(data))
        data[i] = data[i].round(2)
        if (c < 0.35) & (p > 0.95):
            print('对于模型{},该模型精度为---好'.format(i))
        elif (c < 0.5) & (p > 0.8):
            print('对于模型{},该模型精度为---合格'.format(i))
        elif (c < 0.65) & (p > 0.7):
            print('对于模型{},该模型精度为---勉强合格'.format(i))
        else:
            print('对于模型{},该模型精度为---不合格'.format(i))
    
    data[l+['y']].to_excel(outputfile, )
    
    对于模型x1,该模型精度为---好
    对于模型x2,该模型精度为---好
    对于模型x3,该模型精度为---好
    对于模型x4,该模型精度为---好
    对于模型x5,该模型精度为---好
    对于模型x7,该模型精度为---好
    
    '''神经网络'''
    inputfile2 = outputfile
    outputfile2 = 'chapter13/demo/tmp2/revenue.xls'
    modelfile = 'chapter13/demo/tmp2/1-net.model'
    data2 = pd.read_excel(inputfile2, index_col=0)
    
    # 提取数据
    feature = list(data2.columns[:len(data2.columns)-1])
    train = data2.loc[list(range(1994, 2014))].copy()
    mean = train.mean()
    std = train.std() 
    train = (train - mean) / std    # 数据标准化,这里使用标准差标准化
    x_train = train[feature].values
    y_train = train['y'].values
    
    # 建立神经网络模型 
    from keras.models import Sequential
    from keras.layers.core import Dense, Activation
    
    model = Sequential()
    model.add(Dense(input_dim=6, units=12))
    model.add(Activation('relu'))
    model.add(Dense(input_dim=12, units=1))
    model.compile(loss='mean_squared_error', optimizer='adam')
    model.fit(x_train, y_train, epochs=10000, batch_size=16)
    model.save_weights(modelfile2)
    

    2.3 数据预测

    • 从结果可以看到,1994~2013 预测值和实际值几乎重合,因此数据预测可信度较高
    # 预测,并还原结果
    x = ((data2[feature] - mean[feature]) / std[feature]).values
    data2['y_pred'] = model.predict(x) * std['y'] + mean['y']
    data2.to_excel(outputfile2)
    
    import matplotlib.pyplot as plt
    %matplotlib notebook
    p = data2[['y', 'y_pred']].plot(style=['b-o', 'r-*'])
    p.set_ylim(0, 2500)
    p.set_xlim(1993, 2016)
    plt.show()
    

    预测图

    源代码及数据文件参考:https://github.com/Raymone23/Data-Mining

    展开全文
  • 实证研究以微信众筹项目为研究对象,包括腾讯慈善基金会,青松町等,实证研究采用方差多元分析,逻辑回归和数据挖掘等方法,分析了最终筹资和结果(成功或失败)的影响因素。建立模型以预测结果。 实证研究表明,...
  • 本文分析了地方财政收入、增值税收入、营业税收入、企业所得税收入、个人所得税收入的影响因素并对未来两年采用灰色预测(GM(1,1))并以已年度序列训练神经网络(NN),再以得到的模型预测包括未来两年在内的所有...

    问题重述

    通过研究,发现影响某市目前及未来地方财源的因素。结合文中目标:(1)选择模型,找出影响财政收入的关键因素;(2)基于关键因素,选择预测方法、模型预测未来收入。

    具体来讲

    本文分析了地方财政收入、增值税收入、营业税收入、企业所得税收入、个人所得税收入的影响因素并对未来两年采用灰色预测(GM(1,1))并以已有年度序列训练神经网络(NN),再以得到的模型预测包括未来两年在内的所有年份收入的预测值,由此可以根据预测相比于实际值情况及未来收入变化作出相应的决策判断。

    文中的操作流程步骤非常值得学习,思路很清晰(实际类似问题可类比此类框架):

    1. 从统计局网站及各统计年鉴搜集该市财政收入及各类别收入相关数据;
    2. 数据预处理,得到建模用数据,构建LassoLars变量选择模型;
    3. 根据所选择变量建立单变量GM(1,1)Model预测该变量序列下年值,及根据所选变量(特征变量)及收入(类变量,标签变量)构建人工神经网络模型(训练模型
    4. 将由GM(1,1)得到的个所选变量的预测值数据所得到的神经网络(模型预测),从而得到各种收入的预测值

    方法、模型及代码

    Lasso方法:

    线性回归的L1正则化通常称为Lasso回归,一般来说,对于高维的特征数据,尤其线性关系是稀疏的,我们会采用Lasso回归。或者是要在一堆特征里面找出主要的特征,那么Lasso回归更是首选了。Lasso回归的损失函数优化方法常用的有两种,坐标轴下降法和最小角回归法(Least Angle Regression)。Lasso类采用的是坐标轴下降法,这里LassoLars模型采用的是最小角回归法。详细介绍参见文末Ref

     

     1 #导入使用的模块
     2 import os
     3 import numpy as np
     4 import pandas as pd
     5 from sklearn.linear_model import LassoLars
     6 from sklearn.linear_model import Lasso
     7 from keras.models import Sequential  #有的同学可能会遇到 kernel died,restarting的问题,可参见我的另一片文章
     8 from keras.layers.core import Dense, Activation
     9 import matplotlib.pyplot as plt
    10 #import tensorflow as tf
    11 
    12 #
    13 filepath='../data/data1.csv'
    14 data=pd.read_csv(filepath)
    15 des=data.describe()
    16 r=des.T
    17 r=r[['min','max','mean','std']]
    18 np.round(r,2)  # 保留2位小数,四舍六入五留双(五留双即遇五看五前面是偶数则保留,奇数进位)
    19 #np.round([0.15,0.25,0.14,0.16],1)  # array([0.2, 0.2, 0.1, 0.2])
    20 np.round(data.corr(method='pearson'),2)  # method={'pearson','spearman','kendall'},计算相关系数,相关分析
    21 
    22 model = LassoLars(alpha=1)  # LASSO回归的特点是在拟合广义线性模型的同时进行变量筛选和复杂度调整,剔除存在共线性的变量
    23 model.fit(data.iloc[:,:data.shape[1]-1],data.iloc[:,data.shape[1]-1])
    24 #pd.DataFrame(model.coef_,columns=['x%d' %i for i in np.arange(13)+1])
    25 model_coef=pd.DataFrame(pd.DataFrame(model.coef_).T)
    26 model_coef.columns=['x%d' %i for i in np.arange(13)+1]
    27 model_coef
    28 #由系数表可知,系数值为零的要剔除,得到特征变量'x3','x5','x7','x11'

     

    GM-Model

     GM-Model即灰色预测模型,灰色预测法是一种预测灰色系统的预测方法。灰色预测通过鉴别系统因素之间发展趋势的相异程度,即进行关联分析,并对原始数据进行生成处理来寻找系统变动的规律,生成有较强规律性的数据序列,然后建立相应的微分方程模型,从而预测事物未来发展趋势的状况。

    灰色系统相对于白色、黑色系统,白色系统即系统的内部特征是完全已知的,既系统信息是完全充分的;黑色系统系统的内部信息对外界来说是一无所知的,只能通过它与外界的联系来加以观测研究;灰色处于二者之间,部分已知部分未知,系统内各因素间有不确定的关系。

    GM(1,1)重要概念

    原始序列

     

     一次累加(1-AGO,Accumulating Generation Operator)及与原序列关系

     

    紧邻均值生成(也可加权生成)及与AGO序列关系

    GM(1,1)白化方程

    白化方程的解及还原值

    模型检验相关的残差序列

    后验差检验中的p和C

    更多详细可参加Ref或自行百度。

    后验差检验

    指标C(后验差)和p(小误差概率)是后验差检验的两重要指标【和计算得序列对应,非针对模型和某一特定值而是序列】,C越小越好,C越小即原始数据方差大,离散程度大,残差方差越小,离散程度小;C小表明尽管原始数据很离散,而模型所得计算值与实际值之差并不太离散。

    指标p越大越好,p越大残差与残差平均值之差小于给定值0.6745的点较多,即拟合值(或预测值)分布比较均匀。

    模型精度等级

    均方差比值C

    小误差概率p

    1级(好)

    C<=0.35

    0.95<=p

    2级(合格)

    0.35<C<=0.5

    0.8<=p<0.95

    3级(勉强)

    0.5<C<=0.65

    0.70<=p<0.8

    4级(不合格)

    0.65<C

    p<0.7

    模型精度级别=Max(p的级别,C的级别)。

     

     1 # GM模型,预测
     2 def GM11(x0): #自定义灰色预测函数
     3   import numpy as np
     4   x1 = x0.cumsum() #1-AGO序列
     5   x1 = pd.DataFrame(x1)
     6   z1 = (x1 + x1.shift())/2.0 #紧邻均值(MEAN)生成序列
     7   z1 = z1[1:].values.reshape((len(z1)-1,1))  # 转成矩阵
     8   B = np.append(-z1, np.ones_like(z1), axis = 1)  # 列合并-z1和形状同z1的1值矩阵  19X2
     9   Yn = x0[1:].reshape((len(x0)-1, 1))  # 转成矩阵 19
    10   [[a],[b]] = np.dot(np.dot(np.linalg.inv(np.dot(B.T, B)), B.T), Yn) #计算参数,基于矩阵运算,np.dot矩阵相乘,np.linalg.inv矩阵求逆
    11   f = lambda k: (x0[0]-b/a)*np.exp(-a*(k-1))-(x0[0]-b/a)*np.exp(-a*(k-2)) #还原值
    12   delta = np.abs(x0 - np.array([f(i) for i in range(1,len(x0)+1)]))  # 残差绝对值序列
    13   C = delta.std()/x0.std()
    14   P = 1.0*(np.abs(delta - delta.mean()) < 0.6745*x0.std()).sum()/len(x0)
    15   return f, a, b, x0[0], C, P #返回灰色预测函数、a、b、首项、方差比、小残差概率
    16 
    17 #x0=data_1['x3'][:-2].values
    18 
    19 
    20 
    21 l=['x3','x5','x7','x11','y']
    22 data_1=data[l].copy()
    23 data_1.index=range(1994,2014)
    24 data_1.loc[2014]=None  # 添加预测行
    25 data_1.loc[2015]=None
    26 
    27 for i in l:  # 列计算,预测每列2014、2015预测值
    28     f=GM11(data_1[i][:-2].values)[0]  # 利用返回的灰色预测函数,仅和对对应期数及位置有关
    29     data_1[i][2014]=f(len(data_1)-1)
    30     data_1[i][2015]=f(len(data_1))
    31     data_1[i]=data_1[i].round(2)

    神经网络预测

    关于神经网络的文章较多,不展开介绍,主要说明一点书中的代码有点旧keras更新后代码要调整一下。

    代码中输出时是没有激活函数的,即直接输出。或者说把激活函数看作f(x)=x。

     

     1 # 预测财政收入,2014、2015(y) 神经网络,用到data_1
     2 data_train=data_1.loc[range(1994,2014)].copy()
     3 data_train_normal=(data_train-data_train.mean())/data_train.std()  # 数据标准化,按列索引(列名)计算
     4 y_class=l.pop()
     5 x_train=data_train_normal[l]  # 特征数据提取
     6 y_train=data_train_normal[y_class]  #标签数据提取
     7 # 构造神经网络模型
     8 nn_model=Sequential()  # create the NN-model 
     9 nn_model.add(Dense(input_dim=4,units=12))  # 
    10 nn_model.add(Activation('relu'))  #
    11 nn_model.add(Dense(1))  # 最后一层不激活,直接输出。或者说把激活函数看作f(x)=x 
    12 nn_model.compile(loss='mean_squared_error', optimizer='adam',metrics=['accuracy'])
    13 #net.fit(train_data[:,:3],train_data[:,3],epochs=10,batch_size=1)#keras 2.0之前版本
    14 nn_model.fit(x_train,y_train,epochs=10000,batch_size=16,verbose=1)#keras 2.0,推荐,verbose=0,不显示过程,默认等于1显示过程
    15 # 预测,还原结果
    16 x=((data_1[l]-data_train[l].mean())/data_train[l].std()).values
    17 data_1['y_pred']=nn_model.predict(x)*data_train['y'].std()+data_train['y'].mean()
    18 #ax1=plt.subplot(211)
    19 #ax1.plot(data_1['y'],'b-o')
    20 #ax1.legend()
    21 #ax2=plt.subplot(212)
    22 #ax2.plot(data_1['y_pred'],'r-*')
    23 #ax2.legend()
    24 #plt.show()
    25 plt.plot(data_1['y'],'b-o')
    26 plt.plot(data_1['y_pred'],'r-*')
    27 plt.legend()
    28 # 政府性基金收入采用GM11预测2006-2015年份收入,并和原值2006-2013比较
    29 x0 = np.array([3152063, 2213050, 4050122, 5265142    ,5556619, 4772843,    9463330])
    30 f, a, b, x00, C, P = GM11(x0)  # 得到预测函数f,可计算接下来预测值(和序号相关,按序预测)
    31 len(x0)
    32 print('2014、2015年预测结果分别是:%.2f和%.2f'%(f(len(x0)+1),f(len(x0)+2)))
    33 print('x0序列的后验差比值为%.2f'%C)
    34 
    35 p=pd.DataFrame(x0,index=range(2007,2014),columns=['y'])  # 'y'要带上中括号
    36 p.loc[2014]=None
    37 p.loc[2015]=None
    38 p['y_pred']=[f(i+1) for i in range(len(p))]
    39 p=p.round(2)
    40 p.index=pd.to_datetime(p.index,format='%Y')
    41 #for i in range(len(p)):
    42 #    print(i+1)
    43 plt.plot(p['y'],'b-o')
    44 plt.plot(p['y_pred'],'r-*')
    45 plt.legend()
    46 #plt.show()

     

     

     

    输出图形:

    上图为财政收入预测(其中y的2014、2015值是GM(1,1)预测结果)

    下图为政府性基金收入预测

    注:以上仅以财政收入分析为例,其余方法完全一致,政府性基金收入与其他不同采用的是单序列单变量GM模型(即GM(1,1)),相比原序列很平滑可以看出趋势,二者均有稳中有升的趋势。

     

     

     

     

     

    Ref:

     

    scikit-learn实现线性回归之Lassolars模型

    灰色预测模型GM(1,1) 与例题分析

     

    《数据分析与挖掘实战》源代码及数据需要可自取https://github.com/Luove/Data

     

    转载于:https://www.cnblogs.com/amoor/p/9719638.html

    展开全文
  • 在分析FDM成形件精度影响因素的基础上,提出应用误差反向传播(BP)神经网络建立预测精度模型的方法。将主要影响因素作为BP神经网络模型的输入参数,并根据最小预测误差选择输入层和中间层的维数,确定了BP模型结构...
  • 数据挖掘实战—财政收入影响因素分析及预测

    千次阅读 多人点赞 2021-04-03 14:09:50
    文章目录引言一、数据探索1.数据质量分析1.1 缺失值分析1.2 异常点分析—箱型图分析1.3 重复数据分析2.数据特征分析2.1 描述性统计分析2.2 分布分析2.3 相关性分析二、数据预处理 ...本文数据挖掘主要包括以下步骤
  • 感谢阅读腾讯 AI Lab 微信号第109篇文章。本文将公布 AI+药物领域新进展。11月17日,腾讯公布了一项人工智能助力药物发现的新进展。通过腾讯自研的提升蛋白质结构预测精度的新方法...
  • 提高移动通信话务量的预测精度对提高网络性能、增进用户体验具有重要意义。由于多种因素影响到移动通信话务量的准确预测,故选择多因素灰色话务量预测模型来预测话务量。先对数据进行预处理,用关联分析法找到影响...
  • 案例来源自《Python 数据分析与挖掘实战》第 13 章:财政收入影响因素分析及预测模型 案例目的:预测财政收入 1 数据的基本描述性分析 数据 字段含义 社会从业人数(x1 )、 在岗职工工资总额(x2)、社会消费品零售...
  • 论文研究-煤与瓦斯突出预测器输入主因素识别方法.pdf, 为了提高煤与瓦斯突出预测的准确度,提出了一种...表明所建议的主因素识别方法是可行的,并且助于改进预测器的精度.
  • 经后期煤层气探井实测数据验证,其预测精度达到85%以上。预测结果分析表明,远离断层的井预测精度高,而靠近断层的井预测误差大,其误差值在-1.86~4.32m3/t之间。认为研究区煤层含气性总体受煤层底板标高(构造)控制,但...
  • 本文是基于《Python数据分析与挖掘实战》的实战部分的第13章的数据——《财政收入影响因素分析及预测模型》做的分析。 旨在补充原文中的细节代码,并给出文中涉及到的内容的完整代码。 在作者所给代码的基础上增加的...
  • 缺点: 交通流受多种外部因素影响,交通流数据具有随机性和不确定性,传统的模型普遍存在实时性差、预测精度不高的问题。 (2)组合模型的预测: 将两种模型的优点结合起来提高短时交通流的预测准确率。 a.卷积...
  • 该方法的主要思想是利用回归预测思想将预测分为因素预测和结果预测两部分,并分别采用不同预测模型进行预测,从而达到提高预测精度的目的。利用该方法对吉林省近期的生猪价格进行预测,实验结果表明,该方法比单个预测...
  • 多个特征互异的子序列,计算各子序列的样本熵,将熵值相近的子序列重组得到新序列,降低了原始非平稳序列对预测精度造成的影响并减小计算规模;随后综合考虑各新序列的周期特性和影响因素对每个新序列分别构建不同的...
  • 为分析并建立多因素影响预测井下机电事故发生的概率,收集了我国21个矿区的大量统计数据,对机电事故发生情况进行统计分析,得到影响机电事故率的因素包括人员素质、井下环境、机电检修频率和管理水平。分析过程中采用...
  • 对农田土壤N2O排放的主要影响因素包括土壤含水量、土壤pH值、土壤温度、土壤质地和肥料施用等)、已农田土壤N2O排放减排措施及估算模型的研究进展进行了总结分析,并指出了今后研究的重点和方向:(a)探究农田...
  • 通过对影响光伏发电量产生的因素进行分析比较,在模糊双曲正切模型的基础上,建立一种光伏发电量的短期预测模型。该模型既属于模糊模型,也属于神经...仿真结果表明,该预测模型与其他预测方法相比更高的预测精度
  • 燃气负荷预测受到社会经济、天气因素、日期类型等多种复杂因素影响,而多因素...为了验证所提出算法的有效性和预测性能,使用上海燃气数据来进行上述模型的仿真实验,结果证明相较对比方法,预测精度有了明显的提高.
  • 针对炼焦行业亟待解决的节能减排、降低成本和提高焦炭质量的问题,分析了影响焦炭质量的主要因素,选择了六项指标来...实践表明,GA优化的BP神经网络焦炭质量预测模型较好的适应性和预测精度,具有一定的实际应用价值。
  • 大学生的课程学习是提高...提出了基于成绩分布的教室座位分区划分方法和同伴影响预测结果修正方法,提高了成绩预测精度。利用真实数据集对所提出的预测模型进行了充分的实验验证,百分制成绩平均预测误差在10分以内
  • 第十九章 Matlab数学建模案例分析 图19- 52 PB风电机组长期...当然风电功率预测精度不能无限的提高风电功率受风力风速气温气压等因素影响变化没规律而现行的预测精度一方面受外界因素影响一方面受模型本身因素影响
  • 数学基础-模型准确度影响因素

    千次阅读 2018-06-06 11:30:13
    我们在运用数据科学解决问题时必须清楚的理解问题、理解数据、掌握一系列方法,...统计学习方法学习这种特征,将生成的模型用于数据的分类或预测。统计学习方法三要素包括:模型(模型集合,概率模型表示为条件概...
  • 结果表明:采用单纯的SVM预测方法,对于不同特征的样本的预测个别预测误差相对较大,其最大误差为8.11%,平均误差为4.68%,采用文中所建议的用FCM对样本分类后再进行SVM预测,预测精度有明显改善,最大误差和6.94%,平均误差...
  • 径向基函数(RBF)神经网络应用于疾病的月发病人数预测时,由于影响它的气象因素:月平均气压,月平均气温,月平均相对湿度,月平均风速,月平均降水量本身具有很大的相关性,且维数较高,RBF神经网络的预测精度会下降,针对这...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 19,207
精华内容 7,682
关键字:

影响预测精度的因素包括