Пример #1
0
Файл: main.py Проект: beauxq/tic
def get_ai_move(board: List[int], player: int, tic_net: Network, randomness: float) -> int:
    """ return which space to put player's mark in """
    # copy board to not modify original
    board_copy = np.copy(board)
    # make it so I am player 1
    board_copy *= player
    # work with preferred transformation
    transform_used, preferred_transformation = choose_transformation(board_copy)
    L.log("preferred transform:")
    L.log(preferred_transformation)

    outputs = tic_net.predict(np.array([preferred_transformation]))
    L.log(outputs[0])
    valid_moves = get_valid_moves(preferred_transformation)
    max_move = next(iter(valid_moves))
    for valid_move in valid_moves:
        if outputs[0][valid_move] > outputs[0][max_move]:
            max_move = valid_move

    prob_of_using_max_move = (outputs[0][max_move] / (randomness + 0.0000001) - 1)
    if random() < 1 - prob_of_using_max_move:
        L.log("made a random choice from probability", 1 - prob_of_using_max_move)
        return choice(tuple(get_valid_moves(board)))

    # now transform max_move back to original board
    return transform(max_move, invert_transform[transform_used])
Пример #2
0
def test_transform():
    new_df, _ = transforms.transform(df,
                                     rename=True,
                                     replace=False,
                                     trans_type="quadratic",
                                     scaler=None,
                                     symmetric=None,
                                     verbose=0)
    assert utils.checkEqual(new_df["col1_trans_quadratic"].values, [1, 4])
    assert utils.checkEqual(new_df["col2_trans_quadratic"].values, [9, 16])

    # Verify the others at least run
    for trans_type in transforms_list:
        new_df, scaler = transforms.transform(df, trans_type=trans_type)
        if trans_type in ["normal", "scale01"]:
            new_df, _ = transforms.transform(df, scaler=scaler)

    for trans_type in comb_ops:
        new_df, _ = transforms.transform(df, trans_type=trans_type)
Пример #3
0
 def __init__(self,
              data_path,
              image_size=IMAGE_SIZE,
              batch_size=BATCH_SIZE,
              val_size=VAL_SIZE,
              num_workers=NUM_WORKERS):
     super().__init__()
     self.data_path = data_path
     self.image_size = image_size
     self.batch_size = batch_size
     self.val_size = val_size
     self.num_workers = num_workers
     self.transforms = transform()
Пример #4
0
 def get_data(self, data_file):
     coord, label = self.extract_coord_label(self.data[data_file])
     coord = self.convert_coord_min_max_xy(coord)
     image = self.read_image(data_file)
     image = self.convert_to_PIL(image)
     coord = torch.FloatTensor(coord)  # (n_objects, 4)
     label = torch.LongTensor(label)
     image, coord, label = transform(image,
                                     coord,
                                     label,
                                     self.resize,
                                     is_train=True)
     return image, coord, label
Пример #5
0
Файл: main.py Проект: beauxq/tic
def train(move_record: List[Tuple[List[int], int]], winner: int, tic_net: Network):
    """ train network based on outcome """
    training_sets = []
    target_output = []
    player = 1
    for board, moved in move_record:
        valid_moves = get_valid_moves(board)
        tie_value = 0.7  # target output for training data leading to tie
        invalid_value = 0.5  # target output for training data of invalid move
        # for moves I could have taken but didn't
        default_value = 0.3 if player == winner else (0.5 if winner == (-1 * player) else 0.5)
        # TODO: maybe, instead of 0.5, use the value that the net already predicts for that space?
        out = [(default_value if v == 0 else invalid_value) for v in board]

        equals = equal_indexes(board, moved)
        for i in equals:
            # don't know what values I should use if I'm not sure how good of a move this is
            out[i] = 0.9 if winner == player else (0.1 if winner == (-1 * player) else tie_value)

        # overwrite that if there are winning moves or blocking moves or only 1 possible move
        winning_moves = get_winning_moves(board, player)
        if len(winning_moves) > 0:
            out = [1 if i in winning_moves else (0 if (i in valid_moves) else invalid_value)
                   for i in range(9)]
        else:  # no winning moves
            can, blocking_move = can_block(board, player)
            if can:
                out = [1 if i == blocking_move else (0 if (i in valid_moves) else invalid_value)
                       for i in range(9)]
            else:  # no wining moves and no blocking moves
                if len(valid_moves) == 1:
                    L.log("only 1 valid on this board")
                    out[next(iter(valid_moves))] = 1

        board_copy = np.copy(board)
        board_copy *= player
        transform_used, preferred_transform_of_board = choose_transformation(board_copy)
        transformed_output = transform(np.array(out), transform_used)

        L.log("training:")
        L.log(preferred_transform_of_board)
        L.log(transformed_output)
        training_sets.append(preferred_transform_of_board)
        target_output.append(transformed_output)

        player *= -1

    tic_net.train(np.array(training_sets), np.array(target_output), 1, 0.0625, L.logging)
Пример #6
0
def test_transform(test_df, spark, transform):
    """Test transform returns adoptions per year"""
    schema = StructType([
        StructField('AdoptedYear', IntegerType()),
        StructField('Species', StringType()),
        StructField('count', LongType(), False)
    ])

    expected = spark.createDataFrame([(2017, 'Cat', 1), (2017, 'Dog', 1),
                                      (2018, 'Cat', 1), (2018, 'Dog', 2),
                                      (2019, 'Cat', 1), (2019, 'Dog', 2)],
                                     schema=schema)

    result = transform(test_df)

    assert_dataframe_equal(expected, result)
