Respostas no Fórum

Visualizando 5 posts - 1 até 5 (de 5 do total)
  • Autor
    Posts
  • em resposta a: Adicionar Novo Registro com Variável Categórica #28503

    Ah sim. Entendido Denny. Muito obrigado pelo suporte. Irei dar algumas simplificadas como você instruiu.

    em resposta a: Adicionar Novo Registro com Variável Categórica #28481

    Bom Denny, acho que agora consegui. Eu tive que colocar um parâmetro dentro do OneHotEncoder e também modificar o tipo de array do novo registro. Não sei se isso influencia, mas antes de trocar de array string para objeto, não estava conseguindo.

     

    import pandas as pd
    import pickle
    from sklearn.impute import SimpleImputer
    from sklearn.preprocessing import StandardScaler
    import numpy as np
    
    
    base = pd.read_csv('census.csv')
    previsores = base.iloc[:, 0:14].values
    classe = base.iloc[:, 14].values
    
    from sklearn.preprocessing import LabelEncoder, OneHotEncoder
    from sklearn.compose import ColumnTransformer
    
    labelencoder_previsores1 = LabelEncoder()
    labelencoder_previsores3 = LabelEncoder()
    labelencoder_previsores5 = LabelEncoder()
    labelencoder_previsores6 = LabelEncoder()
    labelencoder_previsores7 = LabelEncoder()
    labelencoder_previsores8 = LabelEncoder()
    labelencoder_previsores9 = LabelEncoder()
    labelencoder_previsores13 = LabelEncoder()
    
    
    previsores[:,1] = labelencoder_previsores1.fit_transform(previsores[:,1])
    previsores[:,3] = labelencoder_previsores3.fit_transform(previsores[:,3])
    previsores[:,5] = labelencoder_previsores5.fit_transform(previsores[:,5])
    previsores[:,6] = labelencoder_previsores6.fit_transform(previsores[:,6])
    previsores[:,7] = labelencoder_previsores7.fit_transform(previsores[:,7])
    previsores[:,8] = labelencoder_previsores8.fit_transform(previsores[:,8])
    previsores[:,9] = labelencoder_previsores9.fit_transform(previsores[:,9])
    previsores[:,13] = labelencoder_previsores13.fit_transform(previsores[:,13])
    
    column_tranformer = ColumnTransformer([('one_hot_encoder', OneHotEncoder(handle_unknown='ignore'), [1, 3, 5, 6, 7, 8, 9, 13])],remainder='passthrough')
    previsores = column_tranformer.fit_transform(previsores).toarray()
    
    labelencoder_classe = LabelEncoder()
    classe = labelencoder_classe.fit_transform(classe)
    
    from sklearn.preprocessing import StandardScaler
    scaler = StandardScaler()
    previsores = scaler.fit_transform(previsores)
    
    mlp = pickle.load(open('mlp_final.sav', 'rb'))
    resultado_mlp = mlp.score(previsores, classe)
    
    novo_registro = [[52," Self-emp-not-inc",209642," HS-grad",9," Married-civ-spouse"," Exec-managerial"," Husband"," White"," Male",0,0,45," United-States"]]
    novo_registro = np.asarray(novo_registro)
    
    
    novo_registro[:,1] = labelencoder_previsores1.transform(novo_registro[:,1])
    novo_registro[:,3] = labelencoder_previsores3.transform(novo_registro[:,3])
    novo_registro[:,5] = labelencoder_previsores5.transform(novo_registro[:,5])
    novo_registro[:,6] = labelencoder_previsores6.transform(novo_registro[:,6])
    novo_registro[:,7] = labelencoder_previsores7.transform(novo_registro[:,7])
    novo_registro[:,8] = labelencoder_previsores8.transform(novo_registro[:,8])
    novo_registro[:,9] = labelencoder_previsores9.transform(novo_registro[:,9])
    novo_registro[:,13] = labelencoder_previsores13.transform(novo_registro[:,13])
    
    novo_registro = np.asarray(novo_registro, object)
    
    novo_registro = column_tranformer.transform(novo_registro).toarray()
    
    novo_registro = scaler.transform(novo_registro)
    
    resposta_mlp = mlp.predict(novo_registro)
    em resposta a: Adicionar Novo Registro com Variável Categórica #28479

    Eu tentei realizar essas mudanças Denny mas não funcionou. Ao tentar fazer o column_tranformer ele acusa o erro da imagem. Dei uma pesquisada e alguns lugares falava para utilizar o OneHotEncoder(handle_unknown=’ignore’), mas não funcionou.

    import pandas as pd
    import pickle
    from sklearn.impute import SimpleImputer
    from sklearn.preprocessing import StandardScaler
    import numpy as np
    
    
    base = pd.read_csv('census.csv')
    previsores = base.iloc[:, 0:14].values
    classe = base.iloc[:, 14].values
    
    from sklearn.preprocessing import LabelEncoder, OneHotEncoder
    from sklearn.compose import ColumnTransformer
    
    labelencoder_previsores1 = LabelEncoder()
    labelencoder_previsores3 = LabelEncoder()
    labelencoder_previsores5 = LabelEncoder()
    labelencoder_previsores6 = LabelEncoder()
    labelencoder_previsores7 = LabelEncoder()
    labelencoder_previsores8 = LabelEncoder()
    labelencoder_previsores9 = LabelEncoder()
    labelencoder_previsores13 = LabelEncoder()
    
    
    previsores[:,1] = labelencoder_previsores1.fit_transform(previsores[:,1])
    previsores[:,3] = labelencoder_previsores3.fit_transform(previsores[:,3])
    previsores[:,5] = labelencoder_previsores5.fit_transform(previsores[:,5])
    previsores[:,6] = labelencoder_previsores6.fit_transform(previsores[:,6])
    previsores[:,7] = labelencoder_previsores7.fit_transform(previsores[:,7])
    previsores[:,8] = labelencoder_previsores8.fit_transform(previsores[:,8])
    previsores[:,9] = labelencoder_previsores9.fit_transform(previsores[:,9])
    previsores[:,13] = labelencoder_previsores13.fit_transform(previsores[:,13])
    
    column_tranformer = ColumnTransformer([('one_hot_encoder', OneHotEncoder(), [1, 3, 5, 6, 7, 8, 9, 13])],remainder='passthrough')
    previsores = column_tranformer.fit_transform(previsores).toarray()
    
    labelencoder_classe = LabelEncoder()
    classe = labelencoder_classe.fit_transform(classe)
    
    from sklearn.preprocessing import StandardScaler
    scaler = StandardScaler()
    previsores = scaler.fit_transform(previsores)
    
    mlp = pickle.load(open('mlp_final.sav', 'rb'))
    resultado_mlp = mlp.score(previsores, classe)
    
    novo_registro = [[39," State-gov",77516," Bachelors",13," Never-married"," Adm-clerical"," Not-in-family"," White"," Male",2174,0,40," United-States"]]
    novo_registro = np.asarray(novo_registro)
    
    
    novo_registro[:,1] = labelencoder_previsores1.transform(novo_registro[:,1])
    novo_registro[:,3] = labelencoder_previsores3.transform(novo_registro[:,3])
    novo_registro[:,5] = labelencoder_previsores5.transform(novo_registro[:,5])
    novo_registro[:,6] = labelencoder_previsores6.transform(novo_registro[:,6])
    novo_registro[:,7] = labelencoder_previsores7.transform(novo_registro[:,7])
    novo_registro[:,8] = labelencoder_previsores8.transform(novo_registro[:,8])
    novo_registro[:,9] = labelencoder_previsores9.transform(novo_registro[:,9])
    novo_registro[:,13] = labelencoder_previsores13.transform(novo_registro[:,13])
    
    
    novo_registro = column_tranformer.transform(novo_registro).toarray()
    
    novo_registro = scaler.transform(novo_registro)
    
    resposta_mlp = mlp.predict(novo_registro)

     

    em resposta a: Adicionar Novo Registro com Variável Categórica #28477

    Consegui.Era isso mesmo. Tem um espaço antes de alguns registros ali. Bom, até essa parte consegui fazer. Continuei com o processo e fiz o reshape para poder fazer o escalonamento e tudo mais. Mas agora o problema que quando vou passar  o predict, meu modelo de treinamento usado foi com OneHotEncoder e ai gerou as variáveis dummy, que no caso aumentou minha base para 108 colunas. Ao tentar passar o predict ele não consegue por pelo fato do novo registro só possuir 14 colunas.

     

    import pandas as pd
    import pickle
    from sklearn.impute import SimpleImputer
    from sklearn.preprocessing import StandardScaler
    import numpy as np
    
    
    base = pd.read_csv('census.csv')
    previsores = base.iloc[:, 0:14].values
    classe = base.iloc[:, 14].values
    
    from sklearn.preprocessing import LabelEncoder, OneHotEncoder
    from sklearn.compose import ColumnTransformer
    
    labelencoder_previsores1 = LabelEncoder()
    labelencoder_previsores3 = LabelEncoder()
    labelencoder_previsores5 = LabelEncoder()
    labelencoder_previsores6 = LabelEncoder()
    labelencoder_previsores7 = LabelEncoder()
    labelencoder_previsores8 = LabelEncoder()
    labelencoder_previsores9 = LabelEncoder()
    labelencoder_previsores13 = LabelEncoder()
    
    
    previsores[:,1] = labelencoder_previsores1.fit_transform(previsores[:,1])
    previsores[:,3] = labelencoder_previsores3.fit_transform(previsores[:,3])
    previsores[:,5] = labelencoder_previsores5.fit_transform(previsores[:,5])
    previsores[:,6] = labelencoder_previsores6.fit_transform(previsores[:,6])
    previsores[:,7] = labelencoder_previsores7.fit_transform(previsores[:,7])
    previsores[:,8] = labelencoder_previsores8.fit_transform(previsores[:,8])
    previsores[:,9] = labelencoder_previsores9.fit_transform(previsores[:,9])
    previsores[:,13] = labelencoder_previsores13.fit_transform(previsores[:,13])
    
    column_tranformer = ColumnTransformer([('one_hot_encoder', OneHotEncoder(), [1, 3, 5, 6, 7, 8, 9, 13])],remainder='passthrough')
    previsores = column_tranformer.fit_transform(previsores).toarray()
    
    labelencoder_classe = LabelEncoder()
    classe = labelencoder_classe.fit_transform(classe)
    
    from sklearn.preprocessing import StandardScaler
    scaler = StandardScaler()
    previsores = scaler.fit_transform(previsores)
    
    mlp = pickle.load(open('mlp_final.sav', 'rb'))
    resultado_mlp = mlp.score(previsores, classe)
    
    novo_registro = [[39," State-gov",77516," Bachelors",13," Never-married"," Adm-clerical"," Not-in-family"," White"," Male",2174,0,40," United-States"]]
    novo_registro = np.asarray(novo_registro)
    
    
    novo_registro[:,1] = labelencoder_previsores1.transform(novo_registro[:,1])
    novo_registro[:,3] = labelencoder_previsores3.transform(novo_registro[:,3])
    novo_registro[:,5] = labelencoder_previsores5.transform(novo_registro[:,5])
    novo_registro[:,6] = labelencoder_previsores6.transform(novo_registro[:,6])
    novo_registro[:,7] = labelencoder_previsores7.transform(novo_registro[:,7])
    novo_registro[:,8] = labelencoder_previsores8.transform(novo_registro[:,8])
    novo_registro[:,9] = labelencoder_previsores9.transform(novo_registro[:,9])
    novo_registro[:,13] = labelencoder_previsores13.transform(novo_registro[:,13])
    
    
    novo_registro = novo_registro.reshape(-1, 1)
    novo_registro = scaler.fit_transform(novo_registro)
    novo_registro = novo_registro.reshape(-1, 14)
    
    resposta_mlp = mlp.predict(novo_registro)
    em resposta a: Adicionar Novo Registro com Variável Categórica #28469

    Desculpa Denny, acho que fiquei um pouco confuso. Bom, tentei seguir pelo o que entendi mas ao tentar passar o labelencoder com o método transform, está gerando um erro conforme a imagem abaixo. Uma observação que os dados do novo registro são exatamente iguais aos utiliziados na primeira linha da base de dados.

    Error
    
    import pandas as pd
    import pickle
    from sklearn.impute import SimpleImputer
    from sklearn.preprocessing import StandardScaler
    import numpy as np
    
    
    base = pd.read_csv('census.csv')
    previsores = base.iloc[:, 0:14].values
    classe = base.iloc[:, 14].values
    
    from sklearn.preprocessing import LabelEncoder, OneHotEncoder
    from sklearn.compose import ColumnTransformer
    
    labelencoder_previsores1 = LabelEncoder()
    labelencoder_previsores3 = LabelEncoder()
    labelencoder_previsores5 = LabelEncoder()
    labelencoder_previsores6 = LabelEncoder()
    labelencoder_previsores7 = LabelEncoder()
    labelencoder_previsores8 = LabelEncoder()
    labelencoder_previsores9 = LabelEncoder()
    labelencoder_previsores13 = LabelEncoder()
    
    
    previsores[:,1] = labelencoder_previsores1.fit_transform(previsores[:,1])
    previsores[:,3] = labelencoder_previsores3.fit_transform(previsores[:,3])
    previsores[:,5] = labelencoder_previsores5.fit_transform(previsores[:,5])
    previsores[:,6] = labelencoder_previsores6.fit_transform(previsores[:,6])
    previsores[:,7] = labelencoder_previsores7.fit_transform(previsores[:,7])
    previsores[:,8] = labelencoder_previsores8.fit_transform(previsores[:,8])
    previsores[:,9] = labelencoder_previsores9.fit_transform(previsores[:,9])
    previsores[:,13] = labelencoder_previsores13.fit_transform(previsores[:,13])
    
    column_tranformer = ColumnTransformer([('one_hot_encoder', OneHotEncoder(), [1, 3, 5, 6, 7, 8, 9, 13])],remainder='passthrough')
    previsores = column_tranformer.fit_transform(previsores).toarray()
    
    labelencoder_classe = LabelEncoder()
    classe = labelencoder_classe.fit_transform(classe)
    
    from sklearn.preprocessing import StandardScaler
    scaler = StandardScaler()
    previsores = scaler.fit_transform(previsores)
    
    mlp = pickle.load(open('mlp_final.sav', 'rb'))
    resultado_mlp = mlp.score(previsores, classe)
    
    novo_registro = [[39,"State-gov",77516,"Bachelor",13,"Never-married","Adm-clerical","Not-in-family","White","Male",2174,0,40,"United-States"]]
    novo_registro = np.asarray(novo_registro)
    
    
    novo_registro[:,1] = labelencoder_previsores1.transform(novo_registro[:,1])
    novo_registro[:,3] = labelencoder_previsores3.transform(novo_registro[:,3])
    novo_registro[:,5] = labelencoder_previsores5.transform(novo_registro[:,5])
    novo_registro[:,6] = labelencoder_previsores6.transform(novo_registro[:,6])
    novo_registro[:,7] = labelencoder_previsores7.transform(novo_registro[:,7])
    novo_registro[:,8] = labelencoder_previsores8.transform(novo_registro[:,8])
    novo_registro[:,9] = labelencoder_previsores9.transform(novo_registro[:,9])
    novo_registro[:,13] = labelencoder_previsores13.transform(novo_registro[:,13])
Visualizando 5 posts - 1 até 5 (de 5 do total)