《python数据分析与挖掘实战》(第2版)代码清单6-5,6-6的一点问题《python数据分析与挖掘实战》(第2版)代码清单6-5,6-6的一点问题

《python数据分析与挖掘实战》(第2版)代码清单6-5,6-6的一点问题

前述

本书第六章主要讲解的是财政收入影响因素分析及预测,首先是在前人的研究基础上提出了13种可能相关的属性。由于涉及到了13个变量,因此对这些变量之间又进行了相关性分析。

  1. 首先,pearson相关性分析表明许多属性之间高相关,诸如在岗职工工资总额和社会消费品零售总额相关系数为1。

  2. 基于Lasso回归方法来进行降维,通过构造惩罚函数使一些属性前的系数为0,从而实现降维。利用此方法筛选出了8个属性。

  3. 利用灰色预测算法对2014,2015年度的8个属性值进行预测。

  4. 利用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)

结果

地方财政收入真实值与预测值对比图

  • 9
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值