Пример #7
0
num_classes = len(data_legend.emotion.unique())
batch_size = 20
learning_rate = 0.0001

#CUDA
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
model = torchvision.models.resnet18(pretrained=True)

model = model.to(device)
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate)
#optimizer = torch.optim.Adagrad(model.parameters(), lr=learning_rate)

model.conv1.in_channels = 1

train_loader, valid_loader = transform(label_path, image_path, batch_size)

train_losses = []
valid_losses = []

print('---train---')
for epoch in range(num_epoch):
	train_loss = 0.0
	valid_loss = 0.0

	model.train()
	for datas in train_loader:
		image, target = datas['image'].cuda(), datas['label'].cuda()


		optimizer.zero_grad()
Пример #8
0
print("Estimating memory usage of {}GB".format(GB))
# Set the various sheares, scales, first in terms of range
sheares, scales = set_shear_and_scale_ranges(
    padded_images[0].shape, shear_steps=shear_steps, scale_steps=scale_steps, pix=2
)
# Then in terms of transform matrices
print("Calculating transform matrices")
transform_matrices = set_transform_matrices(angles, sheares, scales)

rotation_matrices, shear_matrices, scale_matrices = transform_matrices

# Scale and shear the masked data
print("Transforming data")
data = transform(
    padded_images, rotation_matrices, shear_matrices, scale_matrices, weights=weights
)

data = data.astype("float32")

data = data.reshape((len(padded_images), -1) + padded_images[0].shape)
data = data.swapaxes(0, 1)

print("Preparing correlation data")
correlation_data = prepare_correlation_data(
    data, weights, method=correlation_method, gpu=gpu
)

