"IndexError: tuple index mimo rozsah" na train_test_split vlak data, jakmile se snaží, aby se vešly pro předzpracování

0

Otázka

Snažil jsem se předem zpracovat data pomocí normalizace.

# 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)

Kód běží na Colab notebook. Dataset je z Kaple a je upraven tak, aby být plný Unix časová Razítka a další sloupce pro ceny Bitcoinu na otevřít v těch dobách. Poté, co je přesně dat a vytvoření sloupce transformátor, snažil jsem se montáží data. Nicméně, jsem se následující chybová zpráva:

---------------------------------------------------------------------------
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

Já jsem přemýšlel, jestli to je tvar záležitost, ale jako vědomí, X_train dat je tvaru (2020896,).

Je tam něco, co musím udělat s mé údaje opravit tuto chybu?

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

Nejlepší odpověď

1

Jste extrahovali X_btc jako Pandy Série, která je jako 1D pole, je třeba extrahovat Datovém (2D pole/matici). Nahradit:

X_btc = btc_data["Time"]

s:

X_btc = btc_data[["Time"]]

extrahovat Datovém

Upravit pro novou chybu:

KeyError se stane, protože tento transformátor:

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

Používáte ["Time", "Open"] sloupce. Nicméně, X_btc nemá žádné sloupce "Open" (jak si vybrat jen sloupce "Time"). Na "Open" je cílové označení (y_btc) a ty by se neměla zahrnout do X_btc. V tomto případě, můžete odstranit "Open" z make_column_transformer:

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

Změnilo se to do 2D pole, ale to způsobilo různé chyby: pastebin.com/dVRqu7ir
Khosraw Azizi

Viz edit v odpověď
Bartosz Mikulski

Díky za vysvětlení!
Khosraw Azizi

Já jsem se trochu ztratil. Prosím, objasnit @KhosrawAzizi , co se snažíte dosáhnout s tímto sloupec transformátor? OneHotEncode (OHE) je pro kategoriální data, a jak jsem se pochopit Čas obsahuje časová razítka, a Otevřete obsahuje ceny. Obě proměnné jsou spojité, ale OHE je navržen tak, aby pracovat s kategoriální data. MinMaxScaler je poněkud v pořádku, protože to pracuje s kontinuální proměnné. Nicméně, pochybuji, že by měly být použity pro časové značky a ceny. Další věc je formulace problému. Chcete se předvídat cenu na základě časové razítko? Chcete předpovídat budoucí ceny?
Bartosz Mikulski

Jen pro upřesnění, já jsem učení, můj způsob, jak prostřednictvím TensorFlow pro Vědecký projekt. Od teď budu hrát prostřednictvím Lineární Regrese, chtěl jsem zkusit použít normalizaci, jak převést data mezi 0s a 1s. Chápu, že se asi nebudu muset OneHotEncode od mé údaje neobsahuje Řetězec data. I bude pravděpodobně odstranění později. Pro teď, snažím se pokles mé run-time a ztráty normalizací, protože mám v plánu na trénink v modelu předpovídat budoucí ceny a pak potvrzení je uveden nově k dispozici data z Yahoo Finance API.
Khosraw Azizi

Pro teď, jsem se snažil zjistit, jak převést své X_train_normal na matici pomocí numpy, ale můj run-time používá hodně paměti, když se snaží převést. Nakonec se museli otevřít další otázku, že jeden, pokud nemůžu přijít na způsob, jak kolem něj.
Khosraw Azizi

Aktualizace: Odstranění OneHotEncode z Kolony Transformátor pevné i tomuto problému.
Khosraw Azizi

EDIT: odeslal jsem odpověď 40 sekund po aktualizaci :) Vaše runtime využívá velké množství paměti, protože OHE (pravděpodobně). Jaký je tvar uvádí běží X_train_normal.shape? Pokud to má velké množství na druhém místě, pak by to mělo být OHE je chyba. Jiné, než to, sloupec transformátor transform metoda vrátí NumPy array (nebo řídké SciPy matrix), ale ne Datovém
Bartosz Mikulski

V jiných jazycích

Tato stránka je v jiných jazycích

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