zoukankan      html  css  js  c++  java
  • python数据分析:回归分析(regression analysis)

    import numpy as np
    import pandas as pd
    from sklearn.linear_model import BayesianRidge, LinearRegression, ElasticNet
    from sklearn.svm import SVR
    from sklearn.ensemble.gradient_boosting import GradientBoostingRegressor   # 集成算法
    from sklearn.model_selection import cross_val_score    # 交叉验证
    from sklearn.metrics import explained_variance_score, mean_absolute_error, mean_squared_error, r2_score  
    import matplotlib.pyplot as plt
    import seaborn as sns
    %matplotlib inline
    
    # 数据导入
    df = pd.read_csv('https://raw.githubusercontent.com/ffzs/dataset/master/boston/train.csv', 
                     usecols=['lstat', 'indus', 'nox', 'rm', 'medv'])
    
    # 可视化数据关系
    sns.set(style='whitegrid', context='notebook')   #style控制默认样式,context控制着默认的画幅大小
    sns.pairplot(df, size=2)
    plt.savefig('x.png')
    # 相关度
    corr = df.corr()
    # 相关度热力图
    sns.heatmap(corr, cmap='GnBu_r', square=True, annot=True)
    plt.savefig('xx.png')
    # 自变量
    X = df[['lstat', 'rm']].values
    # 因变量
    y = df[df.columns[-1]].values
    
    # 设置交叉验证次数
    n_folds = 5
    
    # 建立贝叶斯岭回归模型
    br_model = BayesianRidge()
    
    # 普通线性回归
    lr_model = LinearRegression()
    
    # 弹性网络回归模型
    etc_model = ElasticNet()
    
    # 支持向量机回归
    svr_model = SVR()
    
    # 梯度增强回归模型对象
    gbr_model = GradientBoostingRegressor()
    
    # 不同模型的名称列表
    model_names = ['BayesianRidge', 'LinearRegression', 'ElasticNet', 'SVR', 'GBR']
    # 不同回归模型
    model_dic = [br_model, lr_model, etc_model, svr_model, gbr_model]
    # 交叉验证结果
    cv_score_list = []
    # 各个回归模型预测的y值列表
    pre_y_list = []
    
    # 读出每个回归模型对象
    for model in model_dic:
        # 将每个回归模型导入交叉检验
        scores = cross_val_score(model, X, y, cv=n_folds)
        # 将交叉检验结果存入结果列表
        cv_score_list.append(scores)
        # 将回归训练中得到的预测y存入列表
        pre_y_list.append(model.fit(X, y).predict(X))
    ### 模型效果指标评估 ###
    # 获取样本量,特征数
    n_sample, n_feature = X.shape
    # 回归评估指标对象列表
    model_metrics_name = [explained_variance_score, mean_absolute_error, mean_squared_error, r2_score]
    # 回归评估指标列表
    model_metrics_list = []
    # 循环每个模型的预测结果
    for pre_y in pre_y_list:
        # 临时结果列表
        tmp_list = []
        # 循环每个指标对象
        for mdl in model_metrics_name:
            # 计算每个回归指标结果
            tmp_score = mdl(y, pre_y)
            # 将结果存入临时列表
            tmp_list.append(tmp_score)
        # 将结果存入回归评估列表
        model_metrics_list.append(tmp_list)
    df_score = pd.DataFrame(cv_score_list, index=model_names)
    df_met = pd.DataFrame(model_metrics_list, index=model_names, columns=['ev', 'mae', 'mse', 'r2'])
    
    # 各个交叉验证的结果
    df_score
    # 各种评估结果
    df_met
    ### 可视化 ###
    # 创建画布
    plt.figure(figsize=(9, 6))
    # 颜色列表
    color_list = ['r', 'g', 'b', 'y', 'c']
    # 循环结果画图
    for i, pre_y in enumerate(pre_y_list):
        # 子网络
        plt.subplot(2, 3, i+1)
        # 画出原始值的曲线
        plt.plot(np.arange(X.shape[0]), y, color='k', label='y')
        # 画出各个模型的预测线
        plt.plot(np.arange(X.shape[0]), pre_y, color_list[i], label=model_names[i])
        plt.title(model_names[i])
        plt.legend(loc='lower left')
    plt.savefig('xxx.png')
    plt.show()
  • 相关阅读:
    为蓝桥杯准备
    Java里子类调用父类构造方法问题
    boost库的Singleton的实现以及static成员的初始化问题
    VS2005调试小记
    <转载>程序员每天该做的事
    vs2005, 2008 使用了未初始化的msg变量
    转载 vs2005 快捷键大全
    VS2005右键点击转到定义后出现“未定义符号”的提示及其解决
    软件工程配置规范(VC2005) 第二版(转载)
    匆忙赶路的时候别忘了适时停下来回头看看
  • 原文地址:https://www.cnblogs.com/yukit/p/13633899.html
Copyright © 2011-2022 走看看