AttributeError: 'super' object has no attribute 'get_params' inside xgboost.sklearn module

Viewed 152

I am trying to predict a self generated data using some pickled xgboost model. I am getting the below attribute error:

AttributeError: 'super' object has no attribute 'get_params'.

The main task is I have 8 xgboost pickle files and I am going to predict 8 different target variables respectively.

I am attaching the code and the traceback error of the code. Please help me resolve this.

# importing the libraries
import pandas as pd
from itertools import combinations_with_replacement, permutations, product, chain
import numpy as np
import os
import pickle
import xlwings as xw
import xgboost as xgb
from xgboost.sklearn import XGBRegressor
import warnings
from sqlalchemy import create_engine
warnings.filterwarnings('ignore')
import time

# renamer function
class renamer():
    def __init__(self):
        self.d = dict()
    def __call__(self, x):
        if x not in self.d:
            self.d[x] = 0
            return x
        else:
            self.d[x] += 1
            return "%s_%d" % (x, self.d[x])
        
# reading input files
df_input=pd.read_excel(r'D:\tata_metaliks\coal_blend_optimization\automation\input\input_data.xlsx',sheet_name='input_coal',header=0)
input_file=pd.read_excel(r'D:\tata_metaliks\coal_blend_optimization\automation\input\input_data.xlsx',sheet_name='input_coal')
# del df_input["Unnamed: 3"]
df_master=pd.read_excel(r'D:\tata_metaliks\coal_blend_optimization\automation\input\input_data.xlsx',sheet_name='grade_list')
df_input.columns=['Coal','Coal_Name','Coal_Cost','Coal_Grade']
coal=list(df_input['Coal'].values)
mydict={}
for grade in df_input.Coal_Grade.dropna().unique():
    mydict[grade]={'min':df_master[df_master['GRADE']==grade].MIN[df_master[df_master['GRADE']==grade].MIN.index[0]],
                    'max':df_master[df_master['GRADE']==grade].MAX[df_master[df_master['GRADE']==grade].MAX.index[0]]}

# function for grade combinations with min and max
def get_combinations(dict_input):
    all_list=[]
    result=[]
    if len(dict_input)==2:
        for a in range(dict_input[list(dict_input.keys())[0]]['min'],dict_input[list(dict_input.keys())[0]]['max']+1):
            for b in range(dict_input[list(dict_input.keys())[1]]['min'],dict_input[list(dict_input.keys())[1]]['max']+1):
                all_list.append([a,b])
    elif len(dict_input)==3:
        for a in range(dict_input[list(dict_input.keys())[0]]['min'],dict_input[list(dict_input.keys())[0]]['max']+1):
            for b in range(dict_input[list(dict_input.keys())[1]]['min'],dict_input[list(dict_input.keys())[1]]['max']+1):
                for c in range(dict_input[list(dict_input.keys())[2]]['min'],dict_input[list(dict_input.keys())[2]]['max']+1):
                    all_list.append([a,b,c])
    elif len(dict_input)==4:
        for a in range(dict_input[list(dict_input.keys())[0]]['min'],dict_input[list(dict_input.keys())[0]]['max']+1):
            for b in range(dict_input[list(dict_input.keys())[1]]['min'],dict_input[list(dict_input.keys())[1]]['max']+1):
                for c in range(dict_input[list(dict_input.keys())[2]]['min'],dict_input[list(dict_input.keys())[2]]['max']+1):
                    for d in range(dict_input[list(dict_input.keys())[3]]['min'],dict_input[list(dict_input.keys())[3]]['max']+1):
                        all_list.append([a,b,c,d])
    elif len(dict_input)==5:
        for a in range(dict_input[list(dict_input.keys())[0]]['min'],dict_input[list(dict_input.keys())[0]]['max']+1):
            for b in range(dict_input[list(dict_input.keys())[1]]['min'],dict_input[list(dict_input.keys())[1]]['max']+1):
                for c in range(dict_input[list(dict_input.keys())[2]]['min'],dict_input[list(dict_input.keys())[2]]['max']+1):
                    for d in range(dict_input[list(dict_input.keys())[3]]['min'],dict_input[list(dict_input.keys())[3]]['max']+1):
                        for e in range(dict_input[list(dict_input.keys())[4]]['min'],dict_input[list(dict_input.keys())[4]]['max']+1):
                            all_list.append([a,b,c,d,e])
                            
    for i in all_list:  
        if sum(i)==100:
            result.append(i)
            
    mydf=pd.DataFrame(result)
    mydf.columns=df_input.Coal_Grade.dropna().unique()
    mydf=mydf.assign(**dict((el,0) for el in (set(df_master.GRADE)-set(df_input.Coal_Grade.unique()))))
    
    df_input[df_input['Coal_Grade']==mydf.columns[0]]['Coal'][0]
    
    return(mydf)


