首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python/Sklearn中的循环回归模型

Python/Sklearn中的循环回归模型
EN

Stack Overflow用户
提问于 2018-07-18 03:07:24
回答 1查看 849关注 0票数 0

我正在尝试在同一组输入/自变量上系统地回归两个不同的因变量(国家),并希望使用Sklearn在Python中以循环方式实现这一点。依赖变量如下所示:

            Europe  UK  Japan   USA Canada
    Jan-10  10  13  39  42  16
    Feb-10  13  16  48  51  19
    Mar-10  15  18  54  57  21
    Apr-10  12  15  45  48  18
    May-10  11  14  42  45  17

而自变量看起来像这样:

            Input 1 Input 2 Input 3 Input 4
    Jan-10  90  50  3   41
    Feb-10  95  54  5   43
    Mar-10  92  52  1   45
    Apr-10  91  60  1   49
    May-10  90  67  11  49

我发现手动回归它们+商店预测很容易(例如,在所有四个输入上都是欧洲的,然后是日本等等),但还没有想出如何编写一个单循环函数来一次性完成所有这些操作。我怀疑我可能需要使用列表/字典来存储因变量,并逐个调用它们,但我不太知道如何以Pythonic的方式编写这些变量。

单个循环的现有代码如下所示:

    x = pd.DataFrame('countryinputs.csv')
    countries = pd.DataFrame('countryoutputs.csv')
    y = countries['Europe']

    from sklearn.linear_model import LinearRegression
    regressor = LinearRegression()
    regressor.fit(X, y)

    y_pred = regressor.predict(X)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-18 04:40:11

只需迭代列名即可。然后将name传递到已定义的函数中。实际上,您可以将该过程包装在字典理解中,并传递到DataFrame构造函数中,以返回预测值的数据帧(与原始数据帧的形状相同):

X = pd.DataFrame(...)
countries = pd.DataFrame(...)

def reg_proc(label):
    y = countries[label]

    regressor = LinearRegression()
    regressor.fit(X, y)

    y_pred = regressor.predict(X)        
    return(y_pred)

pred_df = pd.DataFrame({lab: reg_proc(lab) for lab in countries.columns}, 
                       columns = countries.columns)

要使用随机的种子数据演示下面的工具是您所在的国家/地区

Data

import numpy as np
import pandas as pd

from sklearn.linear_model import LinearRegression

np.random.seed(7172018)
tools = pd.DataFrame({'pandas': np.random.uniform(0,1000,50),
                      'r': np.random.uniform(0,1000,50),
                      'julia': np.random.uniform(0,1000,50),
                      'sas': np.random.uniform(0,1000,50),
                      'spss': np.random.uniform(0,1000,50),
                      'stata': np.random.uniform(0,1000,50)
                     },  
                     columns=['pandas', 'r', 'julia', 'sas', 'spss', 'stata'])

X = pd.DataFrame({'Input1': np.random.randn(50)*10,
                  'Input2': np.random.randn(50)*10,
                  'Input3': np.random.randn(50)*10,
                  'Input4': np.random.randn(50)*10})

模型

def reg_proc(label):
    y = tools[label]

    regressor = LinearRegression()
    regressor.fit(X, y)

    y_pred = regressor.predict(X)        
    return(y_pred)

pred_df = pd.DataFrame({lab: reg_proc(lab) for lab in tools.columns}, 
                       columns = tools.columns)

print(pred_df.head(10))

#        pandas           r       julia         sas        spss       stata
# 0  547.631679  576.025733  682.390046  507.767567  246.020799  557.648181
# 1  577.334819  575.992992  280.579234  506.014191  443.044139  396.044620
# 2  430.494827  576.211105  541.096721  441.997575  386.309627  558.472179
# 3  440.662962  524.582054  406.849303  420.017656  508.701222  393.678200
# 4  588.993442  472.414081  453.815978  479.208183  389.744062  424.507541
# 5  520.215513  489.447248  670.708618  459.375294  314.008988  516.235188
# 6  515.266625  459.292370  477.485995  436.398180  446.777292  398.826234
# 7  423.930650  414.069751  629.444118  378.059735  448.760240  449.062734
# 8  549.769034  406.531405  653.557937  441.425445  348.725447  456.089921
# 9  396.826924  399.327683  717.285415  361.235709  444.830491  429.967976
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51388624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档