如何从元素列表开始进行回归

Posted

技术标签:

【中文标题】如何从元素列表开始进行回归【英文标题】:How to do a regression starting from a list of list of elements 【发布时间】:2019-04-26 20:35:13 【问题描述】:

我正在尝试在 python 中运行回归。我有一个看起来像这样的列表(更大列表的一部分):

[[1307622004, 0.0, 339.093, 130.132], 
[10562004, 0.0, 206.818, 62.111], 
[127882004, 0.0, 994.624, 360.497], 
[63702004, 0.0, 89.653, 19.103], 
[655902004, 0.0, 199.613, 83.296], 
[76482004, 0.0, 1891.0, 508.0], 
[16332004, 0.0, 160.344, 25.446], 
[294352004, 0.0, 67.115, 22.646], 
[615922004, 0.0, 134.501, 41.01], 
[1212572004, 0.0, 232.616, 5.086], 
[658992004, 0.0, 189.155, 7.906], 
[61962004, 0.0, 806.7, 164.1], 
[121712004, 0.0, 1147.532, 271.014], 
[1250142004, 0.0, 29.556, -5.721], 
[148082004, 0.0, 22.05, -17.655]]

看起来像这样,因为每一行都是我从中导入数据的 CSV 文件中的一行。从这一点开始,请将列表中的元素视为变量列,以更好地理解我要回归的内容。例如,列表中的前 4 个列表看起来就像变成了列(我不需要将变量变成列,我已经这样做了):

1307622004     0.0    339.093    130.132
10562004       0.0    206.818    62.111
127882004      0.0    994.624    360.497

继续我的示例,我希望第一列是我的因变量,而所有其他列都是自变量。 我尝试使用 numpy 将列表转换为数组,然后应用 sklearn 回归。下面是一段代码sn-p:

重要提示: list_of_lists 包含许多类似于我在问题开头提供的列表的元素。

from sklearn import datasets ## imports datasets from scikit-learn
from sklearn.linear_model import LinearRegression
import numpy as np

for item in list_of_lists:
    test_array = np.asarray(item)
    # print(test_array)
    X, Y = test_array[:, 0], test_array[:, 1]
    mdl = LinearRegression().fit(X, Y)
    scores = LinearRegression.score(X, Y)
    print('--------------------------')

问题是我得到以下输出:

如果您的数据具有单个特征,则使用 array.reshape(-1, 1) 重塑您的数据,如果数据包含单个样本,则使用 array.reshape(1, -1)。

我对 python 和 python 中数组、矩阵的使用非常陌生,所以我不太明白发生了什么。

【问题讨论】:

【参考方案1】:

我不太确定您为什么要遍历列表。更好的做法是让您的回归适合您的数组。此外,如果您希望第一列成为您的响应(因)变量,而所有其余的都是预测(独立)变量,您需要更改 XY 的定义,因为你有它,您将第一列作为预测变量,将第二列作为响应:

test_array = np.asarray(list_of_lists)
# Set independent variables to be all columns after first, dependent to first col
X, Y = test_array[:, 1:], test_array[:, 0]

# Create a regressor 
reg = LinearRegression()
# Fit it to your data   
mdl = reg.fit(X, Y)
# Exctract the R^2
scores = reg.score(X,Y)

【讨论】:

感谢您的回答。现在我了解正在发生的事情以及我如何才能解决问题。太棒了! 很高兴我能帮上忙 :)

以上是关于如何从元素列表开始进行回归的主要内容,如果未能解决你的问题,请参考以下文章

如何在python列表中查找某个元素的索引

如何从数组列表中提取项目并对其进行计数,以便从元素及其总计数(正确)在 Java 中创建映射?

列表查找及二分查找

算法----列表查找以及列表排序

列表查找以及二分查找

列表和元组