l1=get_combinations(mydict).to_dict('records')

grade_count=df_input.Coal_Grade.value_counts().to_dict()
grade=set(df_master.GRADE)-set(df_input.Coal_Grade.unique())
name = dict.fromkeys(grade, 0)
grade_count.update(name)
grade_count= {key : grade_count[key] for key in list(l1[0].keys())}

comb_list=[]
for row in l1:
    grd_list=[]
    for grd in grade_count.keys():
        comb_coal=list(combinations_with_replacement(range(0,row[grd]+1),grade_count[grd]))
        result_coal=[]
        for i in list(comb_coal):  
            if sum(i)==row[grd]:
                result_coal.append(i)
                
            # Permutations
        per_coal=[]
        for i in result_coal:
            per_coal.append(list(set(permutations(list(i)))))
                    
            # Creating Flat List
        total_per_coal=[]
        for x in per_coal:
            for y in x:
                total_per_coal.append(y)
                    
        grd_list.append(total_per_coal)
        final_comb=pd.DataFrame([tuple(chain.from_iterable(prod)) for prod in product(*grd_list)])  
        final_comb=final_comb.assign(**row)
    comb_list.append(final_comb)
    
final_combination=pd.concat(comb_list,sort=False)
final_combination=final_combination.reset_index(drop=True)
final_combination=final_combination.rename(dict(zip(list(final_combination.columns[:-6]),
                                  df_input.loc[df_input.Coal_Name.notnull()]['Coal'].to_list())),axis=1)
value=dict(zip(list(set(coal)-set(list(final_combination.columns[:-6]))),
              [0]*len(list(set(coal)-set(list(final_combination.columns[:-6]))))))
final_combination=final_combination.assign(**value)
final_combination=final_combination[['Coal 1','Coal 2','Coal 3','Coal 4','Coal 5',
                                    'phcc','shcc','ss','hcc','non coking','weak coking']]

df_input["Coal_Name"][df_input["Coal_Name"].isnull()]="None"
coal_name=list(df_input["Coal_Name"])
final_combination=final_combination.rename({"Coal 1":coal_name[0],"Coal 2":coal_name[1],"Coal 3":coal_name[2],
                                          "Coal 4":coal_name[3],"Coal 5":coal_name[4]},axis=1)

# reading the master data
master_data=pd.read_excel(r'D:\tata_metaliks\coal_blend_optimization\automation\input\input_data.xlsx',sheet_name='master_data')

# check if all coals are present
input_=list(df_input['Coal_Name'])
master_=list(master_data["Coal_Name"])
check =  any(item in master_ for item in input_)

if check is True:
    print ("All coals found")
    final_input=pd.merge(df_input,master_data,on=['Coal_Name','Coal_Grade'],how='left')
    
else:
    print ("All coals not found")

# adding the COA properties    
data__1=pd.DataFrame()
coal1=final_combination.columns[0]
data__1["Coal_Name"] = np.where(final_combination.columns[0]==final_input["Coal_Name"].values,coal1 ,"None")
data__1=final_input[final_input["Coal_Name"]==coal1]
data__1=data__1.loc[[0]]
data__1=data__1.rename({'ash_%_coal':'c1_ash_%_coal', 'vm_%_coal':'c1_vm_%_coal', 'csn_index':'c1_csn_index',
       'vitrinite distribution':'c1_vitrinite distribution', 'vitrinite':'c1_vitrinite', 'fluidity':'c1_fluidity', 
        'dilatation':'c1_dilatation', 'mmr':'c1_mmr'},axis=1)

data_1 = pd.DataFrame(np.repeat(data__1.values,len(final_combination),axis=0))
data_1.columns=data__1.columns
data_1.drop(columns=['Coal', 'Coal_Name','Coal_Cost', 'Coal_Grade'],inplace=True)

data__2=pd.DataFrame()
coal2=final_combination.columns[1]
data__2["Coal_Name"] = np.where(final_combination.columns[1]==final_input["Coal_Name"].values,coal2 ,"None")
data__2=final_input[final_input["Coal_Name"]==coal2]
data__2=data__2.loc[[1]] 
data__2=data__2.rename({'ash_%_coal':'c2_ash_%_coal', 'vm_%_coal':'c2_vm_%_coal', 'csn_index':'c2_csn_index',
       'vitrinite distribution':'c2_vitrinite distribution', 'vitrinite':'c2_vitrinite', 'fluidity':'c2_fluidity', 
        'dilatation':'c2_dilatation', 'mmr':'c2_mmr'},axis=1)
