"异常:元组指出了范围"在train_test_split火车一次数据试图适合预处理

0

的问题

我是想要预先处理我的数据使用的正常化。

# preprocessing
import tensorflow as tf
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
from tensorflow.keras import layers
from sklearn.compose import make_column_transformer
from sklearn.preprocessing import MinMaxScaler, OneHotEncoder
from sklearn.model_selection import train_test_split

np.set_printoptions(precision=3, suppress=True)
btc_data = pd.read_csv(
    "output.csv",
    names=["Time", "Open"])

ct = make_column_transformer(
    (MinMaxScaler(), ["Time", "Open"]),
    (OneHotEncoder(handle_unknown="ignore"), ["Time", "Open"])
)

X_btc = btc_data["Time"]
y_btc = btc_data["Open"]

X_train, X_test, y_train, y_test = train_test_split(X_btc, y_btc, test_size=0.2, random_state=62)

ct.fit(X_train)
X_train_normal = ct.transform(X_train)
X_test_normal = ct.transform(X_test)

代码上运行的一个Colab的笔记本电脑。 该数据集是从Kaple和修改是完整的Unix Timestamps和另一个列于价格的比特币开这些时间。 之后太的数据和创建一个列的变压器,我试着配合的数据。 然而,我得到的以下错误:

---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-44-f73622372111> in <module>()
     27 print(X_train.shape)
     28 
---> 29 ct.fit(X_train)
     30 X_train_normal = ct.transform(X_train)
     31 X_test_normal = ct.transform(X_test)

3 frames
/usr/local/lib/python3.7/dist-packages/sklearn/utils/__init__.py in _get_column_indices(X, key)
    387     :func:`_safe_indexing_column`.
    388     """
--> 389     n_columns = X.shape[1]
    390 
    391     key_dtype = _determine_key_type(key)

IndexError: tuple index out of range

我想知道如果这是一个形状的问题,但作为一个说明,X_train数据的形状 (2020896,).

是有件事我必须要做我的数据修复这个错误?

numpy pandas python scikit-learn
2021-11-23 19:01:34
1

最好的答案

1

你提取的X_btc作为一个大熊猫系列其是像1D阵列,则需要提取数据框(2D阵/矩阵)。 更换:

X_btc = btc_data["Time"]

有:

X_btc = btc_data[["Time"]]

提取的数据框

编辑的新的错误:

KeyError发生,因为这个变压器:

ct = make_column_transformer(
    (MinMaxScaler(), ["Time", "Open"]),
    (OneHotEncoder(handle_unknown="ignore"), ["Time", "Open"])
)

你使用 ["Time", "Open"] 列。 然而,X_btc没有列 "Open" (因为你只选择列 "Time"). 的 "Open" 是的目标签(y_btc),你不应该包括到 X_btc. 在这种情况下,你可以除去 "Open"make_column_transformer:

ct = make_column_transformer(
    (MinMaxScaler(), ["Time"]),
    (OneHotEncoder(handle_unknown="ignore"), ["Time"])
)
2021-11-23 19:54:17

这没有改变它变成一个2D阵列,但它引起了不同的错误: pastebin.com/dVRqu7ir
Khosraw Azizi

看看编辑的答案
Bartosz Mikulski

谢谢你的解释!
Khosraw Azizi

我有点丢失。 请澄清@KhosrawAzizi,你怎么尝试实现与此列变压器? OneHotEncode(大江)是分类数据,据我了解的时间含有时间戳,以及打开包含的价格。 这两个变数是连续的,但大江的设计与分类的数据。 MinMaxScaler是有点细微,因为它适用于连续的变量。 但是,我怀疑它的应用时间戳和价格。 另一件事是问题的制剂。 你想预测的价格基础上的时间戳? 你想要预测未来的价格?
Bartosz Mikulski

只是为了澄清,我正在学习我的方式通过TensorFlow科学博览会的项目。 因为现在我打过线性回归,我想尝试使用正规化转换到我的数据之间0和1。 我知道我可能不需要OneHotEncode因为我的数据不包含任何串数据。 我可能会被删除,以后。 现在,我想降低我的运行时间和损失的正常化,因为我的计划培训模型,以预测未来的价格和随后确认它们给予新的可用数据从雅虎金融's API.
Khosraw Azizi

现在,我试图找出如何将我X_train_normal到一系列使用顽固,但我运行时使用了大量的存储器,当试图将其转换。 会有打开另一个问题是一个如果我不能找出一个办法绕过它。
Khosraw Azizi

更新:删除OneHotEncode从柱变压器的固定,这一问题。
Khosraw Azizi

编辑:我提出的响应40秒后,你的更新:)运行时使用大量的存储器,因为大江(据推测). 是什么形状的报告,通过运行 X_train_normal.shape? 如果它有一个大数目在第二位,然后,它应当大江的错。 除此之外,列的变压器 transform 方法返回顽固阵列(或疏这矩阵),但没有数据框
Bartosz Mikulski

其他语言

此页面有其他语言版本

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................