灰色预测模型(GM) 神经网络 指数平滑 多项式拟合 线性回归 各种预测模型dai做,写完整预测报告

灰色预测模型(GM) 神经网络 指数平滑 多项式拟合 线性回归 各种预测模型dai做,写完整预测报告 灰色预测模型(GM) 神经网络 指数平滑 多项式拟合 线性回归 各种预测模型dai做写完整预测报告可提供图表与代码预测模型的世界里工具比超市货架上的泡面种类还多。今天咱们扒开几个常用模型的底裤看看到底怎么玩转这些数学魔术。先上个全家福线性回归、指数平滑、灰色预测、神经网络、多项式拟合最后整点硬核代码演示。先拿线性回归开刀。这玩意儿就像炒菜放盐基础但容易翻车。看这段代码import numpy as np from sklearn.linear_model import LinearRegression import matplotlib.pyplot as plt x np.array([i for i in range(20)]).reshape(-1,1) y 3*x.ravel() np.random.normal(0, 5, 20) model LinearRegression() model.fit(x, y) pred model.predict([[20],[21]]) plt.scatter(x, y, colorblack) plt.plot(np.append(x, [[20],[21]]), np.append(model.predict(x), pred), colorblue, linewidth3) plt.title(线性回归预测) plt.show()这段代码的关键在数据变形。reshape(-1,1)把一维数组变成二维矩阵这是sklearn的强制要求。预测时直接塞进新数据点就能看到未来走势。注意随机噪声的设置标准差5让数据点看起来更真实避免拟合出完美直线的尴尬。接着是时间序列老司机指数平滑。Holt-Winters三剑客参数玩得溜预测效果能上天from statsmodels.tsa.holtwinters import ExponentialSmoothing # 生成带趋势的数据 data [i*0.5 np.random.randn()*2 for i in range(30)] model ExponentialSmoothing(data, trendadd, seasonalNone).fit() forecast model.forecast(5) plt.plot(data, label真实数据) plt.plot(model.fittedvalues, label拟合值) plt.plot(range(30,35), forecast, label预测值, linestyle--) plt.legend() plt.show()trendadd参数指定加法趋势适合数据波动幅度稳定的场景。fittedvalues属性藏着模型对历史数据的拟合结果和原始数据一对比就能看出平滑效果。注意季节性参数设为None是因为我们的假数据没做季节特征。灰色预测模型(GM) 神经网络 指数平滑 多项式拟合 线性回归 各种预测模型dai做写完整预测报告可提供图表与代码灰色预测GM(1,1)是个怪胎专治小样本疑难杂症。来看怎么用python调教它def GM11(data, predict_num3): # 累加生成 AGO np.cumsum(data) # 构造矩阵B B np.array([-0.5*(AGO[i] AGO[i1]) for i in range(len(data)-1)]).reshape(-1,1) Y data[1:].reshape(-1,1) # 计算参数 u np.dot(np.linalg.inv(np.dot(B.T, B)), np.dot(B.T, Y)) a, b u[0][0], u[1][0] # 预测方程 pred [(data[0]-b/a)*np.exp(-a*k) b/a for k in range(len(data)predict_num)] # 累减还原 return [pred[i1] - pred[i] for i in range(len(pred)-1)] origin [12.8, 15.4, 16.7, 17.9, 19.6] result GM11(origin, 2) print(f未来两期预测值{result[-2:]})这个实现里有两个骚操作累加生成把原始数据转化成单调递增序列累减还原又把结果打回原形。参数计算用最小二乘法核心是那个微分方程的解。注意指数项里的k值控制预测步长适合做短期预测。神经网络登场时总要带点神秘感。用keras搭个简单时序预测网络from keras.models import Sequential from keras.layers import LSTM, Dense # 数据预处理 def create_dataset(data, look_back3): X, Y [], [] for i in range(len(data)-look_back): X.append(data[i:(ilook_back)]) Y.append(data[ilook_back]) return np.array(X), np.array(Y) data np.sin(np.arange(0, 20, 0.1)) * 10 np.random.normal(0, 0.5, 200) X, y create_dataset(data, look_back5) X X.reshape(X.shape[0], X.shape[1], 1) model Sequential() model.add(LSTM(32, input_shape(5,1))) model.add(Dense(1)) model.compile(lossmse, optimizeradam) model.fit(X, y, epochs50, batch_size16, verbose0) # 预测未来5步 last_seq data[-5:].reshape(1,5,1) predictions [] for _ in range(5): pred model.predict(last_seq)[0,0] predictions.append(pred) last_seq np.append(last_seq[:,1:,:], [[[pred]]], axis1)LSTM层的记忆功能是时序预测的核心32个神经元就像32个记忆抽屉。注意预测时的滚雪球操作——每次预测结果都作为下一次输入的部分数据这种递归预测容易产生误差累积适合短期预测。最后来个多项式拟合调节下气氛from sklearn.preprocessing import PolynomialFeatures x np.arange(0, 10, 0.5) y 0.3*x**3 - 2*x**2 4*x np.random.normal(0, 3, 20) poly PolynomialFeatures(degree3) x_poly poly.fit_transform(x.reshape(-1,1)) model LinearRegression() model.fit(x_poly, y) xx np.linspace(0,12,50) xx_poly poly.transform(xx.reshape(-1,1)) pred model.predict(xx_poly) plt.scatter(x, y, colorgray) plt.plot(xx, pred, colorred, linewidth2) plt.axvline(x10, colorgreen, linestyle--) plt.title(多项式外推预警)degree3指定三次多项式这个参数要是手抖调到10立马给你画出心电图。绿色虚线右侧是外推区域多项式拟合在外推时容易放飞自我这个案例提醒我们模型装逼过头预测容易扑街。走完这趟模型之旅该明白没有银弹模型。数据规律明显时线性回归能打需要捕捉趋势选指数平滑小样本难题找灰色预测复杂模式上神经网络曲线波动试试多项式。工具人工具箱里多备几把刷子面对不同场景才能游刃有余。