data_2 = pd.DataFrame(np.repeat(data__2.values,len(final_combination),axis=0))
data_2.columns=data__2.columns
data_2=data_2.drop(['Coal', 'Coal_Name','Coal_Cost', 'Coal_Grade'],axis=1)

data__3=pd.DataFrame()
coal3=final_combination.columns[2]
data__3["Coal_Name"] = np.where(final_combination.columns[2]==final_input["Coal_Name"].values,coal3,"None")
data__3=final_input[final_input["Coal_Name"]==coal3]
data__3=data__3.loc[[2]] 
data__3=data__3.rename({'ash_%_coal':'c3_ash_%_coal', 'vm_%_coal':'c3_vm_%_coal', 'csn_index':'c3_csn_index',
       'vitrinite distribution':'c3_vitrinite distribution', 'vitrinite':'c3_vitrinite', 'fluidity':'c3_fluidity', 
        'dilatation':'c3_dilatation', 'mmr':'c3_mmr'},axis=1)
data_3 = pd.DataFrame(np.repeat(data__3.values,len(final_combination),axis=0))
data_3.columns=data__3.columns
data_3=data_3.drop(['Coal', 'Coal_Name','Coal_Cost','Coal_Grade'],axis=1)

data__4=pd.DataFrame()
coal4=final_combination.columns[3]
data__4["Coal_Name"] = np.where(final_combination.columns[3]==final_input["Coal_Name"].values,coal4,"None")
data__4=final_input[final_input["Coal_Name"]==coal4]
data__4=data__4.loc[[3]]
data__4=data__4.rename({'ash_%_coal':'c4_ash_%_coal', 'vm_%_coal':'c4_vm_%_coal', 'csn_index':'c4_csn_index',
       'vitrinite distribution':'c4_vitrinite distribution', 'vitrinite':'c4_vitrinite', 'fluidity':'c4_fluidity', 
        'dilatation':'c4_dilatation', 'mmr':'c4_mmr'},axis=1)
data_4 = pd.DataFrame(np.repeat(data__4.values,len(final_combination),axis=0))
data_4.columns=data__4.columns
data_4=data_4.drop(['Coal', 'Coal_Name','Coal_Cost', 'Coal_Grade'],axis=1)
                   
data__5=pd.DataFrame()
coal5=final_combination.columns[4]
data__5["Coal_Name"] = np.where(final_combination.columns[4]==final_input["Coal_Name"].values,coal5,"None")
data__5=final_input[final_input["Coal_Name"]==coal5]
data__5=data__5.loc[[4]]
data__5=data__5.rename({'ash_%_coal':'c5_ash_%_coal', 'vm_%_coal':'c5_vm_%_coal', 'csn_index':'c5_csn_index',
       'vitrinite distribution':'c5_vitrinite distribution', 'vitrinite':'c5_vitrinite', 'fluidity':'c5_fluidity', 
        'dilatation':'c5_dilatation', 'mmr':'c5_mmr'},axis=1)
data_5 = pd.DataFrame(np.repeat(data__5.values,len(final_combination),axis=0))
data_5.columns=data__5.columns
data_5=data_5.drop(['Coal', 'Coal_Name','Coal_Cost','Coal_Grade'],axis=1)

join1=data_1.join(data_2)
join2=join1.join(data_3)
join3=join2.join(data_4)
data=join3.join(data_5)

# dataframe with all the COA properties
final_combination=final_combination.join(data)
final_combination=final_combination.reset_index(drop=True)

final_combination=final_combination.rename(columns=renamer())

# renaming the columns 
final_combination.rename(columns={final_combination.columns[0]: 'c1%',final_combination.columns[1]: 'c2%',
                  final_combination.columns[2]: 'c3%',final_combination.columns[3]: 'c4%',
                   final_combination.columns[4]: 'c5%'},inplace=True)
