{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.14","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":81933,"databundleVersionId":9643020,"sourceType":"competition"}],"dockerImageVersionId":30804,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"#https://www.tensorflow.org/tutorials/generative/autoencoder\n\nimport os\n\nos.environ[\"KERAS_BACKEND\"] = \"tensorflow\"\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\nimport matplotlib.pyplot as plt\nfrom pprint import pprint\n\nimport sklearn.compose as sk_co \nimport sklearn.preprocessing as sk_pre \nimport sklearn.pipeline as sk_pipe\nimport sklearn.impute as sk_imp\nimport sklearn.model_selection as sk_md_se\nimport sklearn as  sk\nsk.set_config(transform_output=\"pandas\")\n\nimport tensorflow as tf\nimport keras as ke\nimport keras.utils as ke_ut\n\nprint(\"Tensorflow version \" + tf.__version__)","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2024-12-20T22:44:11.920683Z","iopub.execute_input":"2024-12-20T22:44:11.921173Z","iopub.status.idle":"2024-12-20T22:44:11.929311Z","shell.execute_reply.started":"2024-12-20T22:44:11.921132Z","shell.execute_reply":"2024-12-20T22:44:11.928132Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"config = {\n    \"debug\": False,\n    \"verbose\": 1,\n    \"cleaning_bia_bia_fmi_fat\": False,\n \n    \"test_size\": 0.3,\n    \"batch_size\": 4,\n}\n\nclass ConfigCMI():\n    debug = False\n    verbose = 1\n    batch_size = 4\n    num_classes = 4\n    learning_rate = 0.001\n\nTARGET_NAMES = ['PCIAT-Season',\n                'PCIAT-PCIAT_01',\n                'PCIAT-PCIAT_02',\n                'PCIAT-PCIAT_03',\n                'PCIAT-PCIAT_04',\n                'PCIAT-PCIAT_05',\n                'PCIAT-PCIAT_06',\n                'PCIAT-PCIAT_07',\n                'PCIAT-PCIAT_08',\n                'PCIAT-PCIAT_09',\n                'PCIAT-PCIAT_10',\n                'PCIAT-PCIAT_11',\n                'PCIAT-PCIAT_12',\n                'PCIAT-PCIAT_13',\n                'PCIAT-PCIAT_14',\n                'PCIAT-PCIAT_15',\n                'PCIAT-PCIAT_16',\n                'PCIAT-PCIAT_17',\n                'PCIAT-PCIAT_18',\n                'PCIAT-PCIAT_19',\n                'PCIAT-PCIAT_20',\n                'PCIAT-PCIAT_Total']\n\nCATEGORICAL_FEATURES_NAMES_STR= ['Basic_Demos-Enroll_Season',\n                                  'CGAS-Season',\n                                  'Physical-Season',\n                                  'Fitness_Endurance-Season',\n                                  'FGC-Season',\n                                  'BIA-Season',\n                                  'PAQ_A-Season',\n                                  'PAQ_C-Season',\n                                  'PCIAT-Season',\n                                  'SDS-Season',\n                                  'PreInt_EduHx-Season']\n\ndef dataframe_to_dataset(dataframe, target_name=None, output_mode=None):\n    dataframe = dataframe.copy()\n    if target_name is not None:\n        if output_mode is None:\n            labels = dataframe.pop(target_name)\n        elif output_mode == 'one_hot':\n            labels = pd.get_dummies(dataframe.pop(target_name))\n        ds = tf.data.Dataset.from_tensor_slices((dict(dataframe), labels))\n    else:\n        ds = tf.data.Dataset.from_tensor_slices(dict(dataframe))\n    #ds = ds.shuffle(buffer_size=len(dataframe))\n    return ds\n\n\n####################################################################################\n#######################        Read data file                #######################\n####################################################################################\n\n\n# Parameters\ntrain_data_file = \"/kaggle/input/child-mind-institute-problematic-internet-use/train.csv\" # \"./res/train.csv\"#\ntest_data_file = \"/kaggle/input/child-mind-institute-problematic-internet-use/test.csv\" #\"./res/test.csv\n\ntrain_df_from_file = pd.read_csv(train_data_file, index_col=\"id\")\ntest_df_from_file = pd.read_csv(test_data_file, index_col=\"id\")\n\ntrain_df = train_df_from_file.copy()\ntest_df = test_df_from_file.copy()\n\n####################################################################################\n#######################           Cleaning data             #######################\n####################################################################################\n#in str columns, nan to '' cf: https://stackoverflow.com/questions/58636087/tensorflow-valueerror-failed-to-convert-a-numpy-array-to-a-tensor-unsupporte see: Zoltan Fedor\n\ncolumns = CATEGORICAL_FEATURES_NAMES_STR\nfor col in columns:\n    train_df[col] = train_df[col].fillna('')\n    if col != 'PCIAT-Season':\n        test_df[col] = test_df[col].fillna('')\n\n####################################################################################\n#######################      learning sii from               #######################\n####################################################################################\nif 1:\n    train_df_sii = train_df[TARGET_NAMES+['sii']].copy()\n    test_df_sii =  train_df_sii[train_df_sii['sii'].isna()]\n    train_df_sii = train_df_sii.dropna(subset=['sii'])\n    \n    val_df_sii = train_df_sii.sample(frac=0.2, random_state=1337)\n    train_df_sii = train_df_sii.drop(val_df_sii.index)\n\n    train_ds_sii = dataframe_to_dataset(train_df_sii, 'sii', output_mode=\"one_hot\").batch(config[\"batch_size\"])\n    val_ds_sii = dataframe_to_dataset(val_df_sii, 'sii', output_mode=\"one_hot\").batch(config[\"batch_size\"])\n\n    feature_space_sii = ke_ut.FeatureSpace(\n        features={\n            # Categorical features encoded as integers\n            'PCIAT-Season':   \"string_categorical\",\n            \"PCIAT-PCIAT_01\": \"integer_categorical\",\n            \"PCIAT-PCIAT_02\": \"integer_categorical\",\n            \"PCIAT-PCIAT_03\": \"integer_categorical\",\n            \"PCIAT-PCIAT_04\": \"integer_categorical\",\n            \"PCIAT-PCIAT_05\": \"integer_categorical\",\n            \"PCIAT-PCIAT_06\": \"integer_categorical\",\n            \"PCIAT-PCIAT_07\": \"integer_categorical\",\n            \"PCIAT-PCIAT_08\": \"integer_categorical\",\n            \"PCIAT-PCIAT_09\": \"integer_categorical\",\n            \"PCIAT-PCIAT_10\": \"integer_categorical\",\n            \"PCIAT-PCIAT_11\": \"integer_categorical\",\n            \"PCIAT-PCIAT_12\": \"integer_categorical\",\n            \"PCIAT-PCIAT_13\": \"integer_categorical\",\n            \"PCIAT-PCIAT_14\": \"integer_categorical\",\n            \"PCIAT-PCIAT_15\": \"integer_categorical\",\n            \"PCIAT-PCIAT_16\": \"integer_categorical\",\n            \"PCIAT-PCIAT_17\": \"integer_categorical\",\n            \"PCIAT-PCIAT_18\": \"integer_categorical\",\n            \"PCIAT-PCIAT_19\": \"integer_categorical\",\n            \"PCIAT-PCIAT_20\": \"integer_categorical\",    \n            'PCIAT-PCIAT_Total': \"float_discretized\",    \n        },\n        output_mode=\"concat\",\n    )\n    \n    train_ds_sii_with_no_labels = train_ds_sii.map(lambda x, _: x)\n    feature_space_sii.adapt(train_ds_sii_with_no_labels)\n    \n    preprocessed_train_ds_sii = train_ds_sii.map(\n        lambda x, y: (feature_space_sii(x), y), num_parallel_calls=tf.data.AUTOTUNE  )\n    preprocessed_train_ds_sii = preprocessed_train_ds_sii.prefetch(tf.data.AUTOTUNE)\n\n    preprocessed_val_ds_sii = val_ds_sii.map(\n        lambda x, y: (feature_space_sii(x), y), num_parallel_calls=tf.data.AUTOTUNE  )\n    preprocessed_val_ds_sii = preprocessed_val_ds_sii.prefetch(tf.data.AUTOTUNE)\n\n    dict_inputs_sii = feature_space_sii.get_inputs()\n    encoded_features_sii = feature_space_sii.get_encoded_features()\n    \n    x = ke.layers.Dense(32, activation=\"relu\")(encoded_features_sii)\n    x = ke.layers.Dropout(0.5)(x)\n    x = ke.layers.Dense(32, activation=\"relu\")(x)\n    x = ke.layers.Dropout(0.5)(x)\n    predictions_sii = ke.layers.Dense(ConfigCMI.num_classes, activation=\"softmax\")(x)\n    \n    \n    training_model_sii = ke.Model(inputs=encoded_features_sii, outputs=predictions_sii)\n    training_model_sii.compile(\n        optimizer=\"adam\", loss=\"binary_crossentropy\", metrics=[\"accuracy\"]\n    )\n    \n    inference_model_sii = ke.Model(inputs=dict_inputs_sii, outputs=predictions_sii)\n\n    training_model_sii.fit(\n        preprocessed_train_ds_sii,\n        epochs=20,\n        validation_data=preprocessed_val_ds_sii,\n        verbose=2,\n    )\n    \n    test_ds_sii = dataframe_to_dataset(test_df_sii[TARGET_NAMES])\n    test_ds_sii = test_ds_sii.batch(config['batch_size']) #batch is not to be done inplace\n    predictions = inference_model_sii.predict(test_ds_sii)\n\n\n    _, accuracy = training_model_sii.evaluate(preprocessed_val_ds_sii, verbose=0)\n    print(f\"Test accuracy: {round(accuracy * 100, 2)}%\")\n\n    #train_df.loc[test_df_sii.index, 'sii'] = np.squeeze(np.round(predictions))\n    train_df.loc[test_df_sii.index, 'sii'] = np.argmax(np.squeeze(predictions), axis=1)\n\n\ntrain_df = train_df.dropna(subset=['sii'])\ntrain_df['sii'] = train_df['sii']\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-20T22:44:11.942991Z","iopub.execute_input":"2024-12-20T22:44:11.943411Z","iopub.status.idle":"2024-12-20T22:44:51.919881Z","shell.execute_reply.started":"2024-12-20T22:44:11.943370Z","shell.execute_reply":"2024-12-20T22:44:51.918752Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def encode_inputs(inputs, use_embedding=False):\n    encoded_features = []\n    for feature_name in inputs:\n        if feature_name in CATEGORICAL_FEATURE_NAMES:\n            \n            vocabulary = CATEGORICAL_FEATURES_WITH_VOCABULARY[feature_name]\n            # Create a lookup to convert string values to an integer indices.\n            # Since we are not using a mask token nor expecting any out of vocabulary\n            # (oov) token, we set mask_token to None and  num_oov_indices to 0.\n            lookup = layers.StringLookup(\n                vocabulary=vocabulary,\n                mask_token=None,\n                num_oov_indices=0,\n                output_mode=\"int\",\n            )\n\n            # Convert the string input values into integer indices.\n            encoded_feature = lookup(inputs[feature_name])\n            embedding_dims = int(math.sqrt(len(vocabulary)))\n            # Create an embedding layer with the specified dimensions.\n            embedding = layers.Embedding(\n                input_dim=len(vocabulary), output_dim=embedding_dims\n            )\n            # Convert the index values to embedding representations.\n            encoded_feature = embedding(encoded_feature)\n        else:\n            # Use the numerical features as-is.\n            encoded_feature = keras.ops.expand_dims(inputs[feature_name], -1)\n\n        encoded_features.append(encoded_feature)\n\n    all_features = layers.concatenate(encoded_features)\n    return all_features\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-20T22:44:51.922024Z","iopub.execute_input":"2024-12-20T22:44:51.922529Z","iopub.status.idle":"2024-12-20T22:44:51.931394Z","shell.execute_reply.started":"2024-12-20T22:44:51.922478Z","shell.execute_reply":"2024-12-20T22:44:51.930136Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"for col in TARGET_NAMES:\n    _ = train_df.pop(col)\n\n\n####################################################################################\n#######################           Cleaning data             #######################\n####################################################################################\n#in str columns, nan to '' cf: https://stackoverflow.com/questions/58636087/tensorflow-valueerror-failed-to-convert-a-numpy-array-to-a-tensor-unsupporte see: Zoltan Fedor\n\ncolumns = CATEGORICAL_FEATURES_NAMES_STR\nfor col in columns:\n    if col != 'PCIAT-Season':\n        train_df[col] = train_df[col].fillna('') #because CATEGORICAL_FEATURES_NAMES_STR have been poped from train_df\n        test_df[col] = test_df[col].fillna('')\n\n####################################################################################\n#######################           Splitting data             #######################\n####################################################################################\nval_df = train_df.sample(frac=0.2, random_state=1337)\ntrain_df = train_df.drop(val_df.index)\n\nprint(\n    \"Using %d samples for training and %d for validation\"\n    % (len(train_df), len(val_df))\n)\n\n####################################################################################\n#######################          Dataset                     #######################\n####################################################################################\ntrain_ds = dataframe_to_dataset(train_df, 'sii', output_mode='one_hot')\nval_ds = dataframe_to_dataset(val_df, 'sii', output_mode='one_hot')\n\ntrain_ds = train_ds.batch(config[\"batch_size\"])\nval_ds = val_ds.batch(config[\"batch_size\"])\n\n####################################################################################\n#######################          Configuring a FeatureSpace  #######################\n####################################################################################\n\nfeature_space = ke_ut.FeatureSpace(\n    features={\n        # Categorical features encoded as integers\n        \"BIA-BIA_Activity_Level_num\": ke_ut.FeatureSpace.integer_categorical(),#FeatureSpace.integer_hashed(num_bins=8, output_mode=\"int\")\n        \"FGC-FGC_GSND_Zone\": \"integer_categorical\",\n        \"FGC-FGC_GSD_Zone\": \"integer_categorical\",\n        \"BIA-BIA_Frame_num\": \"integer_categorical\",\n        \"PreInt_EduHx-computerinternet_hoursday\": \"integer_categorical\",\n        #\"PCIAT-PCIAT_01\": \"integer_categorical\",\n        #\"PCIAT-PCIAT_02\": \"integer_categorical\",\n        #\"PCIAT-PCIAT_03\": \"integer_categorical\",\n        #\"PCIAT-PCIAT_04\": \"integer_categorical\",\n        #\"PCIAT-PCIAT_05\": \"integer_categorical\",\n        #\"PCIAT-PCIAT_06\": \"integer_categorical\",\n        #\"PCIAT-PCIAT_07\": \"integer_categorical\",\n        #\"PCIAT-PCIAT_08\": \"integer_categorical\",\n        #\"PCIAT-PCIAT_09\": \"integer_categorical\",\n        #\"PCIAT-PCIAT_10\": \"integer_categorical\",\n        #\"PCIAT-PCIAT_11\": \"integer_categorical\",\n        #\"PCIAT-PCIAT_12\": \"integer_categorical\",\n        #\"PCIAT-PCIAT_13\": \"integer_categorical\",\n        #\"PCIAT-PCIAT_14\": \"integer_categorical\",\n        #\"PCIAT-PCIAT_15\": \"integer_categorical\",\n        #\"PCIAT-PCIAT_16\": \"integer_categorical\",\n        #\"PCIAT-PCIAT_17\": \"integer_categorical\",\n        #\"PCIAT-PCIAT_18\": \"integer_categorical\",\n        #\"PCIAT-PCIAT_19\": \"integer_categorical\",\n        #\"PCIAT-PCIAT_20\": \"integer_categorical\",\n        \n        # BINARY_FEATURES_NAMES\n        \"Basic_Demos-Sex\": \"integer_categorical\",\n        \"FGC-FGC_TL_Zone\": \"integer_categorical\",\n        \"FGC-FGC_SRL_Zone\": \"integer_categorical\",\n        \"FGC-FGC_SRR_Zone\": \"integer_categorical\",\n        \"FGC-FGC_CU_Zone\": \"integer_categorical\",\n        \"FGC-FGC_PU_Zone\": \"integer_categorical\",\n        \n        # Categorical feature encoded as string\n        \"Basic_Demos-Enroll_Season\": \"string_categorical\",#FeatureSpace.string_hashed(num_bins=3, output_mode=\"one_hot\")\n        \"CGAS-Season\": \"string_categorical\",\n        \"Physical-Season\": \"string_categorical\",\n        \"Fitness_Endurance-Season\": \"string_categorical\",\n        \"FGC-Season\": \"string_categorical\",\n        \"BIA-Season\": \"string_categorical\",\n        \"PAQ_A-Season\": \"string_categorical\",\n        \"PAQ_C-Season\": \"string_categorical\",\n        #\"PCIAT-Season\": \"string_categorical\",\n        \"SDS-Season\": \"string_categorical\",\n        \"PreInt_EduHx-Season\": \"string_categorical\",\n\n        # Numerical features\n        #\"PCIAT-PCIAT_Total\": \"float_discretized\",\n        \"BIA-BIA_FFM\": \"float_discretized\",\n        \"PAQ_A-PAQ_A_Total\": \"float_discretized\",\n        \"Basic_Demos-Age\": ke_ut.FeatureSpace.float_discretized(num_bins=6),\n        \"FGC-FGC_PU\": \"float_discretized\",\n        \"SDS-SDS_Total_Raw\": \"float_discretized\", \n        \"Physical-Waist_Circumference\": \"float_discretized\",\n        \"FGC-FGC_GSND\": \"float_discretized\",\n        \"BIA-BIA_ICW\": \"float_discretized\",\n        \"BIA-BIA_SMM\": \"float_discretized\",\n        \"SDS-SDS_Total_T\": \"float_discretized\",\n        \"PAQ_C-PAQ_C_Total\": \"float_discretized\",\n        \"Physical-Diastolic_BP\": \"float_discretized\",\n        \"Physical-BMI\": \"float_discretized\",\n        \"Fitness_Endurance-Time_Sec\": \"float_discretized\",\n        \"BIA-BIA_BMC\": \"float_discretized\",\n        \"Physical-Height\": \"float_discretized\",\n        \"BIA-BIA_ECW\": \"float_discretized\",\n        \"Physical-Systolic_BP\": \"float_discretized\",\n        \"BIA-BIA_TBW\": \"float_discretized\",\n        \"BIA-BIA_LDM\": \"float_discretized\",\n        \"Fitness_Endurance-Max_Stage\": \"float_discretized\",\n        \"BIA-BIA_Fat\": \"float_discretized\",\n        \"FGC-FGC_CU\": \"float_discretized\",\n        \"BIA-BIA_FFMI\": \"float_discretized\",\n        \"CGAS-CGAS_Score\": \"float_discretized\",\n        \"FGC-FGC_TL\": \"float_discretized\",\n        \"BIA-BIA_BMI\": \"float_discretized\",\n        \"BIA-BIA_BMR\": \"float_discretized\",\n        \"Physical-HeartRate\": \"float_discretized\",\n        \"FGC-FGC_SRL\": \"float_discretized\",\n        \"FGC-FGC_GSD\": \"float_discretized\",\n        \"Fitness_Endurance-Time_Mins\": \"float_discretized\",\n        \"BIA-BIA_LST\": \"float_discretized\",\n        \"FGC-FGC_SRR\": \"float_discretized\",\n        \"BIA-BIA_FMI\": \"float_discretized\",\n        \"Physical-Weight\": \"float_discretized\",\n        \"BIA-BIA_DEE\": \"float_discretized\",\n        \n        # Numerical features to discretize\n        #\"age\": \"float_discretized\",\n        # Numerical features to normalize\n        #\"\"trestbps\": \"float_normalized\",\n\n    },\n    # We create additional features by hashing\n    # value co-occurrences for the\n    # following groups of categorical features.\n    crosses=[(\"Physical-BMI\", \"Basic_Demos-Age\"),\n                (\"PreInt_EduHx-computerinternet_hoursday\", \"Basic_Demos-Age\"),\n                (\"Physical-BMI\", \"PreInt_EduHx-computerinternet_hoursday\"),\n                (\"BIA-BIA_Fat\", \"BIA-BIA_BMI\"),\n                (\"BIA-BIA_FFMI\", \"BIA-BIA_Fat\"),\n                (\"BIA-BIA_FMI\", \"BIA-BIA_Fat\"),\n                (\"BIA-BIA_LST\", \"BIA-BIA_TBW\"),\n                (\"BIA-BIA_Fat\", \"BIA-BIA_BMR\"),\n                (\"BIA-BIA_Fat\", \"BIA-BIA_DEE\"),\n                (\"BIA-BIA_BMR\", \"Physical-Weight\"),\n                (\"BIA-BIA_DEE\", \"Physical-Weight\"),\n                (\"BIA-BIA_SMM\", \"Physical-Height\"),\n                (\"BIA-BIA_SMM\", \"BIA-BIA_FMI\"),\n                (\"BIA-BIA_TBW\", \"Physical-Weight\"),\n                (\"BIA-BIA_ICW\", \"BIA-BIA_TBW\"),\n                (\"Physical-BMI\", \"Physical-HeartRate\")],\n    \n    # The hashing space for these co-occurrences\n    # wil be 32-dimensional.\n    crossing_dim=32,\n    # Our utility will one-hot encode all categorical\n    # features and concat all features into a single\n    # vector (one vector per sample).\n    output_mode=\"concat\",\n)\n\ntrain_ds_with_no_labels = train_ds.map(lambda x, _: x)\nfeature_space.adapt(train_ds_with_no_labels)\n\nfor x, _ in train_ds.take(1):\n    preprocessed_x = feature_space(x)\n    print(\"preprocessed_x.shape:\", preprocessed_x.shape)\n    print(\"preprocessed_x.dtype:\", preprocessed_x.dtype)\n\n####################################################################################\n#######################           preprocessed data          #######################\n####################################################################################\n\npreprocessed_train_ds = train_ds.map(\n    lambda x, y: (feature_space(x), y), num_parallel_calls=tf.data.AUTOTUNE\n)\npreprocessed_train_ds = preprocessed_train_ds.prefetch(tf.data.AUTOTUNE)\n\npreprocessed_val_ds = val_ds.map(\n    lambda x, y: (feature_space(x), y), num_parallel_calls=tf.data.AUTOTUNE\n)\npreprocessed_val_ds = preprocessed_val_ds.prefetch(tf.data.AUTOTUNE)\n\n####################################################################################\n#######################           inputs and models          #######################\n####################################################################################\n\ndict_inputs = feature_space.get_inputs()\nencoded_features = feature_space.get_encoded_features()\n\ndef get_model(dict_inputs, encoded_features):\n    x = ke.layers.Dense(32, activation=\"relu\")(encoded_features)\n    x = ke.layers.Dropout(0.5)(x)\n    x = ke.layers.Dense(32, activation=\"relu\")(x)\n    x = ke.layers.Dropout(0.5)(x)\n    predictions = ke.layers.Dense(ConfigCMI.num_classes, activation=\"softmax\")(x)\n    \n    \n    training_model = ke.Model(inputs=encoded_features, outputs=predictions)\n    training_model.compile(\n        optimizer=\"adam\", loss=\"binary_crossentropy\", metrics=[\"accuracy\"]\n    )\n    \n    inference_model = ke.Model(inputs=dict_inputs, outputs=predictions)\n    return training_model, inference_model\n\n\ndef create_deep_and_cross_model(inputs, encoded_features):\n    x0 = encoded_features\n    \n    cross = x0\n    hidden_units = [32, 32]\n    dropout_rate = 0.1\n    for _ in hidden_units:\n        units = cross.shape[-1]\n        x = ke.layers.Dense(units)(cross)\n        cross = x0 * x + cross\n    cross = ke.layers.BatchNormalization()(cross)\n    \n    deep = x0\n    for units in hidden_units:\n        deep = ke.layers.Dense(units)(deep)\n        deep = ke.layers.BatchNormalization()(deep)\n        deep = ke.layers.ReLU()(deep)\n        deep = ke.layers.Dropout(dropout_rate)(deep)\n    \n    merged = ke.layers.concatenate([cross, deep])\n    outputs = ke.layers.Dense(units=ConfigCMI.num_classes, activation=\"softmax\")(merged)\n\n    \n    training_model = ke.Model(inputs=encoded_features, outputs=outputs)\n\n    #training_model.compile(\n    #    optimizer=keras.optimizers.Adam(learning_rate=ConfigCMI.learning_rate),\n    #    loss=keras.losses.SparseCategoricalCrossentropy(),\n    #    metrics=[keras.metrics.SparseCategoricalAccuracy()],\n    #)\n    training_model.compile(\n        optimizer=\"adam\", loss=\"binary_crossentropy\", metrics=[\"accuracy\"]\n    )\n\n\n    \n    inference_model = ke.Model(inputs=inputs, outputs=outputs)\n    \n    return training_model, inference_model\n\n####################################################################################\n#######################                              #######################\n####################################################################################\n#training_model, inference_model = get_model(dict_inputs, encoded_features)\ntraining_model, inference_model = create_deep_and_cross_model(dict_inputs, encoded_features)\n\n\n\n\ntraining_model.fit(\n    preprocessed_train_ds,\n    epochs=20,\n    validation_data=preprocessed_val_ds,\n    verbose=2,\n)\n\n_, accuracy = training_model.evaluate(preprocessed_val_ds, verbose=0)\nprint(f\"Test accuracy: {round(accuracy * 100, 2)}%\")\nprint()\nprint()\n\ntest_ds = dataframe_to_dataset(test_df)\ntest_ds = test_ds.batch(config['batch_size']) #batch is not to be done inplace\npredictions = inference_model.predict(test_ds)\n\nprint(\"prediction: \", predictions)\n\n#class_labels = np.round(np.squeeze(predictions))#this is regression not classification\nclass_labels = np.argmax(np.squeeze(predictions), axis=1)\n\n# Create a DataFrame \nresults_df = pd.DataFrame({'id': test_df.index, 'sii': class_labels}) \nprint(results_df)\n\n# Save DataFrame to CSV \nresults_df.to_csv('submission.csv', index=False)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-20T22:44:51.933768Z","iopub.execute_input":"2024-12-20T22:44:51.934220Z","iopub.status.idle":"2024-12-20T22:46:29.125559Z","shell.execute_reply.started":"2024-12-20T22:44:51.934173Z","shell.execute_reply":"2024-12-20T22:46:29.124351Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"for (x,y) in val_ds.take(1):\n    print(\"Input:\", x)\n    print()\n    print(\"Target:\", y)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-20T22:46:29.128461Z","iopub.execute_input":"2024-12-20T22:46:29.128956Z","iopub.status.idle":"2024-12-20T22:46:29.163890Z","shell.execute_reply.started":"2024-12-20T22:46:29.128896Z","shell.execute_reply":"2024-12-20T22:46:29.162792Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_df['sii'].max()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-20T22:46:29.165453Z","iopub.execute_input":"2024-12-20T22:46:29.165954Z","iopub.status.idle":"2024-12-20T22:46:29.174009Z","shell.execute_reply.started":"2024-12-20T22:46:29.165907Z","shell.execute_reply":"2024-12-20T22:46:29.172876Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-20T22:46:29.175722Z","iopub.execute_input":"2024-12-20T22:46:29.176224Z","iopub.status.idle":"2024-12-20T22:46:29.298110Z","shell.execute_reply.started":"2024-12-20T22:46:29.176156Z","shell.execute_reply":"2024-12-20T22:46:29.296970Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-20T22:49:12.091010Z","iopub.execute_input":"2024-12-20T22:49:12.091494Z","iopub.status.idle":"2024-12-20T22:49:12.668095Z","shell.execute_reply.started":"2024-12-20T22:49:12.091450Z","shell.execute_reply":"2024-12-20T22:49:12.666924Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}