《python数据分析与挖掘实战》(第2版)代码清单6-5,6-6的一点问题
前述
本书第六章主要讲解的是财政收入影响因素分析及预测,首先是在前人的研究基础上提出了13种可能相关的属性。由于涉及到了13个变量,因此对这些变量之间又进行了相关性分析。
- 首先,pearson相关性分析表明许多属性之间高相关,诸如在岗职工工资总额和社会消费品零售总额相关系数为1。
- 基于Lasso回归方法来进行降维,通过构造惩罚函数使一些属性前的系数为0,从而实现降维。利用此方法筛选出了8个属性。
- 利用灰色预测算法对2014,2015年度的8个属性值进行预测。
- 利用SVR算法(SVM的思想用于回归分析),代入上步计算出的参数值得到结果。
问题描述
代码清单6-6,构建支持向量回归预测模型如下
# 代码6-6
import matplotlib.pyplot as plt
from sklearn.svm import LinearSVR
inputfile = '../tmp/new_reg_data_GM11.xls' # 灰色预测后保存的路径
data = pd.read_excel(inputfile) # 读取数据
feature = ['x1', 'x3', 'x4', 'x5', 'x6', 'x7', 'x8', '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].to_numpy() # 属性数据
y_train = data_train['y'].to_numpy() # 标签数据
linearsvr = LinearSVR() # 调用LinearSVR()函数
linearsvr.fit(x_train,y_train)
x = ((data[feature] - data_mean[feature])/data_std[feature]).to_numpy() # 预测,并还原结果。
data[u'y_pred'] = linearsvr.predict(x) * data_std['y'] + data_mean['y']
outputfile = '../tmp/new_reg_data_GM11_revenue.xls' # SVR预测后保存的结果
data.to_excel(outputfile)
print('真实值与预测值分别为:\n',data[['y','y_pred']])
fig = data[['y','y_pred']].plot(subplots = True, style=['b-o','r-*']) # 画出预测结果图
plt.show()
第一点是该程序清单中很多语句都用到了
x_train = data_train[feature].as_matrix()
报错代码:AttributeError: ‘DataFrame’ object has no attribute ‘as_matrix’
此博客很好的解释了这一问题,即可以将该语句改成
x_train = data_train[feature].to_numpy()
第二点报错在第9句
KeyError: “None of [Int64Index([1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,\n 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013],\n dtype=‘int64’)] are in the [index]”
主要原因是data本身没有设置index,而loc命令找不到相应的行,在之前加一句
data.index = range(1994,2016)