示例#1
0
def q5b2():
    logger.log('Analyzing Q5(b2)...')
    compare = {
        'acc_converge': {
            3: acc_converge_epoch(histories['Q4']['optimal']['val_accuracy']),
            4: acc_converge_epoch(histories['Q5']['val_accuracy'])
        },

        'loss_converge': {
            3: loss_converge_epoch(histories['Q4']['optimal']['val_loss']),
            4: loss_converge_epoch(histories['Q5']['val_loss'])
        },

        'final_acc': {
            3: training_result(histories['Q4']['optimal']['val_accuracy']),
            4: training_result(histories['Q5']['val_accuracy'])
        },

        'final_loss': {
            3: training_result(histories['Q4']['optimal']['val_loss'], mode='loss'),
            4: training_result(histories['Q5']['val_loss'], mode='loss')
        }
    }
    compare_df = pd.DataFrame(compare)
    compare_df.to_csv('result/AQ5_result.csv')
    logger.log('Saved result to \"result/AQ5_result.csv\"')
示例#2
0
def compare():
    logger.log('Compare all features, 6 features and 5 features')

    mse_all = hist1['Q1']['a']['val_mse']
    best_6 = val_mse[[c for c in df.columns
                      if len(c.split(",")) == 1]].idxmin()
    mse_6 = hist2['Q2'][best_6]['val_mse']
    best_5 = val_mse[[c for c in df.columns
                      if len(c.split(",")) == 2]].idxmin()
    mse_5 = hist2['Q2'][best_5]['val_mse']

    f, ax = plt.subplots(figsize=(10, 5))
    plt.plot(mse_all, label='all features')
    plt.plot(mse_6, label='6 features')
    plt.plot(mse_5, label='5 features')
    plt.xlabel('epoch', fontsize=18)
    plt.ylabel('mean squared error', fontsize=18)
    plt.legend(loc='upper right', fontsize=18)
    plt.title('MSE for Different Numbers of Input Features',
              fontsize=20,
              pad=20)
    plt.xlim(1000, 5000)
    plt.ylim(0.0058, 0.010)
    plt.xticks(fontsize=12, wrap=True)
    plt.yticks(fontsize=12, wrap=True)

    plt.tight_layout()
    plt.savefig('result/BQ2_compare.png')
    logger.log('Saved result to \"result/BQ2_compare.png\"')

    final = {
        'mse_converge': {
            "all_features": loss_converge_epoch(mse_all),
            "6_features": loss_converge_epoch(mse_6),
            "5_features": loss_converge_epoch(mse_5)
        },
        'final_mse': {
            "all_features": training_result(mse_all, mode='loss'),
            "6_features": training_result(mse_6, mode='loss'),
            "5_features": training_result(mse_5, mode='loss')
        }
    }
    final_df = pd.DataFrame(final)
    final_df.to_csv('result/BQ2_result.csv')
    logger.log('Saved result to \"result/BQ2_result.csv\"')

    # update hyperparameter
    result = min(final['final_mse'].keys(),
                 key=lambda x: final['final_mse'][x])
    if result == 'all_features':
        removed = []
    elif result == '6_features':
        removed = list(map(int, best_6.split(",")))
    elif result == '5_features':
        removed = list(map(int, best_5.split(",")))

    hyperparameters['input_shape'] = (len(columns) - len(removed), )
    hyperparameters['removed'] = removed
    write_dict_to_json(hyperparameters, args.params)
示例#3
0
def compare():
    df = pd.DataFrame(histories['Q3'])
    val_mse = df[df.index == 'val_mse'].apply(
        lambda x: x.explode()).reset_index(drop=True)
    f, ax = plt.subplots(1, 1, figsize=(15, 5))
    val_mse.plot()
    plt.xlabel('epoch', fontsize=15)
    plt.ylabel('mean squared error', fontsize=15)
    plt.legend(loc='upper right', fontsize=12)
    plt.title('MSE for Different Models', fontsize=15, pad=20)
    plt.xlim(500, 10000)
    plt.ylim(0.0055, 0.0115)
    plt.xticks(fontsize=12)
    plt.yticks(fontsize=12)
    plt.tight_layout()
    plt.savefig('result/BQ3_compare.png')
    logger.log('Saved result to \"result/BQ3_compare.png\"')

    df.applymap(lambda x: training_result(x, mode='loss')).to_csv(
        'result/BQ3_compare.csv')
    logger.log('Saved result to \"result/BQ3_compare.csv\"')

    df.applymap(lambda x: loss_converge_epoch(x)).to_csv(
        'result/BQ3_converge_epoch.csv')
    logger.log('Saved result to \"result/BQ3_converge_epoch.csv\"')
示例#4
0
def q1a():
    logger.log('Analyzing Q1(a)...')
    training_error = histories['Q1']['a']['mse']
    testing_error = histories['Q1']['a']['val_mse']

    f, ax = plt.subplots(figsize=(10, 5))
    plt.plot(training_error, label='training')
    plt.plot(testing_error, label='testing')
    plt.xlabel('epoch', fontsize=18)
    plt.ylabel('mean squared error', fontsize=18)
    plt.xticks(fontsize=12)
    plt.yticks(fontsize=12)
    plt.legend(loc='upper right', fontsize=18)
    plt.title('Training and Testing Error against Training Epochs', fontsize=20)
    ax.axvline(
        x=loss_converge_epoch(testing_error), 
        linestyle='--', linewidth=1, color='r'
    )
    plt.tight_layout()

    plt.savefig('result/BQ1_error.png')
    logger.log('Saved result to \"result/BQ1_error.png\"')
示例#5
0
def q1b():
    logger.log('Analyzing Q1(b)...')
    training_loss = histories['Q1']['loss']
    testing_loss = histories['Q1']['val_loss']

    f, ax = plt.subplots(figsize=(10, 5))
    plt.plot(training_loss, label='training')
    plt.plot(testing_loss, label='testing')
    plt.xlabel('epoch', fontsize=18)
    plt.ylabel('loss', fontsize=18)
    plt.xticks(fontsize=18)
    plt.yticks(fontsize=18)
    plt.legend(loc='upper right', fontsize=18)
    plt.title('Training and Testing Losses against Training Epochs',
              fontsize=20)
    ax.axvline(x=loss_converge_epoch(testing_loss, mean_thres=0.01),
               linestyle='--',
               linewidth=1,
               color='r')
    plt.tight_layout()
    plt.savefig('result/AQ1_loss.png')
    logger.log('Saved result to \"result/AQ1_loss.png\"')