{"cells":[{"metadata":{},"cell_type":"markdown","source":"## Competição Kaggle de Machine Learning - Julho/2019\nPredicting Molecular Properties\nhttps://www.kaggle.com/c/champs-scalar-coupling/\n## MARCIO DE LIMA\nAs submissões para esta competição serão avaliadas pelo MAE.\nFor this metric, the MAE for any group has a floor of 1e-9, so that the minimum (best) possible score for perfect predictions is approximately -20.7232.\n\nObservações importantes => Não entendo nada de química molecular kkkk.  \n\n** SE ESSE CODIGO FOR UTIL, VOTE , POR FAVOR **"},{"metadata":{},"cell_type":"markdown","source":"## Objetivo\nThis challenge aims to predict interactions between atoms. The main task is develop an algorithm that can predict the magnetic interaction between two atoms in a molecule (i.e., the scalar coupling constant)\n\nIn this competition, you will be predicting the scalar_coupling_constant between atom pairs in molecules, given the two atom types (e.g., C and H), the coupling type (e.g., 2JHC), and any features you are able to create from the molecule structure (xyz) files."},{"metadata":{"trusted":true},"cell_type":"code","source":"# Importando as bibliotecas\nimport pandas as pd\nimport numpy as np\nimport matplotlib.pyplot as plt\nfrom IPython.core.pylabtools import figsize\nimport seaborn as sns\nimport warnings\n\n%matplotlib inline\nwarnings.filterwarnings(\"ignore\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Carregando os arquivos\ndf = pd.read_csv('../input/train.csv')\n\ndf_energia = pd.read_csv('../input/potential_energy.csv')\ndf_charges = pd.read_csv('../input/mulliken_charges.csv')\ndf_estrutura = pd.read_csv('../input/structures.csv')\n\ndf.head(5)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df_teste = pd.read_csv('../input/test.csv')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Mostrando as estruturas dos Datasets\ndf.info()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Mostrando as estruturas dos Datasets - Energia\ndf_energia.info()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Mostrando as estruturas dos Datasets - Estrutura\ndf_estrutura.info()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#Checando valores NA nos dados\ndf.isna().any()[lambda x: x]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df_teste.isna().any()[lambda x: x]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df_estrutura.isna().any()[lambda x: x]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df_energia.isna().any()[lambda x: x]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Coletando os dados - Merge / Mesclagem dos DataSets\ndf = pd.merge(df, df_energia, how = 'left',\n                  left_on  = ['molecule_name'],\n                  right_on = ['molecule_name'])\n\ndf = pd.merge(df, df_charges, how = 'left',\n                  left_on  = ['molecule_name','atom_index_0'],\n                  right_on = ['molecule_name','atom_index'])\n\ndf = df.drop('atom_index', axis=1)\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df = pd.merge(df, df_charges, how = 'left',\n                  left_on  = ['molecule_name','atom_index_1'],\n                  right_on = ['molecule_name','atom_index'])\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df = df.drop('atom_index', axis=1)\ndf.head(10)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#Replicando para os dados de Teste\ndf_teste = pd.merge(df_teste, df_energia, how = 'left',\n                  left_on  = ['molecule_name'],\n                  right_on = ['molecule_name'])\n\ndf_teste = pd.merge(df_teste, df_charges, how = 'left',\n                  left_on  = ['molecule_name','atom_index_0'],\n                  right_on = ['molecule_name','atom_index'])\n\ndf_teste = df_teste.drop('atom_index', axis=1)\n\ndf_teste = pd.merge(df_teste, df_charges, how = 'left',\n                  left_on  = ['molecule_name','atom_index_1'],\n                  right_on = ['molecule_name','atom_index'])\n\ndf_teste = df_teste.drop('atom_index', axis=1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Coletando os dados - Merge / Mesclagem dos DataSets - Parte 2\ndf = pd.merge(df, df_estrutura, how = 'left',\n                  left_on  = ['molecule_name','atom_index_0'],\n                  right_on = ['molecule_name','atom_index'])\n\ndf = df.rename(columns={'atom': 'atom_0',\n                            'x': 'x_0',\n                            'y': 'y_0',\n                            'z': 'z_0'})\n\ndf = df.drop('atom_index', axis=1)\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"\ndf = pd.merge(df, df_estrutura, how = 'left',\n                 left_on  = ['molecule_name','atom_index_1'],\n                 right_on = ['molecule_name','atom_index'])\n\ndf = df.rename(columns={'atom': 'atom_1',\n                            'x': 'x_1',\n                            'y': 'y_1',\n                            'z': 'z_1'})\n\ndf = df.drop('atom_index', axis=1)\n\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df.head(10)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Replicando - Parte 2 para o Teste\ndf_teste = pd.merge(df_teste, df_estrutura, how = 'left',\n                  left_on  = ['molecule_name','atom_index_0'],\n                  right_on = ['molecule_name','atom_index'])\n\ndf_teste = df_teste.rename(columns={'atom': 'atom_0',\n                            'x': 'x_0',\n                            'y': 'y_0',\n                            'z': 'z_0'})\n\ndf_teste = df_teste.drop('atom_index', axis=1)\n\ndf_teste = pd.merge(df_teste, df_estrutura, how = 'left',\n                 left_on  = ['molecule_name','atom_index_1'],\n                 right_on = ['molecule_name','atom_index'])\n\ndf_teste = df_teste.rename(columns={'atom': 'atom_1',\n                            'x': 'x_1',\n                            'y': 'y_1',\n                            'z': 'z_1'})\n\ndf_teste = df_teste.drop('atom_index', axis=1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df.dtypes","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Criando nova coluna do type\ndf['type1'] = df['type'].apply(lambda x: x[0])\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df_teste['type1'] = df_teste['type'].apply(lambda x: x[0])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df.head(10)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"Usado alguns pontos do kernel. https://www.kaggle.com/seriousran/just-speed-up-calculate-distance-from-benchmark"},{"metadata":{"trusted":true},"cell_type":"code","source":"df['atom_0'].unique()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df['atom_1'].unique()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Radius dos átomos - Nova Coluna\ndf['rad'] = df['atom_0'].map({'H':0.43, 'C':0.82, 'N':0.8, 'O':0.78, 'F':0.76})\ndf['rad_1'] = df['atom_1'].map({'H':0.43, 'C':0.82, 'N':0.8, 'O':0.78, 'F':0.76})\n\n# Nova coluna de Eletrons negativos\ndf['electro'] = df['atom_0'].map({'H':2.2, 'C':2.55, 'N':3.04, 'O':3.44, 'F':3.98})\ndf['electro1'] = df['atom_1'].map({'H':2.2, 'C':2.55, 'N':3.04, 'O':3.44, 'F':3.98})\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df_teste.dtypes","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Radius dos átomos - Nova Coluna - TESTE\ndf_teste['rad'] = df_teste['atom_0'].map({'H':0.43, 'C':0.82, 'N':0.8, 'O':0.78, 'F':0.76})\ndf_teste['rad_1'] = df_teste['atom_1'].map({'H':0.43, 'C':0.82, 'N':0.8, 'O':0.78, 'F':0.76})\n\n# Nova coluna de Eletrons negativos  - TESTE\ndf_teste['electro'] = df_teste['atom_0'].map({'H':2.2, 'C':2.55, 'N':3.04, 'O':3.44, 'F':3.98})\ndf_teste['electro1'] = df_teste['atom_1'].map({'H':2.2, 'C':2.55, 'N':3.04, 'O':3.44, 'F':3.98})","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df.head(5)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#Limpando a Memória\ndel([df_energia, df_charges, df_estrutura])\n","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Calculo das Distancias entre os Atomos"},{"metadata":{"trusted":true},"cell_type":"code","source":"# Calculando a distancia entre os 2 atómos - Nova coluna\ndf[\"distance\"] = ((df['x_0']-df['x_1'])**2 + (df['y_0']-df['y_1'])**2 + (df['z_0']-df['z_1'])**2) ** (1/2)\n# Calculando o mulliken entre os 2 atómos - Nova coluna\ndf['charge'] = ((df['mulliken_charge_x'] - df['mulliken_charge_y']) **2) ** (1/2)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Calculando a distancia entre os 2 atómos - Nova coluna - TESTE\ndf_teste[\"distance\"] = ((df_teste['x_0']-df_teste['x_1'])**2 + (df_teste['y_0']-df_teste['y_1'])**2 + (df_teste['z_0']-df_teste['z_1'])**2) ** (1/2)\n# Calculando o mulliken entre os 2 atómos - Nova coluna\ndf_teste['charge'] = ((df_teste['mulliken_charge_x'] - df_teste['mulliken_charge_y']) **2) ** (1/2)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#Calculando a distancia por molécula individualmente e calculo a diferença entre as duas\ndf[\"distance_0\"] = 1 / (((df['x_0']**2) + (df['y_0']**2) + (df['z_0']**2)) ** (1/2) ** 3 )\ndf[\"distance_1\"] = 1 / (((df['x_1']**2) + (df['y_1']**2) + (df['z_1']**2)) ** (1/2) ** 3 )\ndf[\"distance_dif\"] = (df[\"distance_0\"] * df[\"distance_1\"]) / (df[\"distance_0\"] + df[\"distance_1\"])\n\n#Calculando a distancia por molécula individualmente e calculo a diferença entre as duas utilizando o radios das moléculas\ndf[\"distance_0_Rad\"] = 1/((df[\"distance_0\"]-df[\"rad\"])** (1/2) ** 3 )\ndf[\"distance_1_Rad\"] = 1/((df[\"distance_1\"]-df[\"rad_1\"])** (1/2) ** 3 )\ndf[\"distance_dif_Rad\"] = (df[\"distance_0_Rad\"] * df[\"distance_1_Rad\"]) / (df[\"distance_0_Rad\"] + df[\"distance_1_Rad\"]) \n\n#Calculo dos eletrons\ndf[\"distance_0_Elec\"] = (df[\"distance_0\"]*df[\"electro\"])** 3\ndf[\"distance_1_Elec\"] = (df[\"distance_1\"]*df[\"electro1\"])** 3\ndf[\"distance_dif_Elec\"] = (df[\"distance_0_Elec\"] * df[\"distance_1_Elec\"]) / (df[\"distance_0_Elec\"] + df[\"distance_1_Elec\"]) \n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#Replicando para o TESTE\ndf_teste[\"distance_0\"] = 1 / (((df_teste['x_0']**2) + (df_teste['y_0']**2) + (df_teste['z_0']**2)) ** (1/2) ** 3 )\ndf_teste[\"distance_1\"] = 1 / (((df_teste['x_1']**2) + (df_teste['y_1']**2) + (df_teste['z_1']**2)) ** (1/2) ** 3 )\ndf_teste[\"distance_dif\"] = (df_teste[\"distance_0\"] * df_teste[\"distance_1\"]) / (df_teste[\"distance_0\"] + df_teste[\"distance_1\"])\n\n#Calculando a distancia por molécula individualmente e calculo a diferença entre as duas utilizando o radios das moléculas\ndf_teste[\"distance_0_Rad\"] = 1/((df_teste[\"distance_0\"]-df_teste[\"rad\"])** (1/2) ** 3 )\ndf_teste[\"distance_1_Rad\"] = 1/((df_teste[\"distance_1\"]-df_teste[\"rad_1\"])** (1/2) ** 3 )\ndf_teste[\"distance_dif_Rad\"] = (df_teste[\"distance_0_Rad\"] * df_teste[\"distance_1_Rad\"]) / (df_teste[\"distance_0_Rad\"] + df_teste[\"distance_1_Rad\"]) \n\n#Calculo dos eletrons\ndf_teste[\"distance_0_Elec\"] = (df_teste[\"distance_0\"]*df_teste[\"electro\"])** 3\ndf_teste[\"distance_1_Elec\"] = (df_teste[\"distance_1\"]*df_teste[\"electro1\"])** 3\ndf_teste[\"distance_dif_Elec\"] = (df_teste[\"distance_0_Elec\"] * df_teste[\"distance_1_Elec\"]) / (df_teste[\"distance_0_Elec\"] + df_teste[\"distance_1_Elec\"]) \n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#Checando valores NA nos dados\ndf.isna().any()[lambda x: x]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df_teste.isna().any()[lambda x: x]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#Preenchendo NAs\ndf['distance_1_Rad'].fillna((df['distance_1_Rad'].mean()), inplace=True)\ndf['distance_dif_Rad'].fillna((df['distance_dif_Rad'].mean()), inplace=True)\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#Preenchendo NAs\ndf_teste['distance_1_Rad'].fillna((df_teste['distance_1_Rad'].mean()), inplace=True)\ndf_teste['distance_dif_Rad'].fillna((df_teste['distance_dif_Rad'].mean()), inplace=True)\ndf_teste['potential_energy'].fillna((df_teste['potential_energy'].mean()), inplace=True)\ndf_teste['mulliken_charge_x'].fillna((df_teste['mulliken_charge_x'].mean()), inplace=True)\ndf_teste['mulliken_charge_y'].fillna((df_teste['mulliken_charge_y'].mean()), inplace=True)\ndf_teste['charge'].fillna((df_teste['charge'].mean()), inplace=True)\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Separando as colunas que não serão usadas no modelo\ndf = df.drop('id', axis=1)\ndf = df.drop('molecule_name', axis=1)\ndf = df.drop('atom_index_0', axis=1)\ndf = df.drop('atom_index_1', axis=1)\ndf = df.drop('type', axis=1)\ndf = df.drop('atom_0', axis=1)\ndf = df.drop('atom_1', axis=1)\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df_teste = df_teste.drop('id', axis=1)\ndf_teste = df_teste.drop('molecule_name', axis=1)\ndf_teste = df_teste.drop('atom_index_0', axis=1)\ndf_teste = df_teste.drop('atom_index_1', axis=1)\ndf_teste = df_teste.drop('type', axis=1)\ndf_teste = df_teste.drop('atom_0', axis=1)\ndf_teste = df_teste.drop('atom_1', axis=1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df_treino = df","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"del(df)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Correlação com a Variavel TARGET => scalar_coupling_constant\ndf_treino[df_treino.columns.drop('scalar_coupling_constant')].corrwith(df_treino.scalar_coupling_constant)\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Visualizando e analisando os dados\n\n# Construindo um gráfico de HEATMAP\nf, ax = plt.subplots(figsize=(15, 12))\nsns.heatmap(df_treino.corr(),linewidths=.5, ax=ax)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Histogramas\n#df_treino.plot(kind = 'hist', subplots = True, layout = (7,4), sharex = False, figsize=(20,70))\n#plt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Box-Plot\ndf_treino.plot(kind = 'box', subplots = True, layout = (7,4), sharex = False, sharey = False, figsize=(20,70))\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df_treino.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df_teste.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Ajustando e padronizando as escalas - Normalização\nfrom sklearn.preprocessing import MinMaxScaler\n\narray = df_treino.values\n\n# Separando o array em componentes de input (X) e output (Y)\nX = array[:,1:26]\nX_sub = df_teste.values\nY = array[:,0]\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#Limpando a Memória\ndel(df_teste)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Gerando a nova escala (normalizando os dados)\nscaler = MinMaxScaler(feature_range = (0, 1))\nrescaledX = scaler.fit_transform(X)\nrescaledX_teste = scaler.fit_transform(X_sub)\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Comecando o modelo - Versao 1 - Mais basico e simples\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.metrics import mean_absolute_error\nfrom sklearn.linear_model import LinearRegression\n\n# Divide os dados em treino e teste\nX_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size = 0.30, random_state = 5)\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Criando o modelo\nmodelo = LinearRegression()\n\n# Treinando o modelo\nmodelo.fit(X_train, Y_train)\n\n# Fazendo previsões\nY_pred = modelo.predict(X_test)\n\n# Resultado\nmae = mean_absolute_error(Y_test, Y_pred)\nprint('Modelo 1 - Regressao Linear => MAE = %0.4f' % mae)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Modelo 2 - lightgbm simples\nimport lightgbm as lgb\n\ngbm = lgb.LGBMRegressor(num_leaves=50,\n                        learning_rate=0.05,\n                        n_estimators=100)\ngbm.fit(X_train, Y_train,\n        eval_set=[(X_test, Y_test)],\n        eval_metric='l1',\n        early_stopping_rounds=100,\n        verbose=0\n       )\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"Y_pred = gbm.predict(X_test, num_iteration=gbm.best_iteration_)\n\n# Resultado\nmae = np.log(mean_absolute_error(Y_test, Y_pred))\nprint('Modelo 2 - LightGBM => MAE = %0.4f' % mae)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Funcoes utilitaria\n# Treinamento e resultado do modelo - funcao generica\ndef treine_e_avalie(model, X, y, X_test, y_test):\n    \n    # Predicao\n    model_pred = treino_e_predicao(model, X, y, X_test)\n    #Performance\n    model_mae = np.log(mean_absolute_error(y_test, model_pred))\n    \n    # Retorno da Performance do modelo\n    return model_mae\n\ndef treino_e_predicao(model, X, y, X_test):\n    \n    # FIT\n    model.fit(X, y)\n    # Predicao\n    return model.predict(X_test)\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Importando mais modelos \nfrom sklearn.linear_model import LinearRegression\nfrom sklearn.ensemble import RandomForestRegressor, GradientBoostingRegressor\nfrom sklearn.neighbors import KNeighborsRegressor","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Modelo 3 - KNN\nknn = KNeighborsRegressor(n_neighbors=5)\nknn_mae = treine_e_avalie(knn, X_train, Y_train, X_test, Y_test)\n\nprint('Modelo 3 - KNN => MAE = %0.4f' % knn_mae)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Modelo 4 - GradientBoostingRegressor\ngradient_boosted = GradientBoostingRegressor(random_state=60)\ngradient_boosted_mae = treine_e_avalie(gradient_boosted, X_train, Y_train, X_test, Y_test)\n\nprint('Modelo 4 - GradientBoostingRegressor = %0.4f' % gradient_boosted_mae)\n","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# ESCOLHIDO MODELO 2 - LIGHTGBM - MENOR MAE"},{"metadata":{"trusted":true},"cell_type":"code","source":"#Otimizando o modelo 2\n#from sklearn.model_selection import GridSearchCV\n\n#estimator = lgb.LGBMRegressor()\n\n#param_grid = {\n#    'learning_rate': [0.005,0.05, 0.1, 1],\n#    'n_estimators': [100],\n#    'num_leaves': [50],\n#    'boosting_type' : ['gbdt','dart'],\n#    'objective' : ['regression'],\n#    'colsample_bytree' : [0.65, 0.66],\n#    'subsample' : [0.7,0.75],\n#    'reg_alpha' : [1,1.2],\n#    'reg_lambda' : [1,1.2,1.4]    \n#}\n\n#gbm1 = GridSearchCV(estimator, param_grid, cv=5, verbose=0)\n#gbm1.fit(X_train, Y_train)\n\n#print('Melhores parametros:', gbm1.best_params_)\n#print('Melhor score:', gbm1.best_score_)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Modelo 5 - otimizado\ngbm = lgb.LGBMRegressor(num_leaves=100,\n                        learning_rate=1.10,\n                        n_estimators=500,\n                        boosting_type='dart',\n                        metric='mae',\n                        objective='regression_l1',\n                        #max_depth=19,\n                        #subsample=0.75,\n                        verbosity=-0,\n                        reg_alpha=1.2,\n                        reg_lambda=1,\n                        #sub_feature = 0.75,\n                        #sub_row = 0.50,\n                        #bagging_freq = 1,                        \n                        #colsample_bytree=0.65\n                        )\ngbm.fit(X_train, Y_train,\n        eval_set=[(X_test, Y_test)],\n        eval_metric='l1',\n        early_stopping_rounds=200,\n        verbose=1\n       )\n\nY_pred = gbm.predict(X_test, num_iteration=gbm.best_iteration_)\n\n# Resultado\nmae = np.log(mean_absolute_error(Y_test, Y_pred))\nprint('Modelo 5 - LightGBM - Otimizado => MAE = %0.4f' % mae)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#Features mais importantes do modelo\n#sorted(zip(gbm.feature_importances_, df_treino.columns), reverse=True)\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#Gerando os dados de submissao e predição\ndf_submission = pd.read_csv('../input/sample_submission.csv')\nresultado = gbm.predict(X_sub, num_iteration=gbm.best_iteration_)\ndf_submission['scalar_coupling_constant'] = resultado","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#Gravando Arquivo de Submissao\ndf_submission.to_csv('submission.csv', index=False)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## FIM\n\n## OBRIGADO"}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.7.3"}},"nbformat":4,"nbformat_minor":1}