栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

预测模型算法

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

预测模型算法

预测模型

1、灰色预测
适用范围:它是一种基于小样本数据进行预测的模型。灰色系统理论它主要针对时间序列少、统计数据少、信息不完全的分析和建模。

灰色系统:我们将信息完全未确定的系统为黑色系统,信息完全确定的为白色系统,既有已知信息又有未知信息的为灰色系统

灰色系统是对离散序列建立的微分方程,它通过对原始数据的整理来寻求其变化规律,也就是灰色序列的生产。

灰色生成:累加生成、累减生成、均值生成、级比生成

1数据检验
计算数列的级比,所有级比都落在可覆盖区间(e-2/n+1,e2/n+1)内,则可以建立GM(1,1)模型

2构建模型
生成x1的邻值生成序列z1,定义模型为:

d(k)+az1(k)=b

(a为发展系数,z1(k)为白化背景值,b为灰作用量)

1.1预测检验
残差检验:

s(k)=x0(k)-x^0(k)/x0(k)

所有的|s(k)|<0.1,认为达到较高的要求,

|s(k)|<0.2认为达到一般要求

级比偏差值检验:

p(k)=1-(1-0.5a)/(1+0.5a)*s(k)/s^(k)

|p(k)|<0.1认为达到较高要求

|p(k)|<0.2认为达到一般要求

2、马尔可夫链

状态空间从一个状态到另一个状态转换的随机过程。它必须满足两个条件:

1 任意时刻可以用有限个可能状态之一描述

2 无后效性

状态向量:x=(x1,x2,x3,…xk)

各个元素分别表示第几次观测时第i个状态的概率

系统的可能状态为k个

p 转移概率矩阵

x(n+1)=x(0)P(n)

3、线性回归

线性回归在因变量和一个或多个自变量之间建立一种关系 a为截距,b表示斜率,然后衡量自变量与因变量的相关程度 较多适用于数据多、计算简单。

其表达形式为:y=w’x+e.其中e为误差服从均值为0的正态分布

最小二乘法:以残差平方和最小确定直线的位置

调用python的sklearn可以实现线性回归算法,训练模型,从而求出截距和斜率


//灰色预测
import numpy as np
import pandas as pd
def ratio(x0):
    n=len(x0)
    ratio=[x0[i]/x0[i+1] for i in range(n-1)]
    print(f"级比:{ratio}")
    min_r=min(ratio)
    max_r=max(ratio)
    r=[np.exp(-2/(n+2)),np.exp(2/(n+2))]
    print(r)
    if min_r >= r[0] and max_r <= r[1]:
        print("级比满足要求")
    else:
        print("级比超过灰色模型预测范围")
    return ratio,r
def predict(x0):
    n=len(x0)
    x1=np.cumsum(x0) #累加序列
    z=(x1[:len(x1)-1]+x1[1:])/2 
    z1=z.reshape(len(z),1)
    B=np.append(-z1,np.ones_like(z1),axis=1)
    Y=x0[1:].reshape(n-1,1)
    u=np.dot(np.dot(np.linalg.inv(np.dot(B.T,B)),B.T),Y)
    x12=np.zeros(n)
    x02=np.zeros(n)
    x12[0]=x02[0]=x0[0]
    for i in range(1,n):
        x12[i]=(x0[0]-u[1]/u[0])*np.exp(-u[0]*i)+u[1]/u[0]
    for i in range(1,n):
        x02[i]=x12[i]-x12[i-1]
    print(f"原始值:{x0}")
    print(f"预测值:{x02}")
    return x02,x12,u
def accuracy(x0,x02,ratio,u):
    n=len(x0)
    deltas=[]
    for i in range(n):
        eps=x0[i]-x02[i]
        delta=abs(eps/x0[i])
        deltas.append(delta)
    print(f"残差:{deltas}")
    ratio2=[x02[i]/x02[i+1] for i in range(n-1)]
    rhos=[]
    for i in range(n-1):
        rho=1-(1-0.5*u[0]/u[1])/(1+0.5*u[0]/u[1])*(ratio[i]/ratio2[i])
        rhos.append(rho)
    print(f"级比偏差:{rhos}")
if __name__=='__main__':
    x0=np.array([71.1,72.4,72.4,72.1,71.4,72.0,71.6])
    
    ratio,r=ratio(x0)
    x02,x12,u=predict(x0)
    accuracy(x0,x02,ratio,u)
//马尔可夫链
import numpy as np
import random as rm
def markov():
    start=np.array([1,0])
    trans=np.array([[0.286,0.714],[0.455,0.545]])
    restmp=start
    for i in range(15):
        res=np.dot(restmp,trans)
        print(res)
        restmp=res
markov()
//线性回归
import pandas as pd
import numpy as np
from sklearn.linear_model import  LinearRegression
Model=LinearRegression()
data={"学习时间":[0.50,0.75,1.00,1.25,1.50,1.75,2.00,2.25,2.50],"成绩":[10,20,13,43,20,22,33,50,62]}
df=pd.Dataframe(data)
x=df['学习时间']
y=df['成绩']
r=df.corr()
print(f"相关系数:{r}")
x=x.values.reshape(-1,1)
y=y.values.reshape(-1,1)
Model.fit(x,y)
a=Model.intercept_[0]
print(f"截距:{a}")
b=Model.coef_[0][0]
print(f"斜率:{b}")
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/618734.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号