"IndexError: n-tice index out of range" na train_test_split vlak údaje, akonáhle pokus, aby sa zmestili na predspracovanie

0

Otázka

Skúšal som pre-spracovávať svoje dáta pomocou normalizácie.

# 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 beží na Colab notebook. Dataset je z Kaple a je upravené na plný Unix Časové a ďalšieho stĺpca ceny Bitcoin na otvorené v tých časoch. Po spliting údajov a vytvorenie stĺpec transformátor, snažil som sa, montáž údajov. Avšak, som sa nasledujúca chyba:

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

Ja som premýšľal, či to je tvar problém, ale ako na vedomie, X_train údajov je tvaru (2020896,).

Je tam niečo, čo mám robiť s mojím údaje opraviť túto chybu?

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

Najlepšiu odpoveď

1

Ste extrahovali X_btc ako Pandy Série, ktorý je, ako je 1D pole, budete musieť extrahovať DataFrame (2D pole/matrix). Replace:

X_btc = btc_data["Time"]

s:

X_btc = btc_data[["Time"]]

ak chcete extrahovať DataFrame

Upraviť pre nové chyba:

KeyError sa deje preto, že tento transformátor:

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

Používate ["Time", "Open"] stĺpce. Avšak, X_btc nemá stĺpec "Open" (ako si zvoliť iba stĺpec "Time"). Na "Open" je cieľová štítok (y_btc) a mali by sa zahrnúť do X_btc. V tomto prípade, môžete odstrániť "Open" z make_column_transformer:

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

Že si ho zmeniť do 2D pole, ale to spôsobené rôzne chyby: pastebin.com/dVRqu7ir
Khosraw Azizi

Pozrite si upraviť v odpovedi
Bartosz Mikulski

Vďaka za vysvetlenie!
Khosraw Azizi

Som trochu stratil. Prosím objasniť @KhosrawAzizi , čo sa vám snažiť dosiahnuť tento stĺpec transformer? OneHotEncode (OHE) je pre kategorické údajov, a ako som pochopil Čas obsahuje časové a Otvorte obsahuje ceny. Obe premenné sú kontinuálne, ale OHE je navrhnutý pre prácu s kategorické údajov. MinMaxScaler je niečo v poriadku, ako to funguje s kontinuálne premenné. Avšak, pochybujem, že by mali byť použité na časové a ceny. Iná vec je problém formulácia. Chcete predvídať, cena založené na čas? Chcete predpoveď budúcich cien?
Bartosz Mikulski

Len na objasnenie, učím svoju cestu cez TensorFlow pre Vedu Reálnej projektu. Pretože práve teraz som hrať prostredníctvom Lineárnej Regresie, chcel som skúsiť použiť normalizácie previesť dáta medzi 0 a 1s. Chápem, že asi nebude potrebné OneHotEncode keďže moje údaje neobsahuje žiadne Reťazec údajov. Budem pravdepodobne odstránenie tom neskôr. Teraz, snažím sa znížiť moje run-time a stratu normalizovať, pretože mám v pláne na školenia model na predpovedanie budúcich cien a potom potvrdzuje ich vzhľadom na novo k dispozícii, údaje z Yahoo Finance to API.
Khosraw Azizi

Teraz, snažím sa prísť na to, ako previesť svoje X_train_normal na pole pomocou numpy, ale môj run-time je používanie veľa pamäte, keď sa snaží previesť. Skončí nutnosti otvoriť ďalšia otázka, pre tento jeden, ak nemôžem prísť na spôsob, ako okolo neho.
Khosraw Azizi

Aktualizácia: Odstránenie OneHotEncode z Kolóny Transformer pevne, že problém ako dobre.
Khosraw Azizi

EDIT: som predložil odpoveď 40 sekúnd po vašom aktualizácia :) Váš runtime vyžadujúceho množstvo pamäte, pretože OHE (pravdepodobne). Aký je tvar uviedlo beží X_train_normal.shape? Ak má veľké číslo v druhom mieste, potom by to malo byť OHE je chyba. Iné, než to, stĺpec transformer transform metóda vracia NumPy array (alebo riedke SciPy matrix), ale nie DataFrame
Bartosz Mikulski

V iných jazykoch

Táto stránka je v iných jazykoch

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