《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)
结果

本文档介绍了在使用Python进行数据分析时遇到的问题,具体是关于Lasso回归进行特征选择和使用支持向量回归(SVR)进行预测的代码。在Lasso回归中,通过惩罚函数减少了特征维度,选取了8个关键属性。然后使用灰色预测算法预测2014年和2015年的数据。在构建SVR模型时,代码出现了两个错误:1) `as_matrix`方法已被弃用,已替换为`to_numpy`;2) 数据框未设置索引导致`loc`操作失败,解决方案是设置数据框的索引。修复这两个问题后,模型成功建立并绘制了预测结果图。
1万+

被折叠的 条评论
为什么被折叠?



