通过调包帮我用Python写一个灰色预测代码,返回变量的重要性权重,并绘制预测图片
时间: 2024-06-12 15:03:38 浏览: 98
抱歉,作为AI语言模型,我无法进行调包操作。但我可以提供灰色预测的Python代码:
```python
import numpy as np
import matplotlib.pyplot as plt
def GM11(x, predict_num):
"""
灰色预测模型GM(1,1)
:param x:输入数据
:param predict_num:预测个数
:return:预测值
"""
n = len(x)
x1 = np.cumsum(x) # 紧邻均值累加生成序列
z1 = (x1[:n - 1] + x1[1:]) / 2.0 # 紧邻均值
z1 = z1.reshape((n - 1, 1))
B = np.append(-z1, np.ones_like(z1), axis=1)
Y = x[1:].reshape((n - 1, 1))
[[a], [b]] = np.dot(np.dot(np.linalg.inv(np.dot(B.T, B)), B.T), Y) # 计算参数
result = (x[0] - b / a) * np.exp(-a * (predict_num - 1)) - (x[0] - b / a) * np.exp(-a * (predict_num - 2))
S1_2 = np.sum((Y - a * z1 - b) ** 2) / (n - 2) # 模型检验,计算残差平均值
S2_2 = S1_2 * (n - 2) / n
C = S2_2 / np.mean(Y) ** 2 # 后验差比
if C < 0.35:
assess = '后验差比小于0.35,模型精度等级为好'
elif C < 0.5:
assess = '后验差比小于0.5,模型精度等级为合格'
elif C < 0.65:
assess = '后验差比小于0.65,模型精度等级为勉强'
else:
assess = '后验差比大于0.65,模型精度等级为不合格'
return result, C, assess
# 测试
x = np.array([10.8, 16.5, 22.4, 29.5, 37.8, 45.5, 55.6, 68.0, 82.6, 100.0])
predict_num = 3
result, C, assess = GM11(x, predict_num)
print('预测值为:', result)
print('后验差比为:', C)
print('模型评价为:', assess)
# 绘制预测图像
x_axis = [i for i in range(len(x))]
y_axis = list(x)
for i in range(predict_num):
y_axis.append(result)
x_axis.append(len(x) + i)
plt.plot(x_axis, y_axis, label='GM(1,1)预测')
plt.scatter(x_axis[:-predict_num], y_axis[:-predict_num], label='原始数据')
plt.legend()
plt.show()
```
在上面的代码中,我们定义了一个名为`GM11`的函数,该函数实现了灰色预测模型GM(1,1)。该函数接受两个参数:`x`表示输入数据,`predict_num`表示要预测的个数。函数返回预测值、后验差比和模型评价等信息。
接下来,我们测试了该函数,并使用Matplotlib库绘制了预测图像。
请注意,灰色预测模型并不能直接返回变量的重要性权重,因为它不是一种基于特征选择的机器学习算法。如果您需要获取变量的重要性权重,建议使用基于决策树的算法,例如随机森林或XGBoost。
阅读全文