print("Correlating")
max_indexes, shifts_list = correlate_images(
    correlation_data, method=correlation_method, gpu=gpu
Пример #9
0
    def reDraw(self):
        pyc.background(255)
        pyc.lightSpecular(255 * 30 / 640, 255 * 30 / 640, 255 * 30 / 640)
        pyc.directionalLight(255, 255, 255, 0, 0, 1)
        pyc.specular(102, 102, 102)

        # Project self.pts into image, and display it
        imgTmp = cv.cvCloneImage(self.img)
        imNP = cv.adaptors.Ipl2NumPy(scale(imgTmp, self.zoom))

        color_list = [(255, 255, 0), (255, 0, 0), (0, 255, 255), (0, 255, 0),
                      (0, 0, 255), (0, 100, 100), (100, 100, 0), (100, 0, 100),
                      (100, 200, 100), (200, 100, 100), (100, 100, 200),
                      (100, 0, 200), (0, 200, 100), (0, 100, 200),
                      (200, 0, 100), (100, 0, 100), (255, 152, 7)]

        XformPts = tr.transform(self.transFunc(self.vals), self.pts)
        camPts = self.cam_proj_mat * tr.xyzToHomogenous(XformPts)
        camPts = camPts / camPts[2]
        camPts[0] = (camPts[0] + self.cam_centers[0]) * self.zoom
        camPts[1] = (camPts[1] + self.cam_centers[1]) * self.zoom
        camPts = np.matrix(np.round(camPts), 'int')

        conditions = np.concatenate([
            camPts[0] >= 0, camPts[0] < imNP.shape[1], camPts[1] >= 0,
            camPts[1] < imNP.shape[0]
        ], 0)
        r, c = np.where(np.all(conditions, 0))
        camPts_bound = camPts[:, c.A[0]]
        x = np.asarray(self.pts[0])[0][c.A[0]]
        x = x - x.min()
        x = x / x.max() * 256  #512 #number of colors
        x = np.floor(x)
        x = np.asarray(np.matrix(x, 'int'))[0]
        if self.display_laser:
            map2d = np.asarray(camPts_bound[0:2])
            n, m = map2d.shape
            for i in range(0, m):
                imNP[map2d[1, i],
                     map2d[0, i], :] = [x[i], 256 - x[i],
                                        128 + x[i] / 2]  #color_list[x[i]]
        imgTmp = cv.adaptors.NumPy2Ipl(imNP)
        #imgSmall = cv.cvCreateImage(cv.cvSize(imgTmp.width/3, imgTmp.height/3), cv.IPL_DEPTH_8U, 3)
        #cv.cvResize(imgTmp, imgSmall, cv.CV_INTER_AREA)
        im = cv.adaptors.Ipl2PIL(imgTmp)

        #pyc.rotate(math.radians(90))
        pyc.image(im, 0, 0, self.width, self.height)
        #pyc.rotate(math.radians(-90))

        # Display the current values of the parameter vector (and highlight the selected one)
        pyc.textSize(10)
        for i, val in enumerate(self.vals):
            if np.nonzero(self.selected)[0] == i:
                print 'x',
            print '%8.4f ' % self.vals[i],
            pval = '%7s: %8.4f' % (self.names[i], self.vals[i])
            pyc.text(pval, self.width + 15, 20 + 20 * i, 0)
            if np.nonzero(self.selected)[0] == i:
                pyc.fill(255, 0, 0)
                pyc.quad(self.width + 4.0, 15.0 + 20.0 * i - 7.0,
                         self.width + 4.0, 15.0 + 20.0 * i + 7.0,
                         self.width + 13.0, 15.0 + 20.0 * i, self.width + 13.0,
                         15.0 + 20.0 * i)
        print '\n'

        self.move(pyc.escape_handler(pyc.draw()))
Пример #10
0
def main(train_dir,
         val_dir,
         checkpoint_dir,
         batch_size,
         image_size=512,
         num_epochs=10,
         checkpoint_name=None,
         num_workers=1,
         pin_memory=True,
         log_dir="logs",
         model_name=None,
         train_csv=None,
         val_csv=None):

    # declare datasets
    train_ds = DataFolder(root_dir=train_dir,
                          transform=transform(image_size, is_training=True),
                          csv_path=train_csv)
    val_ds = DataFolder(root_dir=val_dir,
                        transform=transform(image_size, is_training=False),
                        csv_path=val_csv)
    train_loader = DataLoader(train_ds,
                              batch_size=batch_size,
                              num_workers=num_workers,
                              pin_memory=pin_memory,
                              shuffle=True)
    val_loader = DataLoader(val_ds,
                            batch_size=batch_size,
                            num_workers=num_workers,
                            pin_memory=pin_memory,
                            shuffle=True)

    #init model
    model = MainModel(128, model_name)

    # configure parameter
    loss_fn = nn.CrossEntropyLoss()
    model = model.to(device)
    optimizer = optim.Adam(model.parameters(), lr=1e-4)
    scaler = torch.cuda.amp.GradScaler()
    # checkpoint = {'state_dict': model.state_dict(), 'optimizer': optimizer.state_dict()}
    # save_checkpoint(checkpoint, os.path.join(checkpoint_dir, f"checkpoint_initialilze.pth.tar"))
    # return

    if checkpoint_name:
        ckp_path = os.path.join(checkpoint_dir, checkpoint_name)
        load_checkpoint(torch.load(ckp_path), model, optimizer)

    check_accuracy(val_loader, model, device)

    #training
    for epoch in range(num_epochs):
        train_fn(train_loader,
                 model,
                 optimizer,
                 loss_fn,
                 scaler,
                 device,
                 epoch,
                 log_dir=log_dir)
        check_accuracy(val_loader, model, device)
        checkpoint = {
            'state_dict': model.state_dict(),
            'optimizer': optimizer.state_dict()
        }
        save_checkpoint(
            checkpoint,
            os.path.join(checkpoint_dir, f"checkpoint_{epoch}.pth.tar"))
Пример #11
0
def transform_features(features, scaler_normal=None, scaler_01=None):
    """Prepare features, including handling missing values, normalization, PCA, etc.

    Args:
        url  (string): The download address.
        path (string): The location to save the download.

    Returns:
        bool: True if successful, False otherwise.
    """

    # Split categorical features

    tags = {
        'Condition1_RRAe_orig': 'categ',
        'HouseStyle_SFoyer_orig': 'categ',
        'MSSubClass_20_orig': 'categ',
        'RoofMatl_Tar&Grv_orig': 'categ',
        'MSSubClass_45_orig': 'categ',
        'MoSold_orig': 'cont',
        'HouseStyle_1.5Fin_orig': 'categ',
        'Heating_GasW_orig': 'categ',
        'Exterior1st_VinylSd_orig': 'categ',
        'Exterior1st_AsphShn_orig': 'categ',
        'PavedDrive_orig': 'ord',
        'LotShape_IR3_orig': 'categ',
        'Exterior1st_ImStucc_orig': 'categ',
        'LotShape_IR1_orig': 'categ',
        'MSSubClass_160_orig': 'categ',
        'SaleCondition_Partial_orig': 'categ',
        'CentralAir_orig': 'ord',
        'OpenPorchSF_orig': 'cont',
        'MSZoning_FV_orig': 'categ',
        'BldgType_TwnhsE_orig': 'categ',
        'SaleCondition_Alloca_orig': 'categ',
        'Exterior1st_BrkFace_orig': 'categ',
        'LandContour_Lvl_orig': 'categ',
        'SaleCondition_Normal_orig': 'categ',
        'GarageType_Attchd_orig': 'categ',
        'BsmtFullBath_orig': 'cont',
        'GarageIdx_orig': 'cont',
        'Exterior1st_Wd Sdng_orig': 'categ',
        'SaleCondition_AdjLand_orig': 'categ',
        'Exterior2nd_AsbShng_orig': 'categ',
        'Exterior2nd_Wd Shng_orig': 'categ',
        'Exterior1st_MetalSd_orig': 'categ',
        'Exterior2nd_CmentBd_orig': 'categ',
        'Neighborhood_NoRidge_orig': 'categ',
        'PoolArea_orig': 'cont',
        '3SsnPorch_orig': 'cont',
        'RoofMatl_Metal_orig': 'categ',
        'Neighborhood_Gilbert_orig': 'categ',
        'Foundation_CBlock_orig': 'categ',
        'KitchenAbvGr_orig': 'cont',
        'Street_Pave_orig': 'categ',
        'RoofStyle_Gable_orig': 'categ',
        'HouseStyle_1Story_orig': 'categ',
        'LotArea_orig': 'cont',
        'Condition2_RRAe_orig': 'categ',
        'MiscFeature_Othr_orig': 'categ',
        'Fireplaces_orig': 'cont',
        'Exterior2nd_MetalSd_orig': 'categ',
        'Exterior2nd_HdBoard_orig': 'categ',
        'SummerSale_orig': 'categ',
        'SaleCondition_Abnorml_orig': 'categ',
        'Neighborhood_Crawfor_orig': 'categ',
        'Neighborhood_CollgCr_orig': 'categ',
        'Neighborhood_Veenker_orig': 'categ',
        'Condition1_Norm_orig': 'categ',
        'GarageType_0_orig': 'categ',
        'HouseStyle_SLvl_orig': 'categ',
        'Neighborhood_SawyerW_orig': 'categ',
        'MSSubClass_85_orig': 'categ',
        'OverallQual_orig': 'cont',
        'Exterior1st_Plywood_orig': 'categ',
        'LotConfig_FR3_orig': 'categ',
        'Heating_Wall_orig': 'categ',
        'Season_0_orig': 'categ',
        'LandContour_Low_orig': 'categ',
        'RemodelAge_orig': 'cont',
        'RoofStyle_Shed_orig': 'categ',
        'MSSubClass_70_orig': 'categ',
        'PoolQC_orig': 'ord',
        'BsmtFinType1_orig': 'ord',
        'Exterior2nd_CBlock_orig': 'categ',
        'MSZoning_RH_orig': 'categ',
        'MSSubClass_75_orig': 'categ',
        'SQFperRoom_orig': 'cont',
        'Neighborhood_Blmngtn_orig': 'categ',
        'MSSubClass_120_orig': 'categ',
        'Neighborhood_StoneBr_orig': 'categ',
        'MSSubClass_60_orig': 'categ',
        'MiscFeature_Shed_orig': 'categ',
        'Exterior2nd_Wd Sdng_orig': 'categ',
        'Foundation_Slab_orig': 'categ',
        'Fence_orig': 'ord',
        'YrSold_2006_orig': 'categ',
        'Condition2_PosA_orig': 'categ',
        'OverallCond_orig': 'cont',
        'BsmtCond_orig': 'ord',
        'BsmtExposure_orig': 'ord',
        'Foundation_Stone_orig': 'categ',
        'BedroomAbvGr_orig': 'cont',
        'LandContour_Bnk_orig': 'categ',
        'MSSubClass_30_orig': 'categ',
        'Foundation_Wood_orig': 'categ',
        'Exterior2nd_VinylSd_orig': 'categ',
        'BsmtFinSF1_orig': 'cont',
        'BldgType_Duplex_orig': 'categ',
        'MSSubClass_90_orig': 'categ',
        'Neighborhood_MeadowV_orig': 'categ',
        'FullBath_orig': 'cont',
        'BldgType_Twnhs_orig': 'categ',
        'FireplaceQu_orig': 'ord',
        'RoofStyle_Mansard_orig': 'categ',
        'Exterior1st_CBlock_orig': 'categ',
        'Condition1_PosA_orig': 'categ',
        'Season_3_orig': 'categ',
        'MSSubClass_80_orig': 'categ',
        'ExterCond_orig': 'ord',
        'GarageType_2Types_orig': 'categ',
        'LargeHouse_orig': 'categ',
        'Exterior1st_CemntBd_orig': 'categ',
        'HouseStyle_2.5Fin_orig': 'categ',
        'SaleType_WD_orig': 'categ',
        'RoofMatl_CompShg_orig': 'categ',
        'Exterior1st_HdBoard_orig': 'categ',
        'Electrical_SBrkr_orig': 'categ',
        'RoofStyle_Flat_orig': 'categ',
        'Foundation_PConc_orig': 'categ',
        'BsmtFinSF2_orig': 'cont',
        'Neighborhood_IDOTRR_orig': 'categ',
        'SaleType_ConLw_orig': 'categ',
        'LandSlope_Mod_orig': 'categ',
        'Exterior1st_Stone_orig': 'categ',
        'Exterior2nd_Stucco_orig': 'categ',
        'Heating_GasA_orig': 'categ',
        'RoofMatl_WdShake_orig': 'categ',
        'HouseAge_orig': 'cont',
        'Neighborhood_NPkVill_orig': 'categ',
        'Utilities_orig': 'ord',
        'Exterior2nd_AsphShn_orig': 'categ',
        'BsmtQual_orig': 'ord',
        'GarageAgeInv_orig': 'cont',
        'Exterior1st_BrkComm_orig': 'categ',
        'Electrical_Mix_orig': 'categ',
        'Neighborhood_ClearCr_orig': 'categ',
        'LotConfig_Corner_orig': 'categ',
        'SaleType_ConLD_orig': 'categ',
        'BsmtHalfBath_orig': 'cont',
        'YrSold_2010_orig': 'categ',
        'Electrical_FuseF_orig': 'categ',
        'LotShape_Reg_orig': 'categ',
        'MasVnrType_orig': 'ord',
        'Electrical_FuseP_orig': 'categ',
        'Heating_Floor_orig': 'categ',
        'GarageQual_orig': 'ord',
        'RoofStyle_Gambrel_orig': 'categ',
        'Condition2_Norm_orig': 'categ',
        'time_index_orig': 'cont',
        'GrLivArea_orig': 'cont',
        'SaleType_Con_orig': 'categ',
        'neighborhood_index_orig': 'cont',
        'GarageType_CarPort_orig': 'categ',
        'Condition1_PosN_orig': 'categ',
        'MiscVal_orig': 'cont',
        'Electrical_FuseA_orig': 'categ',
        'Exterior1st_WdShing_orig': 'categ',
        'BldgType_1Fam_orig': 'categ',
        'GarageCond_orig': 'ord',
        'Neighborhood_BrkSide_orig': 'categ',
        'Condition2_PosN_orig': 'categ',
        'LandContour_HLS_orig': 'categ',
        'YrSold_2007_orig': 'categ',
        'Neighborhood_BrDale_orig': 'categ',
        'MasVnrArea_orig': 'cont',
        'SaleType_CWD_orig': 'categ',
        'Heating_Grav_orig': 'categ',
        'KitchenQual_orig': 'ord',
        'Neighborhood_NridgHt_orig': 'categ',
        'LotConfig_Inside_orig': 'categ',
        'RoofMatl_ClyTile_orig': 'categ',
        'WoodDeckSF_orig': 'cont',
        'HeatingQC_orig': 'ord',
        'Condition2_RRNn_orig': 'categ',
        'Neighborhood_Somerst_orig': 'categ',
        'MSSubClass_40_orig': 'categ',
        'MSZoning_C (all)_orig': 'categ',
        'ExterQual_orig': 'ord',
        'MSSubClass_190_orig': 'categ',
        'Exterior2nd_Stone_orig': 'categ',
        'Alley_Grvl_orig': 'categ',
        'Neighborhood_Sawyer_orig': 'categ',
        'Neighborhood_NWAmes_orig': 'categ',
        'LotFrontage_orig': 'cont',
        'Exterior2nd_Brk Cmn_orig': 'categ',
        'MSSubClass_180_orig': 'categ',
        'Season_2_orig': 'categ',
        'Condition2_RRAn_orig': 'categ',
        'BsmtFinType2_orig': 'ord',
        'Condition2_Artery_orig': 'categ',
        'HasPool_orig': 'categ',
        'GarageFinish_orig': 'ord',
        'SaleCondition_Family_orig': 'categ',
        'EnclosedPorch_orig': 'cont',
        'Foundation_BrkTil_orig': 'categ',
        'Condition1_RRAn_orig': 'categ',
        'Exterior2nd_Other_orig': 'categ',
        'HouseStyle_1.5Unf_orig': 'categ',
        'LotShape_IR2_orig': 'categ',
        'HalfBath_orig': 'cont',
        'Heating_OthW_orig': 'categ',
        'LandSlope_Gtl_orig': 'categ',
        'TotRmsAbvGrd_orig': 'cont',
        'Condition1_RRNe_orig': 'categ',
        'MSZoning_RM_orig': 'categ',
        'Condition1_Feedr_orig': 'categ',
        'GarageType_Detchd_orig': 'categ',
        'TotalBsmtSF_orig': 'cont',
        'Exterior2nd_BrkFace_orig': 'categ',
        'NewHouse_orig': 'categ',
        'YrSold_2008_orig': 'categ',
        'RoofMatl_Roll_orig': 'categ',
        'LotConfig_FR2_orig': 'categ',
        'Neighborhood_Timber_orig': 'categ',
        'Neighborhood_Blueste_orig': 'categ',
        'Condition2_Feedr_orig': 'categ',
        '2ndFlrSF_orig': 'cont',
        'LotConfig_CulDSac_orig': 'categ',
        'Street_Grvl_orig': 'categ',
        'Exterior1st_Stucco_orig': 'categ',
        'YrSold_2009_orig': 'categ',
        'RoofStyle_Hip_orig': 'categ',
        'BsmtUnfSF_orig': 'cont',
        'Neighborhood_NAmes_orig': 'categ',
        'ScreenPorch_orig': 'cont',
        'Functional_orig': 'ord',
        'GarageType_BuiltIn_orig': 'categ',
        'Alley_Pave_orig': 'categ',
        'Condition1_RRNn_orig': 'categ',
        'BldgType_2fmCon_orig': 'categ',
        'LandSlope_Sev_orig': 'categ',
        'Condition1_Artery_orig': 'categ',
        'Neighborhood_Edwards_orig': 'categ',
        'GarageType_Basment_orig': 'categ',
        'SaleType_New_orig': 'categ',
        'Season_1_orig': 'categ',
        'MSSubClass_50_orig': 'categ',
        'Neighborhood_SWISU_orig': 'categ',
        'Exterior2nd_ImStucc_orig': 'categ',
        'HouseStyle_2.5Unf_orig': 'categ',
        'HouseStyle_2Story_orig': 'categ',
        'RoofMatl_WdShngl_orig': 'categ',
        'SaleType_COD_orig': 'categ',
        'GarageArea_orig': 'cont',
        'MSZoning_RL_orig': 'categ',
        'LowQualFinSF_orig': 'cont',
        'Exterior1st_AsbShng_orig': 'categ',
        'Neighborhood_Mitchel_orig': 'categ',
        'PrchSQ_orig': 'cont',
        'Neighborhood_OldTown_orig': 'categ',
        'RoofMatl_Membran_orig': 'categ',
        'MiscFeature_Gar2_orig': 'categ',
        '1stFlrSF_orig': 'cont',
        'Exterior2nd_Plywood_orig': 'categ',
        'SaleType_ConLI_orig': 'categ',
        'GarageCars_orig': 'cont',
        'TotalSQF_orig': 'cont',
        'MiscFeature_TenC_orig': 'categ',
        'SaleType_Oth_orig': 'categ'
    }

    # Add orig tag to columns
    features.columns = [
        str(col) + '_orig' if col != "Id" else "Id" for col in features.columns
    ]

    # For now, treat ordinal and continuous variables the same
    dont_rescale = features[["Id", "MiscVal_orig"]]
    continuous_features = features[[
        feat for feat in tags.keys()
        if tags[feat] == "cont" and feat not in dont_rescale
    ]]
    ordinal_features = features[[
        feat for feat in tags.keys()
        if tags[feat] == "ord" and feat not in dont_rescale
    ]]
    categorical_features = features[[
        feat for feat in tags.keys()
        if tags[feat] == "categ" and feat not in dont_rescale
    ]]

    # Add epithets
    continuous_features.columns = [
        str(col) + '_cont' for col in continuous_features.columns
    ]
    ordinal_features.columns = [
        str(col) + '_ord' for col in ordinal_features.columns
    ]
    categorical_features.columns = [
        str(col) + '_categ' for col in categorical_features.columns
    ]

    continuous_features_log, _ = transform(continuous_features,
                                           rename=True,
                                           replace=True,
                                           trans_type="log")
    continuous_features_inverse, _ = transform(continuous_features,
                                               rename=True,
                                               replace=True,
                                               trans_type="inverse")
    continuous_features_normal, scaler_normal = transform(continuous_features,
                                                          rename=True,
                                                          replace=True,
                                                          trans_type="normal",
                                                          scaler=scaler_normal)
    continuous_features01, scaler_01 = transform(continuous_features,
                                                 rename=True,
                                                 replace=True,
                                                 trans_type="scale01",
                                                 scaler=scaler_01)
    continuous_features_root, _ = transform(continuous_features,
                                            rename=True,
                                            replace=True,
                                            trans_type="root")
    continuous_features_quad, _ = transform(continuous_features,
                                            rename=True,
                                            replace=True,
                                            trans_type="quadratic")
    df_list = [
        continuous_features_log, continuous_features_inverse,
        continuous_features_root, continuous_features,
        continuous_features_normal, continuous_features01,
        continuous_features_quad
    ]

    continuous_features = pd.concat(df_list, axis=1)

    # Recombine
    features = pd.concat([
        dont_rescale, continuous_features, categorical_features,
        ordinal_features
    ],
                         axis=1)

    return features, scaler_normal, scaler_01
Пример #12
0
def create_new_features(features,
                        market_index=None,
                        neighborhood_index=None,
                        MoSold_or_Season_index="Season"):
    """ Combine features to generate new features.

    Args:
        features (DataFrame): The dataframe containing training data.
        market_index (DataFrame): The dataframe mapping time periods to index values.
        neighborhood_index (DataFrame): The dataframe mapping neighborhoods to index values.
        MoSold_or_Season_index (str): Whether to index seasonly or monthly

    Returns:
        (tuple): tuple containing:
            features(DataFrame): DataFrame with original features combined with newly created ones
            market_index (DataFrame): The dataframe mapping time periods to index values.
            neighborhood_index (DataFrame): The dataframe mapping neighborhoods to index values.
    """

    # Create new features
    features['TotalSQF'] = features['TotalBsmtSF'] + features['GrLivArea']
    features['NewHouse'] = np.less(
        abs(features['YrSold'] - features['YearBuilt']), 2)
    features['SummerSale'] = np.isin(features["MoSold"], range(4, 9))
    features['Season'] = ((features["MoSold"] / 4)).astype(int)
    features['RemodelAge'] = (features["YrSold"] -
                              features["YearRemodAdd"]).clip(0, None)
    temp = (features["YrSold"] - features["GarageYrBlt"]).clip(0, None)
    features['GarageAgeInv'] = transform(temp,
                                         rename=False,
                                         replace=True,
                                         trans_type="inverse")[0]
    features['GarageIdx'] = features['GarageAgeInv'] * features[
        'GarageFinish'] * features['GarageCars']
    features['HouseAge'] = (features['YrSold'] - features['YearBuilt']).clip(
        0, None)
    features['LargeHouse'] = features["TotalSQF"] > 4000
    features['SQFperRoom'] = features["TotalSQF"] / features.TotRmsAbvGrd
    features["HasPool"] = features["PoolArea"] > 0
    features["PrchSQ"] = np.nansum(features[get_features(features, "porch")],
                                   axis=1)

    merge_vars = ["YrSold", MoSold_or_Season_index]
    if market_index is None:
        market_index = create_market_index(features, "time", merge_vars)
    features = pd.merge(features,
                        market_index,
                        how='left',
                        left_on=merge_vars,
                        right_on=merge_vars)

    merge_vars = ["Neighborhood"]
    if neighborhood_index is None:
        neighborhood_index = create_market_index(features, "neighborhood",
                                                 merge_vars)
    features = pd.merge(features,
                        neighborhood_index,
                        how='left',
                        left_on=merge_vars,
                        right_on=merge_vars)

    return features, market_index, neighborhood_index
Пример #13
0
def specific_transform(features, column_name, verbose=0):
    """Backout transformation from variable name. Pretty messy.

    Args:
        features (DataFrame): Dataframe with base features
        column_name (str): Name of column from which to derive transformation
        verbose (int, optional): Verbose messages for verbose>0

    Returns:
        DataFrame: DataFrame with only the newly created variable
    """

    vprint = print if verbose else lambda *a, **k: None

    # List all transform suffixes
    var_types = ["categ", "ord", "cont"]
    misc_keywords = ["trans"]
    comb_ops = ["add", "subtract", "multiply", "divide"]
    transforms = [
        "log", "inverse", "quadratic", "cubic", "root", "normal", "scale01"
    ]
    all_keywords = misc_keywords + comb_ops + transforms

    c = column_name.replace(" ", "^%^")
    l = c.split("_")

    # Get the "base" variables
    base_variables = '_'.join([x if x not in all_keywords else ' ' for x in l])
    base_variables = re.sub("(_ )+_", " ", base_variables).strip().split(" ")
    base_variables = [b.replace("^%^", " ") for b in base_variables
                      ]  # ugly hack for dealing with spaces
    vprint(base_variables)

    # Process "base" variable to get original, untransformed variable (e.g. add orig to it etc.)
    original_variables = base_variables[:]
    for n, o in enumerate(original_variables):
        for var_type in var_types:
            original_variables[n] = original_variables[n].replace(
                var_type, "orig_" + var_type)
    vprint(original_variables)

    # Get string defining transformations
    for o in set(base_variables):
        column_name = column_name.replace(o, "|" + o + "|")
    parsed_variables = column_name.split("|")[1:]

    vprint(parsed_variables)

    # Create a list containing [[original_var_name, str_of_transforms],...]
    var_list = []
    for n in range(0, len(parsed_variables), 2):
        var = original_variables[int(n / 2)]
        trans = parsed_variables[n + 1]
        var_list.append([var, trans])

    # Check for individual transforms
    vprint(var_list)
    for var in var_list:
        feat_col = features[[var[0]]]
        for t in transforms:
            if t in var[1]:
                new_df = transform(feat_col,
                                   rename=True,
                                   replace=True,
                                   trans_type=t,
                                   verbose=0)[0]
                var.append(new_df)
                break  # Assume one transform
        if len(var) < 3:
            var.append(feat_col)

    # Check for variable combinations
    if len(var_list) > 1:
        new_features = pd.concat([var_list[0][2], var_list[1][2]], axis=1)
        for op in comb_ops:
            if op in var_list[0][1]:
                combined_feature = transform(new_features,
                                             rename=True,
                                             replace=True,
                                             trans_type=op,
                                             verbose=0)[0]
                break
    else:
        combined_feature = var_list[0][2]
    combined_feature = pd.concat([features, combined_feature], axis=1)
    return combined_feature
Пример #14
0
def main(test_dir,
         checkpoint_path,
         batch_size,
         num_workers=1,
         pin_memory=True,
         test_csv=None,
         model_name='efficientnet-b3'):

    # declare datasets
    test_ds = DataFolder(root_dir=test_dir,
                         transform=transform(is_training=False),
                         is_test=True,
                         csv_path=test_csv)
    test_loader = DataLoader(test_ds,
                             batch_size=batch_size,
                             num_workers=num_workers,
                             pin_memory=pin_memory,
                             shuffle=True)

    #init model
    model = MainModel(test_ds.__num_class__(), model_name)
    model = model.to(device)

    # load checkpoint
    load_checkpoint(torch.load(checkpoint_path), model)

    model.eval()

    iterator = tqdm(test_loader)

    num_correct = 0
    num_samples = 0

    preds = []
    groundtruths = []
    print(test_ds.class_names)

    with torch.no_grad():
        for x, y, image_paths in iterator:

            #convert to device
            x = x.to(device=device)
            y = y.to(device=device)

            # inference
            scores = torch.sigmoid(model(x))

            # get prediction
            max_score = torch.argmax(scores, dim=1)

            # add to global comparing value
            preds += max_score.to("cpu").numpy().tolist()
            groundtruths += y.to("cpu").numpy().tolist()

            #calculate score
            predictions = max_score.float()
            num_correct += (predictions == y).sum()
            num_samples += predictions.shape[0]
            iterator.set_postfix(
                accuracy=f'{float(num_correct) / float(num_samples) * 100:.2f}'
            )
            # break
    print(
        classification_report(groundtruths,
                              preds,
                              zero_division=0,
                              target_names=test_ds.class_names))
Пример #15
0
    def reDraw(self):
        pyc.background(255)
        pyc.lightSpecular(255*30/640, 255*30/640, 255*30/640)
        pyc.directionalLight(255,255,255,0,0,1)
        pyc.specular(102, 102, 102)

        # Project self.pts into image, and display it
        imgTmp = cv.cvCloneImage(self.img)
        imNP = cv.adaptors.Ipl2NumPy(scale(imgTmp, self.zoom))

        color_list = [(255,255,0),(255,0,0),(0,255,255),(0,255,0),(0,0,255),(0,100,100),(100,100,0),
                  (100,0,100),(100,200,100),(200,100,100),(100,100,200),(100,0,200),(0,200,100),
                  (0,100,200),(200,0,100),(100,0,100),(255,152,7) ]

        XformPts = tr.transform( self.transFunc(self.vals), self.pts )
        camPts = self.cam_proj_mat * tr.xyzToHomogenous(XformPts)
        camPts = camPts / camPts[2]
        camPts[0] = (camPts[0] + self.cam_centers[0]) * self.zoom
        camPts[1] = (camPts[1] + self.cam_centers[1]) * self.zoom
        camPts = np.matrix( np.round(camPts), 'int')
        
        conditions = np.concatenate([camPts[0] >= 0, 
                                     camPts[0] < imNP.shape[1],
                                     camPts[1] >= 0,
                                     camPts[1] < imNP.shape[0]], 0)
        r, c = np.where(np.all(conditions, 0))
        camPts_bound  = camPts[:, c.A[0]]
        x = np.asarray(self.pts[0])[0][c.A[0]]
        x = x - x.min()
        x = x / x.max() * 256 #512 #number of colors
        x = np.floor(x)
        x = np.asarray(np.matrix(x,'int'))[0]
        if self.display_laser:
            map2d = np.asarray(camPts_bound[0:2])
            n,m = map2d.shape
            for i in range(0,m):
                imNP[map2d[1,i],map2d[0,i], :] = [x[i],256-x[i],128+x[i]/2]#color_list[x[i]]
        imgTmp = cv.adaptors.NumPy2Ipl(imNP)
        #imgSmall = cv.cvCreateImage(cv.cvSize(imgTmp.width/3, imgTmp.height/3), cv.IPL_DEPTH_8U, 3)
        #cv.cvResize(imgTmp, imgSmall, cv.CV_INTER_AREA)
        im = cv.adaptors.Ipl2PIL(imgTmp)

        #pyc.rotate(math.radians(90))
        pyc.image(im, 0,0, self.width, self.height)
        #pyc.rotate(math.radians(-90))


        # Display the current values of the parameter vector (and highlight the selected one)
        pyc.textSize(10)
        for i, val in enumerate(self.vals):
            if np.nonzero(self.selected)[0] == i: 
                print 'x',
            print '%8.4f ' % self.vals[i], 
            pval = '%7s: %8.4f' % (self.names[i], self.vals[i])
            pyc.text(pval, self.width + 15, 20 + 20*i, 0)
            if np.nonzero(self.selected)[0] == i:
                pyc.fill(255,0,0)
                pyc.quad(self.width+4.0,  15.0 + 20.0*i - 7.0,
                         self.width+4.0,  15.0 + 20.0*i + 7.0,
                         self.width+13.0, 15.0 + 20.0*i,
                         self.width+13.0, 15.0 + 20.0*i)
        print '\n'
        
        self.move(pyc.escape_handler(pyc.draw()))
Пример #16
0
def preprocess_features(features, scaler_normal = None, scaler_01 = None):
    """Prepare features, including handling missing values, normalization, PCA, etc.

    Args:
        url  (string): The download address.
        path (string): The location to save the download.

    Returns:
        bool: True if successful, False otherwise.
    """

    # Impute NaNs using the median
    #g = features.columns.to_series().groupby(features.dtypes).groups
    #print([x for x in g])
    # [dtype('float64'), dtype('uint8'), dtype('bool'), dtype('int64')]

    tags = features.tags
    #features = smart_impute(features, ["LotFrontage"])
    print(features["LotFrontage"])
    features = impute(features, strategy='median')
    print(features["LotFrontage"])

    # Split categorical features
    print_feature_dtypes(features)
    features.tags = tags
    id, continuous_features, categorical_features, ordinal_features = split_features(features, dont_rescale=["Id","MiscVal"])

    skewed_features = get_skewed_features(continuous_features)
    non_skewed_cont_features = [x for x in list(continuous_features) if x not in list(skewed_features)]

    #print(non_skewed_cont_features)
    continuous_features_log, _ = transform(continuous_features, rename=True, replace=True, trans_type="log")
    continuous_features_inverse, _ = transform(continuous_features, rename=True, replace=True, trans_type="inverse")
    continuous_features_normal, scaler_normal = transform(continuous_features, rename=True, replace=True, trans_type="normal", scaler=scaler_normal)
    continuous_features01, scaler_01 = transform(continuous_features, rename=True, replace=True, trans_type="scale01", scaler=scaler_01)
    continuous_features_root, _ = transform(continuous_features, rename=True, replace=True, trans_type="root")
    continuous_features_quad, _ = transform(continuous_features, rename=True, replace=True, trans_type="quadratic")
    df_list = [continuous_features_log, continuous_features_inverse, continuous_features_root, continuous_features, continuous_features_normal, continuous_features01, continuous_features_quad]
    #
    for df in df_list:
        if df.isnull().values.any():
            print(df.columns[0])
            print(df[df.isnull()])


    continuous_features = pd.concat(df_list, axis=1)

    """
    if USE_LOG:
        continuous_features[skewed_features] = np.log1p(continuous_features[skewed_features])
        continuous_features[non_skewed_cont_features], scaler = normalize(continuous_features[non_skewed_cont_features])
    else:
        # Normalize
        continuous_features, scaler = normalize(continuous_features, scaler)
    """



    # PCA
    #continuous_features = use_pca(continuous_features)

    # Recombine
    features = pd.concat([id, continuous_features, categorical_features, ordinal_features], axis=1)

    return features, scaler_normal, scaler_01
Пример #17
0
import tqdm

import datahandling as dh
import ease_grid as eg
from validate import RETRIEVAL_MIN
from validation_db_orm import (
    date_to_int,
    get_db_session,
    DbWMOMetDailyTempRecord,
    DbWMOMetStation,
)
from transforms import N45_VIEW_TRANS as transform


pred = np.load("../runs/gscc/2020-11-02-19:51:31.769613-gold/pred.npy")
land_mask = ~transform(np.load("../data/masks/ft_esdr_water_mask.npy"))

dates, _, _ = dh.read_accuracies_file(
    "../runs/gscc/2020-11-02-19:51:31.769613-gold/acc.csv"
)
d2i = {d: i for i, d in enumerate(dates)}
assert len(dates) == len(pred)
d2p = {d: p.ravel() for d, p in zip(dates, pred)}
lon, lat = [transform(x) for x in eg.v1_get_full_grid_lonlat(eg.ML)]

df = dh.get_aws_full_data_for_dates(
    dates,
    "../data/dbs/wmo_gsod.db",
    land_mask,
    lon,
    lat,