final_combination=final_combination[['c1%','c2%','c3%','c4%','c5%','phcc', 'shcc', 'ss', 'hcc', 'non coking', 'weak coking', 
           'c1_ash_%_coal', 'c2_ash_%_coal', 'c3_ash_%_coal', 'c4_ash_%_coal', 'c5_ash_%_coal', 'c1_vm_%_coal', 'c2_vm_%_coal', 
           'c3_vm_%_coal', 'c4_vm_%_coal', 'c5_vm_%_coal', 'c1_csn_index', 'c2_csn_index', 'c3_csn_index', 'c4_csn_index', 'c5_csn_index', 
           'c1_fluidity', 'c2_fluidity', 'c3_fluidity', 'c4_fluidity', 'c5_fluidity', 
           'c1_mmr', 'c2_mmr', 'c3_mmr', 'c4_mmr', 'c5_mmr', 
           'c1_vitrinite distribution', 'c2_vitrinite distribution', 
           'c3_vitrinite distribution', 'c4_vitrinite distribution', 'c5_vitrinite distribution', 
           'c1_vitrinite', 'c2_vitrinite', 'c3_vitrinite', 'c4_vitrinite', 'c5_vitrinite',
           'c1_dilatation', 'c2_dilatation', 'c3_dilatation', 'c4_dilatation', 'c5_dilatation']]

# data pre processing
c1_prop=['c1_ash_%_coal','c1_vm_%_coal','c1_csn_index','c1_fluidity','c1_mmr',
'c1_vitrinite distribution','c1_vitrinite','c1_dilatation']

c2_prop=['c2_ash_%_coal', 'c2_vm_%_coal', 'c2_csn_index','c2_fluidity','c2_mmr',
'c2_vitrinite distribution', 'c2_vitrinite','c2_dilatation']

c3_prop=['c3_ash_%_coal','c3_vm_%_coal', 'c3_csn_index','c3_fluidity', 'c3_mmr',
'c3_vitrinite distribution','c3_vitrinite','c3_dilatation']

c4_prop=['c4_ash_%_coal','c4_vm_%_coal', 'c4_csn_index', 'c4_fluidity','c4_mmr',
'c4_vitrinite distribution', 'c4_vitrinite','c4_dilatation']

c5_prop=['c5_ash_%_coal', 'c5_vm_%_coal','c5_csn_index', 'c5_fluidity', 'c5_mmr',  
'c5_vitrinite distribution', 'c5_vitrinite','c5_dilatation']

final_combination.loc[final_combination['c1%']==0,c1_prop]=0
final_combination.loc[final_combination['c2%']==0,c2_prop]=0
final_combination.loc[final_combination['c3%']==0,c3_prop]=0
final_combination.loc[final_combination['c4%']==0,c4_prop]=0
final_combination.loc[final_combination['c5%']==0,c5_prop]=0
final_combination=final_combination.reset_index(drop=True)
final_combination=final_combination.fillna(0)
# calculating blend properties
final_combination['ash_%_blend']=(final_combination['c1%']*final_combination['c1_ash_%_coal']+final_combination['c2%']*final_combination['c2_ash_%_coal']+final_combination['c3%']*final_combination['c3_ash_%_coal']+final_combination['c4%']*final_combination['c4_ash_%_coal']+final_combination['c5%']*final_combination['c5_ash_%_coal'])/100
final_combination['vm_%_blend']=(final_combination['c1%']*final_combination['c1_vm_%_coal']+final_combination['c2%']*final_combination['c2_vm_%_coal']+final_combination['c3%']*final_combination['c3_vm_%_coal']+final_combination['c4%']*final_combination['c4_vm_%_coal']+final_combination['c5%']*final_combination['c5_vm_%_coal'])/100
final_combination['csn_index_blend']=(final_combination['c1%']*final_combination['c1_csn_index']+final_combination['c2%']*final_combination['c2_csn_index']+final_combination['c3%']*final_combination['c3_csn_index']+final_combination['c4%']*final_combination['c4_csn_index']+final_combination['c5%']*final_combination['c5_csn_index'])/100
final_combination['fluidity_blend']=(final_combination['c1%']*final_combination['c1_fluidity']+final_combination['c2%']*final_combination['c2_fluidity']+final_combination['c3%']*final_combination['c3_fluidity']+final_combination['c4%']*final_combination['c4_fluidity']+final_combination['c5%']*final_combination['c5_fluidity'])/100
final_combination['mmr_blend']=(final_combination['c1%']*final_combination['c1_mmr']+final_combination['c2%']*final_combination['c2_mmr']+final_combination['c3%']*final_combination['c3_mmr']+final_combination['c4%']*final_combination['c4_mmr']+final_combination['c5%']*final_combination['c5_mmr'])/100
final_combination['vitrinite_distribution_blend']=(final_combination['c1%']*final_combination['c1_vitrinite distribution']+final_combination['c2%']*final_combination['c2_vitrinite distribution']+final_combination['c3%']*final_combination['c3_vitrinite distribution']+final_combination['c4%']*final_combination['c4_vitrinite distribution']+final_combination['c5%']*final_combination['c5_vitrinite distribution'])/100
final_combination['vitrinite_blend']=(final_combination['c1%']*final_combination['c1_vitrinite']+final_combination['c2%']*final_combination['c2_vitrinite']+final_combination['c3%']*final_combination['c3_vitrinite']+final_combination['c4%']*final_combination['c4_vitrinite']+final_combination['c5%']*final_combination['c5_vitrinite'])/100
final_combination['dilatation_blend']=(final_combination['c1%']*final_combination['c1_dilatation']+final_combination['c2%']*final_combination['c2_dilatation']+final_combination['c3%']*final_combination['c3_dilatation']+final_combination['c4%']*final_combination['c4_dilatation']+final_combination['c5%']*final_combination['c5_dilatation'])/100
final_combination.iloc[:,11:]=final_combination.iloc[:,11:].astype(float)

