使用 Python 格式化和切片数组 - 为线性回归准备数据

Posted

技术标签:

【中文标题】使用 Python 格式化和切片数组 - 为线性回归准备数据【英文标题】:Format and slice arrays with Python - prepare data for linear regression 【发布时间】:2018-07-17 16:21:19 【问题描述】:

我知道这是一个非常基本的问题,但我在正确格式化元组方面有点挣扎。 我有一个 csv 文件,其标题是:

id   x1  x2  x3  y1 y2
 1   23  45  31  2  5
 2   34  5   21  3  12
 3   234 4   26  4  20
....

我正在构建一个多目标线性回归模型(我将使用来自 scikit learn 的 MultiOutputRegressor),所以我想将数据拆分为 X(然​​后将其拆分为训练集和测试集)和目标 Y。我导入像这样的csv:

with open('data.csv', newline='') as csvfile:
    data = list(csv.reader(csvfile))

所以我得到了一个数组列表。但是如何访问数组中的元素呢?我的 X 集将是字段 x1、x2、x3 的所有值(然后我会选择一些 X 行来构建 Xtrain);我的 Y 集将是 y1,y2 的所有值。 我的最终目标是这样的:

X= [[23 45 31]
    [34 5 21]
    [234 4 26]
    ...]

Y=[[2,5]
   [3,12]
   [4,20] 
   ...]

我怎样才能做到这一点? 或者:如何将我所说的结构化数据分组为稀疏矩阵,这是 scikit learn 的线性回归函数的有效参数?

【问题讨论】:

你看过 pandas(和 numpy)吗? 【参考方案1】:

您可以使用 numpy 操作数组:

import numpy as np
data = np.array(data)    # Transform list to numpy array
data = data[1:,]         # Keep all lines except the header (first line)
y_col_index = 3
X = data[:,:y_col_index] # Select the first columns
Y = data[:,y_col_index:] # Select the last columns

【讨论】:

【参考方案2】:

Victor Daplasse 的回答可能更直截了当,但我总是更喜欢使用 pandas 来读取和预处理 csv 文件。

import pandas as pd
import numpy as np

data = pd.read_csv('data.csv')
X = np.array(data[['x1', 'x2', 'x3']])
Y = np.array(data[['y1', 'y2']])

【讨论】:

以上是关于使用 Python 格式化和切片数组 - 为线性回归准备数据的主要内容,如果未能解决你的问题,请参考以下文章

python——入门系列索引与切片

为 Statsmodels 线性回归格式化数据

在 Python 中使用循环对数组进行切片并为每个小数组赋予特定的名称

python 数组的常识操作和切片

学习NumPy全套代码超详细基本操作数据类型数组运算复制和试图索引切片和迭代形状操作通用函数线性代数

对比 Python 原生切片,讲述 Numpy 数组切片!