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

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

结果

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值