# loading the model
model_dict={}
for model in os.listdir(r'D:\tata_metaliks\coal_blend_optimization\automation\model_dump'):
    model_dict[model.split('.')[0]]=pickle.load(open(r"D:\tata_metaliks\coal_blend_optimization\automation\model_dump\{}".format(model), "rb"))
    
# prediction & output Generation
prediction_dict={}
for key in model_dict.keys():
    prediction_dict[key.split('_')[0]]=list(model_dict[key].predict(final_combination))

prediction_dict['vm']=0.8
# Concatenating predictions with input
df_output=pd.concat([final_combination,pd.DataFrame(prediction_dict)],axis=1)
final_input["Coal_Cost"]=final_input["Coal_Cost"].fillna(0)
# Calculating blend cost, yield and coke cost
df_output['coal_blend_cost']=(final_combination['c1%']*final_input['Coal_Cost'][0]+final_combination['c2%']*final_input['Coal_Cost'][1]+
                               final_combination['c3%']*final_input['Coal_Cost'][2]+final_combination['c4%']*final_input['Coal_Cost'][3]+
                               final_combination['c5%']*final_input['Coal_Cost'][4])/100
df_output['net_yield']=0.95*(100-final_combination['vm_%_blend']+prediction_dict['vm']-3)
df_output['coke_cost']=(df_output['coal_blend_cost']/df_output['net_yield'])*100

df_output.rename(columns={df_output.columns[0]: 'Coal 1',df_output.columns[1]: 'Coal 2',
                  df_output.columns[2]: 'Coal 3',df_output.columns[3]: 'Coal 4',
                   df_output.columns[4]: 'Coal 5'},inplace=True)

# df_input=pd.read_excel(r'D:\tata_metaliks\coal_blend_optimization\automation\input\input_data.xlsx',sheet_name='input_coal')
# del df_input["Unnamed: 3"]
# df_output=df_output.loc[((df_output['ash_%_blend']>=8) & (df_output['ash_%_blend']<=10)) & 
#                         ((df_output['vm_%_blend']>=22.5) & (df_output['vm_%_blend']<=24)) &
#                        (df_output['csn_index_blend']>=6)]
df_output.to_csv(r'D:\tata_metaliks\coal_blend_optimization\automation\output\model_projections.csv',index=False)

engine=create_engine('mssql+pymssql://sa:orion@6789@PROTIVITIUAT:49915/TML')

try:

    frame = df_output.to_sql('coal_blend_optimization', engine, index = False, if_exists='replace')
    frame_ip= input_file.to_sql('cbo_input', engine, index = False, if_exists='replace')
    
except ValueError as vx:

    print(vx)

except Exception as ex:   

    print(ex)

else:

    print("Table created successfully.")

time.sleep(20)
# print ("Output Generated Successfully!!!")
#input ("Press Enter to Exit..")

The Traceback Error is below:

Traceback (most recent call last):
  File "D:\tata_metaliks\coal_blend_optimization\automation\code\run_model.py", line 272, in <module>
    prediction_dict[key.split('_')[0]]=list(model_dict[key].predict(final_combination))
  File "C:\ProgramData\Anaconda3\lib\site-packages\xgboost\sklearn.py", line 818, in predict
    if self._can_use_inplace_predict():
  File "C:\ProgramData\Anaconda3\lib\site-packages\xgboost\sklearn.py", line 758, in _can_use_inplace_predict
    params = self.get_params()
  File "C:\ProgramData\Anaconda3\lib\site-packages\xgboost\sklearn.py", line 438, in get_params
    params = super().get_params(deep)
AttributeError: 'super' object has no attribute 'get_params'
0 Answers
Related