"Eroare indexerror: tuplu index out of range" pe train_test_split date de tren, după ce încercarea de a se potrivi pentru preprocesare

0

Problema

Am fost încercarea de a pre-proces-mi date prin normalizare.

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

Codul ruleaza pe un Colab notebook. Setul de date este de Kaple și este modificat pentru a fi plin de Unix Timestamp și o altă coloană pentru prețurile de Bitcoin pe deschis la acele vremuri. După spliting datele și de a crea o coloană de transformator, am încercat montarea de date. Cu toate acestea, primesc următoarea eroare:

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

Mă întreb dacă este o formă problema, dar ca o notă, X_train date este de forma (2020896,).

Este ceva ce avea de-a face cu datele mele de a repara aceasta eroare?

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

Cel mai bun răspuns

1

Ai extras X_btc ca un Panda Serie care este ca 1D array, aveți nevoie pentru a extrage DataFrame (2D array/matrix). Înlocuiți:

X_btc = btc_data["Time"]

cu:

X_btc = btc_data[["Time"]]

pentru a extrage DataFrame

Edit pentru noul eroare:

KeyError se întâmplă pentru că acest transformator:

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

Utilizați ["Time", "Open"] coloane. Cu toate acestea, X_btc nu are coloana "Open" (după cum ați selectat-o singura coloana "Time"). La "Open" este eticheta țintă (y_btc) și ar trebui să nu-l includă în X_btc. În acest caz, puteți elimina "Open" din make_column_transformer:

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

S-au schimbat într-o matrice 2D dar a provocat o altă eroare: pastebin.com/dVRqu7ir
Khosraw Azizi

Vezi edita în răspunsul
Bartosz Mikulski

Multumesc pentru explicatie!
Khosraw Azizi

Eu sunt un pic pierdut. Vă rugăm să clarificați @KhosrawAzizi , de ce ai încerca să realizeze cu această coloană transformator? OneHotEncode (CHE) este pentru categorice date, și după cum am înțeles la Timp conține marcajele de timp, și Deschide conține prețurile. Ambele variabile sunt continue, dar OHE este proiectat pentru a lucra cu date categorice. MinMaxScaler este oarecum bine, cum se lucrează cu variabile continue. Cu toate acestea, mă îndoiesc că ar trebui să fie utilizate pentru marcajele de timp și de preț. Un alt lucru este formularea problemei. Vrei pentru a prezice prețul bazat pe timestamp? Vrei pentru a prognoza viitorul prețurile?
Bartosz Mikulski

Doar pentru a clarifica, eu sunt de învățare prin felul meu de TensorFlow pentru un proiect. De acum ma joc prin Regresie Liniară, am vrut să încercați să utilizați normalizare pentru a converti datele mele între 0 si 1. Am înțeles că eu, probabil, nu va fi nevoie să OneHotEncode deoarece datele mele nu conține niciun fel de date Șir de caractere. Nu va fi, probabil, eliminarea asta mai târziu. Acum, încerc să reduc run-time și pierderea de normalizare, pentru că planul privind formarea modelului de a prezice viitorul prețurile și apoi confirmarea le-a dat recent disponibile date de la Yahoo Finance API.
Khosraw Azizi

Acum, încerc să-mi dau seama cum de a converti mea X_train_normal să o matrice folosind numpy, dar mi-run-time utilizează o mulțime de memorie atunci când încearcă să-l convertească. Va sfârși prin a avea pentru a deschide o altă întrebare, pentru că dacă eu nu pot da seama o cale în jurul valorii de ea.
Khosraw Azizi

Update: Eliminarea OneHotEncode din Coloana Transformatorului reparat problema la fel de bine.
Khosraw Azizi

EDIT: am prezentat răspuns 40 de secunde după actualizarea :) Ta runtime este folosind o mulțime de memorie din cauza OHE (probabil). Care este forma raportate de funcționare X_train_normal.shape? Dacă acesta are un număr mare în al doilea rând, atunci ar trebui să fie OHE vina lui. Altele decât că, coloana transformatorului transform metoda returneaza NumPy matrice (sau rare SciPy matrix), dar nu DataFrame
Bartosz Mikulski

În alte limbi

Această pagină este în alte limbi

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