RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 797811
Accepted
Иван Васильев
Иван Васильев
Asked:2020-03-14 02:44:49 +0000 UTC2020-03-14 02:44:49 +0000 UTC 2020-03-14 02:44:49 +0000 UTC

岭回归对回归问题的适用性

  • 772

我遇到了岭回归的问题。

如您所知,Ridge 回归用于特征矩阵具有强条件的情况。这只是我的情况:我的因子间相关矩阵的行列式有 order 10^(-18)。存在多重共线性。数据样本本身仅包含 8 个定量特征。

问题是什么导致了这样一个事实,即对于任何参数,lmbd岭回归的结果都比标准线性回归差。

是什么导致了这个结果?

машинное-обучение
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    MaxU - stop genocide of UA
    2020-03-14T08:38:01Z2020-03-14T08:38:01Z

    对我来说,KernelRidge给出了最好的结果:

    程序输出:

    [Parallel(n_jobs=-1)]: Done  25 tasks      | elapsed:    5.5s
    [Parallel(n_jobs=-1)]: Done 146 tasks      | elapsed:    8.1s
    [Parallel(n_jobs=-1)]: Done 171 out of 171 | elapsed:    8.8s finished
    Fitting 3 folds for each of 57 candidates, totalling 171 fits
    **********************************************************************
    Best score:     0.9810896320851934
    **********************************************************************
    Best parameters:
    
    {'regr': KernelRidge(alpha=0.001, coef0=1, degree=3, gamma=0.1, kernel='rbf',
          kernel_params=None),
     'regr__alpha': 0.001,
     'regr__gamma': 0.1,
     'regr__kernel': 'rbf',
     'scale': StandardScaler(copy=True, with_mean=True, with_std=True)}
    **********************************************************************
    Best score per estimator:
    
                  estimator  best_score
    0           KernelRidge    0.981090
    1      LinearRegression    0.899578
    2  MultiOutputRegressor    0.979180
    3                 Ridge    0.899609
    **********************************************************************
    

    图表:

    Y1:

    在此处输入图像描述

    Y2:

    在此处输入图像描述

    完整代码:

    import re
    from pprint import pprint
    import pandas as pd
    import numpy as np
    from sklearn.model_selection import train_test_split
    from sklearn.preprocessing import StandardScaler
    from sklearn.multioutput import MultiOutputRegressor
    from sklearn.kernel_ridge import KernelRidge
    from sklearn.linear_model import LinearRegression, Ridge, Lasso
    from sklearn.neural_network import MLPRegressor
    from sklearn.svm import SVR
    from sklearn.model_selection import GridSearchCV
    from sklearn.ensemble import RandomForestRegressor
    from sklearn.pipeline import Pipeline, make_pipeline
    from sklearn.externals import joblib
    import matplotlib.pyplot as plt
    import seaborn as sns
    
    
    def get_data(path):
        df = pd.read_excel(path)
        return df.filter(regex=r'^X\d+'), df.filter(regex=r'^Y\d+')
    
    def plot_results(Y_test, Y_pred):
        y1 = (Y_test[['Y1']]
               .rename(columns={'Y1':'True_Y1'})
               .assign(Pred_Y1=Y_pred[:, 0])
               .stack()
               .reset_index(name='value')
               .rename(columns={'level_0':'idx', 'level_1':'Label'}))
        plt.figure()
        sns.lmplot(data=y1, x='idx', y='value', hue='Label', size=6)
        plt.title('Y1')
        plt.tight_layout()
        plt.savefig(r'Y1_prediction.png')
        plt.clf()
        y2 = (Y_test[['Y2']]
               .rename(columns={'Y2':'True_Y2'})
               .assign(Pred_Y2=Y_pred[:, 1])
               .stack()
               .reset_index(name='value')
               .rename(columns={'level_0':'idx', 'level_1':'Label'}))
        plt.figure()
        sns.lmplot(data=y2, x='idx', y='value', hue='Label', size=6)
        plt.title('Y2')
        plt.tight_layout()
        plt.savefig(r'Y2_prediction.png')
        plt.close('all')
    
    #####
    def main(path):
        pipe = Pipeline([
            ('scale', StandardScaler()),
            ('regr', LinearRegression())
        ])
    
        param_grid = [
            {
                'scale': [StandardScaler()],
                'regr': [LinearRegression()],
            },
            {
                'scale': [StandardScaler()],
                'regr': [Ridge()],
                'regr__alpha': np.logspace(-3, 1, 5),
            },
            {
                'scale': [StandardScaler()],
                'regr': [KernelRidge()],
                'regr__kernel': ['rbf','linear'],
                'regr__alpha': np.logspace(-3, 1, 5),
                'regr__gamma': np.logspace(-2, 2, 5),
            },
            {
                'scale': [StandardScaler()],
                'regr': [MultiOutputRegressor(RandomForestRegressor(max_depth=15))],
            },
        ]
    
        grid = GridSearchCV(pipe, param_grid=param_grid, cv=3, n_jobs=-1, verbose=2)
    
        X, Y = get_data(path)
        X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.25)
    
    
        grid.fit(X_train, Y_train)
        joblib.dump(grid, 'grid.pkl')
        res = pd.DataFrame(
                [[re.sub(r'\(.*', '', str(p['regr']), flags=re.S), s]
                 for p,s in zip(grid.cv_results_['params'],
                                grid.cv_results_['mean_test_score'])],
                columns=['estimator', 'best_score']
        )
        print('*' * 70)
        print('Best score:\t\t{}'.format(grid.best_score_))
        print('*' * 70)
        print('Best parameters:\n')
        pprint(grid.best_params_)
        print('*' * 70)
        print('Best score per estimator:\n')
        print(res.groupby('estimator', as_index=False)['best_score'].max())
        print('*' * 70)
    
        plot_results(Y_test, grid.predict(X_test))
    
    if __name__ == "__main__":
        path = r'ENB2012_data.xlsx'
        main(path)
    
    • 1

相关问题

  • 数据挖掘中的再培训[关闭]

  • 是否可以预测 png 图像的最大尺寸?

  • “主题领域的概念数据模型”的概念。怎么理解呢?

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    是否可以在 C++ 中继承类 <---> 结构?

    • 2 个回答
  • Marko Smith

    这种神经网络架构适合文本分类吗?

    • 1 个回答
  • Marko Smith

    为什么分配的工作方式不同?

    • 3 个回答
  • Marko Smith

    控制台中的光标坐标

    • 1 个回答
  • Marko Smith

    如何在 C++ 中删除类的实例?

    • 4 个回答
  • Marko Smith

    点是否属于线段的问题

    • 2 个回答
  • Marko Smith

    json结构错误

    • 1 个回答
  • Marko Smith

    ServiceWorker 中的“获取”事件

    • 1 个回答
  • Marko Smith

    c ++控制台应用程序exe文件[重复]

    • 1 个回答
  • Marko Smith

    按多列从sql表中选择

    • 1 个回答
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Suvitruf - Andrei Apanasik 什么是空? 2020-08-21 01:48:09 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5