es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La codificación del conjunto de datos de índice presenta un error de tipo, ¿por qué? [Aprendizaje automático]

Conjunto de datos: https://docs.google.com/spreadsheets/d/1OBdyMv8yU7EEdlUNqk_Ox9gT2LMItY2DivEiVX4fYWY/edit?usp=sharing

Estoy intentando aplicar aprendizaje automático a las estadísticas en el conjunto de datos, sin embargo, cada vez que intento codificar/preprocesar los datos, recibo el siguiente error:

TypeError: El índice no admite operaciones mutables

¿No es el objetivo del preprocesamiento cambiar los valores? ¿Y no es eso un precursor necesario para aplicar el aprendizaje automático? No sé cómo abordar la codificación/preprocesamiento… cualquier sugerencia es apreciada. ¡Gracias!

Código:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
import datetime as dt</p>

<p>from sklearn import datasets, metrics
from sklearn.model<em>selection import train</em>test<em>split
from sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import OneHotEncoder, LabelEncoder
from sklearn.preprocessing import OrdinalEncoder
from sklearn.impute import SimpleImputer
from sklearn.linear</em>model import LogisticRegression
from sklearn.model<em>selection import cross</em>val_score</p>

<p>dbdata = pd.read<em>excel("C:/Users/Andrew/sportsref</em>download.xlsx")</p>

<p>print(dbdata)
print(dbdata.describe())
df = dbdata.columns
print(df)</p>

<h1>definir x&y</h1>

<p>x = dbdata
y = dbdata.PTS</p>

<p>shapes = x.shape, y.shape
print(shapes)</p>

<p>print(dbdata.index)
print('siguiente')</p>

<h1>aplicar logreg</h1>

<p>logreg = LogisticRegression(solver='lbfgs')</p>

<p>cross<em>val</em>score(logreg, x, y, cv=2, scoring='accuracy').mean()
print(cross<em>val</em>score)</p>

<p>le = LabelEncoder()
df["date<em>tf"] = le.fit</em>transform(dbdata.Date)
df["tm<em>tf"] = le.fit</em>transform(df.Tm)
df["opp<em>tf"] = le.fit</em>transform(df.Opp)</p>

<p>OneHotEncoder().fit<em>transform(df[['date</em>tf']]).toarray()</p>

<p>Cols = ["Date","Tm","Opp"]
integer<em>encoded = OrdinalEncoder().fit</em>transform(x[Cols])</p>

<p>scaler = StandardScaler()
X<em>scaled = scaler.fit</em>transform(x)
print(X_scaled)</p>

<p>ec = OneHotEncoder()
X<em>encoded = dbdata.apply(lambda col: ec.fit</em>transform(col.astype(str)), axis=0, result<em>type='expand')
X</em>encoded = ec.fit_transform(x.values.reshape(-1,1), y)</p>

<p>print(X<em>encoded)
X</em>encoded = ec.fit_transform(x)
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que estás intentando modificar el índice del conjunto de datos, lo cual no está permitido ya que es inmutable. La etapa de preprocesamiento implica cambiar los valores del conjunto de datos, no el índice.

    Para codificar/preprocesar los datos, puedes utilizar métodos como LabelEncoder, OneHotEncoder, OrdinalEncoder y SimpleImputer. Estos métodos te ayudarán a transformar los datos categóricos y faltantes en datos numéricos que se pueden ingresar en un modelo de aprendizaje automático.

    Por ejemplo, puedes utilizar LabelEncoder para convertir datos categóricos en datos numéricos, OrdinalEncoder para transformar los datos ordinales y OneHotEncoder para crear variables ficticias para los datos categóricos. También puedes utilizar SimpleImputer para manejar los datos faltantes en el conjunto de datos.

    A continuación se muestra un ejemplo de cómo aplicar el preprocesamiento utilizando LabelEncoder, OneHotEncoder y StandardScaler:

    from sklearn.preprocessing import LabelEncoder, OneHotEncoder, StandardScaler
    
    # Crea una copia del DataFrame original para trabajar con él
    df = dbdata.copy()
    
    # Codifica las columnas categóricas
    le = LabelEncoder()
    df['Tm'] = le.fit_transform(df['Tm'])
    df['Opp'] = le.fit_transform(df['Opp'])
    
    # Crea variables ficticias para las columnas categóricas
    ohe = OneHotEncoder(sparse=False)
    tm_dummies = ohe.fit_transform(df[['Tm']])
    opp_dummies = ohe.fit_transform(df[['Opp']])
    df = pd.concat([df, pd.DataFrame(tm_dummies, columns=['tm_' + str(i) for i in range(tm_dummies.shape[1])])], axis=1)
    df = pd.concat([df, pd.DataFrame(opp_dummies, columns=['opp_' + str(i) for i in range(opp_dummies.shape[1])])], axis=1)
    
    # Escala los datos
    scaler = StandardScaler()
    scaled_features = scaler.fit_transform(df.drop(['Date', 'Tm', 'Opp'], axis=1))
    df_scaled = pd.DataFrame(scaled_features, columns=df.columns[3:])
    
    # Utiliza df_scaled para el modelo de aprendizaje automático
    

    En resumen, el error que recibiste se debe a que estás tratando de modificar el índice, lo cual no está permitido. Para preprocesar el conjunto de datos, puedes utilizar métodos como LabelEncoder, OneHotEncoder, OrdinalEncoder, SimpleImputer, etc., los cuales te ayudarán a transformar los datos de manera que se puedan ingresar en un modelo de aprendizaje automático.

Comments are closed.