Modelling of chip probabilities

import pandas, geopandas
import os, json

from sklearn.ensemble import (
    RandomForestClassifier, 
    GradientBoostingClassifier, 
    HistGradientBoostingClassifier
)
from sklearn.model_selection import GridSearchCV
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

import tools_chip_prob_modelling as tools
ERROR 1: PROJ: proj_create_from_database: Open of /opt/conda/share/proj failed

Data

Probabilities

Probabilities for each category by chip, as produced by the neural network:

probs = geopandas.read_parquet('/home/jovyan/data/spatial_signatures/chip_probs/32_nw_pred.parquet')

We also keep the names of all classes separate and semantically sorted as it’ll come in handy afterwards:

tools.class_names
['urbanity',
 'dense_urban_neighbourhoods',
 'dense_residential_neighbourhoods',
 'connected_residential_neighbourhoods',
 'gridded_residential_quarters',
 'accessible_suburbia',
 'disconnected_suburbia',
 'open_sprawl',
 'warehouse_park_land',
 'urban_buffer',
 'countryside_agriculture',
 'wild_countryside']

Labels

Proportions of observed classes per chip. They are aligned with probs so we can remove the geometry column.

labels = pandas.read_parquet(
    '/home/jovyan/data/spatial_signatures/chip_probs/chip_proportions.pq'
).drop('geometry', axis=1)

These are encoded in following a grouping described in the JSON model file:

cd2nm = tools.parse_nn_json(
    '/home/jovyan/data/spatial_signatures/chip_probs/efficientnet_pooling_256_12.json'
)

We replace the code in labels by the name and aggregate by column names so we have the proportions in each chip by name rather than code:

relabels = labels.rename(columns=cd2nm).groupby(level=0, axis=1).sum()

relabels contains a few rows with a total probability sum of 0: these are chips that fall within the water. We remove them:

relabels_nw = relabels[relabels.sum(axis=1) > 0.5] # 0.5 to avoid rounding errors

To begin with, we focus on single class chips. We identify which are single class:

single_class = relabels_nw.where(relabels_nw==1).sum(axis=1).astype('bool')
single_class.sum() * 100 / single_class.shape[0] # Pct single class
66.80763900211969

And then pull the class for each of them:

label = pandas.Categorical(relabels_nw.idxmax(axis=1))

Build db_all

Single table with probabilities, labels and single-class flag:

db_all = probs.join(
    pandas.DataFrame({'label': label, 'single_class': single_class})
)
db_all['single_class'] = db_all['single_class'].fillna(False)

Note not all chips have a label and single_class value. To make sure they are consistent, we replace the N/A in single_class by a False.

Train/Validation split

Next, we split the sample into train and validation sets. The training split proportion is set by the global parameter TRAIN_FRAC.

db_all['train_all'] = False
db_all.loc[
    db_all.sample(frac=tools.TRAIN_FRAC, random_state=1234).index, 'train_all'
] = True

Spatial lag

Overview

Some models will include spatial context. Here we calculate these measures through the spatial lag of the probability for each class. Given we are in a train/validation split context, there are two ways to approach the construction of the lag:

  1. [wa] Absolute lag: we first calculate the lag for each chip, then split between train/validation. This ensures the lag is representative of the geographic context on the ground, but runs the risk of spilling information between train and validation samples. We say here “runs the risk” because the validation chips are not used as focal chips for training and thus the model does not “see” them as such. However, validation chips are also seen by the model as context, and that does make information cross between the sets. We consider this option as a way to explore the extent of this issue. One complication is that this approach also provides more information about geographic context. In the vent these models had higher performance (likely), it might not be clear which source is driving the boost: the better representation of geographic context, or the information cross-over between train and validation sets.

  2. [ws] Split lag: here we start by splitting the set into train/validation and then we calculate the spatial lag separately. This is a cleaner way to assess performance, but also one that distorts geographical context so might potentially perform worse than a model that could include a better representation.

  3. [wbs] Block split lag: here we use a different train/validation split that relies on blocks of 3x3 chips to not be separated. Also, we only use focal chips for model fitting and evaluation. This ensures a clean cut between train/val and full geographic context, at the expense of less observations in the model.

After discussions, we have decided to start with ws. Upon further reflection, wa implies a clear case of “leakage” of information from the validation into the training sets, and thus “pollutes” the estimates of accuracy. The wbs remains valid but two caveats apply: a) a proper implementation of the approach results in an important loss of observations (for every 3x3 block of chips, only one of them enters the modeling), and this probably has an important effect on smaller classes such as the urbanities; b) at a theoretical level, it is still not clear it’s the preferred approach (see Wadoux et al. 2021; for context). On this last point, my (DA-B) sense is that it still makes sense to block in smaller chunks and split those between train and validation because you want to ensure that the effect of context is characterised adequately, and the risk of not picking up the variation desired in both training and validation sets (the main concern of Wadoux et al. 2021) is lessened by blocking at a relatively small scale and randomly sampling from those

Split lag

lag_all = db_all.groupby('train_all').apply(
    tools.lag_columns, cols=tools.class_names
)
/opt/conda/lib/python3.9/site-packages/libpysal/weights/weights.py:172: UserWarning: The weights matrix is not fully connected: 
 There are 4895 disconnected components.
 There are 1771 islands with ids: 11, 13, 14, 15, 28, 44, 46, 52, 53, 66, 71, 140, 156, 175, 185, 189, 195, 209, 219, 292, 293, 333, 342, 359, 398, 425, 432, 436, 452, 477, 480, 481, 521, 537, 561, 582, 596, 597, 599, 627, 629, 654, 656, 688, 804, 841, 860, 885, 896, 936, 975, 1001, 1010, 1074, 1140, 1149, 1181, 1182, 1183, 1185, 1186, 1197, 1198, 1218, 1227, 1228, 1229, 1230, 1272, 1273, 1284, 1294, 1296, 1300, 1346, 1357, 1386, 1408, 1413, 1489, 1502, 1503, 1509, 1518, 1519, 1521, 1541, 1564, 1595, 1603, 1612, 1707, 1710, 1711, 1754, 1868, 1870, 1874, 1884, 1894, 1921, 1942, 1943, 1953, 1955, 1956, 1957, 1965, 1969, 1981, 1985, 2032, 2036, 2067, 2105, 2120, 2121, 2125, 2126, 2133, 2166, 2187, 2206, 2217, 2220, 2226, 2228, 2280, 2325, 2337, 2352, 2372, 2386, 2435, 2449, 2457, 2473, 2480, 2492, 2515, 2533, 2560, 2561, 2562, 2570, 2584, 2587, 2596, 2607, 2710, 2711, 2733, 2742, 2756, 2765, 2781, 2817, 2819, 2820, 2828, 2851, 2864, 2868, 2874, 2885, 2887, 2890, 2891, 2892, 2893, 2894, 2918, 2924, 2926, 2942, 2957, 2962, 2980, 3022, 3025, 3026, 3054, 3057, 3117, 3140, 3142, 3143, 3146, 3174, 3203, 3238, 3284, 3308, 3309, 3315, 3340, 3341, 3342, 3356, 3374, 3384, 3389, 3432, 3529, 3536, 3550, 3551, 3557, 3582, 3595, 3616, 3644, 3645, 3680, 3689, 3696, 3724, 3752, 3771, 3777, 3783, 3788, 3830, 3831, 3832, 3859, 3915, 3916, 3988, 3998, 4011, 4036, 4041, 4042, 4067, 4068, 4069, 4080, 4097, 4098, 4123, 4135, 4196, 4203, 4204, 4218, 4220, 4224, 4230, 4231, 4232, 4246, 4251, 4257, 4258, 4282, 4287, 4292, 4387, 4393, 4398, 4417, 4446, 4475, 4498, 4504, 4516, 4548, 4574, 4579, 4604, 4616, 4622, 4623, 4647, 4648, 4656, 4661, 4667, 4680, 4699, 4718, 4765, 4778, 4807, 4820, 4850, 4868, 4877, 4878, 4879, 4888, 4921, 4948, 4957, 4958, 4971, 4983, 4984, 5005, 5030, 5031, 5039, 5042, 5083, 5089, 5091, 5135, 5139, 5154, 5168, 5173, 5184, 5192, 5226, 5279, 5288, 5305, 5306, 5310, 5337, 5383, 5403, 5424, 5451, 5495, 5500, 5549, 5553, 5585, 5589, 5632, 5679, 5692, 5693, 5695, 5717, 5760, 5866, 5872, 5962, 5982, 5989, 5991, 6004, 6005, 6018, 6047, 6053, 6055, 6064, 6141, 6206, 6210, 6211, 6240, 6251, 6262, 6264, 6292, 6328, 6331, 6332, 6350, 6360, 6391, 6394, 6441, 6442, 6448, 6452, 6458, 6469, 6484, 6508, 6511, 6525, 6537, 6561, 6568, 6585, 6600, 6640, 6683, 6684, 6686, 6687, 6702, 6711, 6723, 6742, 6757, 6774, 6812, 6816, 6826, 6848, 6863, 6873, 6896, 6934, 6969, 6970, 6971, 6989, 7014, 7049, 7050, 7051, 7087, 7093, 7105, 7166, 7167, 7173, 7212, 7216, 7235, 7240, 7265, 7274, 7275, 7304, 7350, 7351, 7359, 7363, 7378, 7386, 7387, 7453, 7466, 7468, 7476, 7487, 7504, 7538, 7564, 7568, 7569, 7597, 7616, 7617, 7638, 7641, 7642, 7644, 7648, 7649, 7650, 7651, 7665, 7666, 7673, 7690, 7693, 7704, 7708, 7760, 7774, 7775, 7781, 7801, 7802, 7811, 7812, 7813, 7814, 7831, 7854, 7858, 7920, 7965, 7966, 8006, 8012, 8013, 8024, 8025, 8031, 8038, 8078, 8079, 8097, 8113, 8128, 8133, 8140, 8188, 8193, 8215, 8216, 8246, 8249, 8250, 8252, 8253, 8258, 8290, 8303, 8314, 8337, 8338, 8362, 8368, 8410, 8476, 8477, 8489, 8490, 8509, 8516, 8523, 8533, 8538, 8543, 8563, 8637, 8672, 8679, 8722, 8723, 8739, 8744, 8798, 8811, 8840, 8878, 8896, 8917, 8927, 8928, 8978, 8988, 9024, 9047, 9052, 9083, 9085, 9099, 9196, 9211, 9219, 9220, 9226, 9270, 9296, 9297, 9299, 9325, 9342, 9399, 9406, 9412, 9413, 9437, 9475, 9480, 9486, 9522, 9536, 9538, 9544, 9546, 9561, 9562, 9566, 9567, 9648, 9656, 9663, 9666, 9677, 9686, 9688, 9690, 9761, 9773, 9781, 9788, 9879, 9894, 9931, 9939, 9942, 9943, 9955, 10004, 10037, 10043, 10084, 10089, 10113, 10157, 10162, 10163, 10189, 10192, 10229, 10255, 10289, 10296, 10320, 10333, 10380, 10441, 10444, 10445, 10446, 10448, 10455, 10483, 10494, 10495, 10496, 10505, 10527, 10528, 10538, 10543, 10561, 10598, 10599, 10604, 10605, 10629, 10657, 10658, 10685, 10696, 10725, 10743, 10772, 10775, 10843, 10844, 10846, 10866, 10898, 10942, 10943, 10954, 11015, 11036, 11052, 11055, 11056, 11078, 11084, 11091, 11109, 11144, 11175, 11187, 11205, 11237, 11248, 11270, 11310, 11318, 11332, 11335, 11358, 11370, 11372, 11403, 11450, 11453, 11462, 11471, 11516, 11517, 11518, 11542, 11565, 11566, 11604, 11619, 11662, 11676, 11700, 11743, 11745, 11799, 11835, 11862, 11864, 11885, 11901, 11915, 11971, 11973, 11974, 11975, 11976, 11998, 12002, 12019, 12026, 12034, 12040, 12072, 12073, 12083, 12084, 12125, 12126, 12151, 12153, 12176, 12195, 12200, 12213, 12215, 12230, 12247, 12248, 12281, 12283, 12287, 12307, 12308, 12317, 12379, 12381, 12405, 12410, 12456, 12460, 12474, 12492, 12526, 12539, 12577, 12589, 12604, 12605, 12636, 12656, 12665, 12692, 12693, 12702, 12723, 12726, 12836, 12848, 12851, 12891, 12898, 12901, 12910, 12911, 12913, 12920, 12932, 12937, 12938, 12939, 12953, 12998, 13000, 13001, 13021, 13022, 13034, 13042, 13043, 13054, 13062, 13063, 13089, 13107, 13116, 13129, 13154, 13159, 13169, 13196, 13204, 13207, 13238, 13239, 13256, 13353, 13354, 13355, 13399, 13406, 13407, 13432, 13440, 13442, 13443, 13463, 13493, 13514, 13542, 13562, 13603, 13651, 13653, 13659, 13670, 13681, 13683, 13691, 13700, 13766, 13773, 13779, 13782, 13783, 13790, 13814, 13834, 13835, 13885, 13925, 13926, 13940, 13945, 13964, 13969, 13997, 14016, 14021, 14029, 14031, 14038, 14043, 14057, 14067, 14106, 14119, 14131, 14135, 14136, 14152, 14173, 14174, 14175, 14196, 14199, 14200, 14302, 14341, 14344, 14347, 14352, 14353, 14357, 14403, 14413, 14490, 14539, 14576, 14580, 14586, 14599, 14606, 14649, 14654, 14683, 14755, 14756, 14766, 14779, 14785, 14790, 14803, 14832, 14845, 14891, 14899, 14900, 14901, 14916, 14929, 14935, 14946, 14993, 15051, 15091, 15102, 15173, 15185, 15207, 15208, 15291, 15302, 15361, 15373, 15376, 15377, 15386, 15392, 15416, 15468, 15526, 15527, 15533, 15543, 15562, 15577, 15591, 15592, 15612, 15644, 15692, 15695, 15699, 15707, 15708, 15725, 15751, 15754, 15773, 15788, 15824, 15832, 15882, 15889, 15913, 15914, 15924, 15925, 15966, 15970, 15974, 15979, 16016, 16061, 16065, 16154, 16167, 16177, 16190, 16199, 16202, 16207, 16215, 16240, 16241, 16242, 16243, 16294, 16329, 16400, 16401, 16408, 16426, 16437, 16443, 16444, 16447, 16475, 16479, 16500, 16501, 16511, 16545, 16546, 16599, 16637, 16666, 16669, 16731, 16795, 16799, 16855, 16856, 16895, 16922, 16923, 16948, 16950, 16953, 17025, 17029, 17043, 17044, 17071, 17081, 17083, 17088, 17103, 17136, 17216, 17235, 17364, 17365, 17367, 17387, 17425, 17430, 17441, 17463, 17464, 17468, 17487, 17497, 17498, 17525, 17529, 17533, 17578, 17665, 17674, 17678, 17692, 17726, 17727, 17728, 17734, 17738, 17739, 17742, 17798, 17821, 17831, 17837, 17896, 17903, 17914, 17925, 17954, 17955, 17957, 17974, 18019, 18022, 18053, 18060, 18115, 18116, 18141, 18184, 18189, 18206, 18218, 18226, 18237, 18239, 18262, 18267, 18317, 18364, 18371, 18372, 18390, 18391, 18402, 18405, 18409, 18439, 18458, 18462, 18468, 18495, 18511, 18522, 18532, 18539, 18540, 18547, 18548, 18597, 18626, 18632, 18689, 18728, 18734, 18739, 18742, 18752, 18788, 18828, 18834, 18835, 18842, 18843, 18887, 18903, 18910, 18914, 18938, 18965, 18968, 19015, 19023, 19038, 19053, 19060, 19068, 19080, 19081, 19094, 19096, 19123, 19124, 19199, 19212, 19230, 19261, 19303, 19327, 19365, 19381, 19382, 19386, 19388, 19404, 19433, 19437, 19446, 19488, 19489, 19497, 19498, 19541, 19549, 19552, 19592, 19602, 19649, 19679, 19735, 19792, 19804, 19809, 19810, 19811, 19814, 19821, 19832, 19838, 19919, 19944, 19965, 19979, 20008, 20042, 20043, 20047, 20048, 20055, 20058, 20061, 20097, 20105, 20110, 20111, 20143, 20147, 20152, 20157, 20158, 20175, 20216, 20241, 20248, 20266, 20271, 20277, 20278, 20297, 20362, 20376, 20395, 20405, 20410, 20425, 20432, 20439, 20445, 20468, 20495, 20496, 20497, 20505, 20514, 20520, 20523, 20540, 20542, 20543, 20575, 20610, 20628, 20630, 20635, 20636, 20648, 20653, 20686, 20713, 20723, 20725, 20728, 20731, 20756, 20778, 20836, 20874, 20919, 20920, 20930, 20933, 20960, 20968, 20971, 20973, 20988, 20990, 21013, 21044, 21134, 21138, 21173, 21216, 21262, 21277, 21292, 21342, 21344, 21345, 21346, 21352, 21434, 21472, 21477, 21500, 21501, 21538, 21541, 21573, 21574, 21575, 21576, 21599, 21657, 21673, 21680, 21714, 21715, 21719, 21784, 21794, 21821, 21851, 21857, 21867, 21878, 21888, 21915, 21955, 22011, 22054, 22056, 22075, 22087, 22131, 22179, 22218, 22272, 22274, 22276, 22284, 22314, 22335, 22341, 22343, 22347, 22348, 22383, 22414, 22424, 22433, 22436, 22453, 22462, 22492, 22631, 22652, 22696, 22730, 22731, 22732, 22733, 22734, 22744, 22746, 22796, 22807, 22814, 22817, 22847, 22859, 22866, 22917, 22941, 22949, 22976, 22987, 22992, 23024, 23047, 23078, 23093, 23096, 23097, 23124, 23125, 23154, 23159, 23226, 23241, 23255, 23256, 23264, 23265, 23270, 23271, 23272, 23276, 23281, 23282, 23284, 23321, 23398, 23403, 23404, 23442, 23444, 23473, 23515, 23539, 23562, 23573, 23605, 23624, 23639, 23661, 23687, 23779, 23781, 23808, 23817, 23822, 23844, 23857, 23861, 23885, 23906, 23957, 24021, 24022, 24046, 24057, 24111, 24121, 24129, 24158, 24171, 24187, 24243, 24268, 24296, 24354, 24358, 24361, 24378, 24401, 24403, 24472, 24511, 24524, 24548, 24586, 24589, 24627, 24664, 24669, 24680, 24685, 24693, 24737, 24776, 24789, 24801, 24807, 24825, 24828, 24836, 24837, 24861, 24880, 24904, 24915, 24931, 24949, 24981, 24997, 25000, 25001, 25023, 25044, 25081, 25084, 25087, 25106, 25113, 25114, 25149, 25213, 25224, 25287, 25307, 25314, 25351, 25384, 25385, 25392, 25400, 25414, 25415, 25418, 25430, 25435, 25450, 25470, 25487, 25500, 25506, 25512, 25513, 25528, 25529, 25542, 25580, 25583, 25589, 25590, 25600, 25611, 25645, 25647, 25680, 25682, 25697, 25719, 25740, 25759, 25819, 25849, 25853, 25860, 25866, 25867, 25877, 25886, 25887, 25900, 25907, 25912, 25963, 25976, 25977, 26033, 26034, 26088, 26109, 26116, 26117, 26119, 26122, 26136, 26141, 26162, 26198, 26199, 26222, 26243, 26246, 26248, 26251, 26256, 26264, 26278, 26285, 26286, 26287, 26350, 26354, 26374, 26375, 26379, 26380, 26383, 26404, 26413, 26441, 26459, 26479, 26496, 26541, 26552, 26569, 26630, 26690, 26691, 26713, 26716, 26717, 26720, 26721, 26722, 26729, 26741, 26764, 26778, 26797, 26828, 26859, 26976, 26978, 26979, 26980, 27002, 27026, 27050, 27085, 27204, 27205, 27208, 27233, 27286, 27287, 27303, 27325, 27326, 27351, 27358, 27390, 27411, 27420, 27421, 27424, 27469, 27478, 27495, 27496, 27508, 27510, 27519, 27521, 27538, 27546, 27549, 27550, 27566, 27619, 27641, 27643, 27686, 27687, 27688, 27706, 27727, 27739, 27771, 27795, 27817, 27827, 27851, 27869, 27883, 27884, 27886, 27963, 27964, 27968, 27999, 28037, 28039, 28094, 28106, 28134, 28135, 28136, 28143, 28145, 28152, 28218, 28219, 28220, 28234, 28306, 28330, 28337, 28339, 28367, 28379, 28381, 28398, 28410, 28411, 28427, 28435, 28437, 28490, 28546, 28561, 28573, 28582, 28586, 28587, 28592, 28593, 28597, 28598, 28618, 28619, 28623, 28633, 28639, 28644, 28673, 28681, 28682, 28683, 28686, 28717, 28721, 28754, 28758, 28775, 28796, 28798, 28807, 28808, 28859, 28863, 28881, 28899, 28911, 28912, 28913, 28920, 28967, 28994, 29000, 29002, 29019, 29036, 29050, 29081, 29087, 29139, 29140, 29150, 29192, 29194, 29203, 29208, 29216, 29219, 29220, 29222, 29233, 29238, 29262, 29270, 29312, 29331, 29335, 29350, 29371, 29372, 29414, 29416, 29426, 29430, 29477, 29525, 29532, 29573, 29592, 29619, 29620, 29635, 29694, 29704, 29705, 29706, 29708, 29752, 29771, 29774, 29782, 29796, 29821, 29825, 29828, 29862, 29863, 29874, 29878, 29879, 29891, 29892, 29894, 29895, 29921, 29923, 29935, 29939, 29940, 29948, 29978, 29985, 29991, 29994, 29998, 30013, 30025, 30026, 30052, 30099, 30110, 30114, 30115, 30125, 30189, 30196, 30216, 30227, 30288, 30294, 30303, 30317, 30371, 30402, 30406, 30408, 30449, 30450, 30560, 30567, 30588, 30615, 30647, 30670, 30687, 30728, 30729, 30730, 30780, 30781, 30804, 30806, 30823, 30825, 30830, 30832, 30833, 30865, 30878, 30895, 30901.
  warnings.warn(message)
('WARNING: ', 11, ' is an island (no neighbors)')
('WARNING: ', 13, ' is an island (no neighbors)')
('WARNING: ', 14, ' is an island (no neighbors)')
('WARNING: ', 15, ' is an island (no neighbors)')
('WARNING: ', 28, ' is an island (no neighbors)')
('WARNING: ', 44, ' is an island (no neighbors)')
('WARNING: ', 46, ' is an island (no neighbors)')
('WARNING: ', 52, ' is an island (no neighbors)')
('WARNING: ', 53, ' is an island (no neighbors)')
('WARNING: ', 66, ' is an island (no neighbors)')
('WARNING: ', 71, ' is an island (no neighbors)')
('WARNING: ', 140, ' is an island (no neighbors)')
('WARNING: ', 156, ' is an island (no neighbors)')
('WARNING: ', 175, ' is an island (no neighbors)')
('WARNING: ', 185, ' is an island (no neighbors)')
('WARNING: ', 189, ' is an island (no neighbors)')
('WARNING: ', 195, ' is an island (no neighbors)')
('WARNING: ', 209, ' is an island (no neighbors)')
('WARNING: ', 219, ' is an island (no neighbors)')
('WARNING: ', 292, ' is an island (no neighbors)')
('WARNING: ', 293, ' is an island (no neighbors)')
('WARNING: ', 333, ' is an island (no neighbors)')
('WARNING: ', 342, ' is an island (no neighbors)')
('WARNING: ', 359, ' is an island (no neighbors)')
('WARNING: ', 398, ' is an island (no neighbors)')
('WARNING: ', 425, ' is an island (no neighbors)')
('WARNING: ', 432, ' is an island (no neighbors)')
('WARNING: ', 436, ' is an island (no neighbors)')
('WARNING: ', 452, ' is an island (no neighbors)')
('WARNING: ', 477, ' is an island (no neighbors)')
('WARNING: ', 480, ' is an island (no neighbors)')
('WARNING: ', 481, ' is an island (no neighbors)')
('WARNING: ', 521, ' is an island (no neighbors)')
('WARNING: ', 537, ' is an island (no neighbors)')
('WARNING: ', 561, ' is an island (no neighbors)')
('WARNING: ', 582, ' is an island (no neighbors)')
('WARNING: ', 596, ' is an island (no neighbors)')
('WARNING: ', 597, ' is an island (no neighbors)')
('WARNING: ', 599, ' is an island (no neighbors)')
('WARNING: ', 627, ' is an island (no neighbors)')
('WARNING: ', 629, ' is an island (no neighbors)')
('WARNING: ', 654, ' is an island (no neighbors)')
('WARNING: ', 656, ' is an island (no neighbors)')
('WARNING: ', 688, ' is an island (no neighbors)')
('WARNING: ', 804, ' is an island (no neighbors)')
('WARNING: ', 841, ' is an island (no neighbors)')
('WARNING: ', 860, ' is an island (no neighbors)')
('WARNING: ', 885, ' is an island (no neighbors)')
('WARNING: ', 896, ' is an island (no neighbors)')
('WARNING: ', 936, ' is an island (no neighbors)')
('WARNING: ', 975, ' is an island (no neighbors)')
('WARNING: ', 1001, ' is an island (no neighbors)')
('WARNING: ', 1010, ' is an island (no neighbors)')
('WARNING: ', 1074, ' is an island (no neighbors)')
('WARNING: ', 1140, ' is an island (no neighbors)')
('WARNING: ', 1149, ' is an island (no neighbors)')
('WARNING: ', 1181, ' is an island (no neighbors)')
('WARNING: ', 1182, ' is an island (no neighbors)')
('WARNING: ', 1183, ' is an island (no neighbors)')
('WARNING: ', 1185, ' is an island (no neighbors)')
('WARNING: ', 1186, ' is an island (no neighbors)')
('WARNING: ', 1197, ' is an island (no neighbors)')
('WARNING: ', 1198, ' is an island (no neighbors)')
('WARNING: ', 1218, ' is an island (no neighbors)')
('WARNING: ', 1227, ' is an island (no neighbors)')
('WARNING: ', 1228, ' is an island (no neighbors)')
('WARNING: ', 1229, ' is an island (no neighbors)')
('WARNING: ', 1230, ' is an island (no neighbors)')
('WARNING: ', 1272, ' is an island (no neighbors)')
('WARNING: ', 1273, ' is an island (no neighbors)')
('WARNING: ', 1284, ' is an island (no neighbors)')
('WARNING: ', 1294, ' is an island (no neighbors)')
('WARNING: ', 1296, ' is an island (no neighbors)')
('WARNING: ', 1300, ' is an island (no neighbors)')
('WARNING: ', 1346, ' is an island (no neighbors)')
('WARNING: ', 1357, ' is an island (no neighbors)')
('WARNING: ', 1386, ' is an island (no neighbors)')
('WARNING: ', 1408, ' is an island (no neighbors)')
('WARNING: ', 1413, ' is an island (no neighbors)')
('WARNING: ', 1489, ' is an island (no neighbors)')
('WARNING: ', 1502, ' is an island (no neighbors)')
('WARNING: ', 1503, ' is an island (no neighbors)')
('WARNING: ', 1509, ' is an island (no neighbors)')
('WARNING: ', 1518, ' is an island (no neighbors)')
('WARNING: ', 1519, ' is an island (no neighbors)')
('WARNING: ', 1521, ' is an island (no neighbors)')
('WARNING: ', 1541, ' is an island (no neighbors)')
('WARNING: ', 1564, ' is an island (no neighbors)')
('WARNING: ', 1595, ' is an island (no neighbors)')
('WARNING: ', 1603, ' is an island (no neighbors)')
('WARNING: ', 1612, ' is an island (no neighbors)')
('WARNING: ', 1707, ' is an island (no neighbors)')
('WARNING: ', 1710, ' is an island (no neighbors)')
('WARNING: ', 1711, ' is an island (no neighbors)')
('WARNING: ', 1754, ' is an island (no neighbors)')
('WARNING: ', 1868, ' is an island (no neighbors)')
('WARNING: ', 1870, ' is an island (no neighbors)')
('WARNING: ', 1874, ' is an island (no neighbors)')
('WARNING: ', 1884, ' is an island (no neighbors)')
('WARNING: ', 1894, ' is an island (no neighbors)')
('WARNING: ', 1921, ' is an island (no neighbors)')
('WARNING: ', 1942, ' is an island (no neighbors)')
('WARNING: ', 1943, ' is an island (no neighbors)')
('WARNING: ', 1953, ' is an island (no neighbors)')
('WARNING: ', 1955, ' is an island (no neighbors)')
('WARNING: ', 1956, ' is an island (no neighbors)')
('WARNING: ', 1957, ' is an island (no neighbors)')
('WARNING: ', 1965, ' is an island (no neighbors)')
('WARNING: ', 1969, ' is an island (no neighbors)')
('WARNING: ', 1981, ' is an island (no neighbors)')
('WARNING: ', 1985, ' is an island (no neighbors)')
('WARNING: ', 2032, ' is an island (no neighbors)')
('WARNING: ', 2036, ' is an island (no neighbors)')
('WARNING: ', 2067, ' is an island (no neighbors)')
('WARNING: ', 2105, ' is an island (no neighbors)')
('WARNING: ', 2120, ' is an island (no neighbors)')
('WARNING: ', 2121, ' is an island (no neighbors)')
('WARNING: ', 2125, ' is an island (no neighbors)')
('WARNING: ', 2126, ' is an island (no neighbors)')
('WARNING: ', 2133, ' is an island (no neighbors)')
('WARNING: ', 2166, ' is an island (no neighbors)')
('WARNING: ', 2187, ' is an island (no neighbors)')
('WARNING: ', 2206, ' is an island (no neighbors)')
('WARNING: ', 2217, ' is an island (no neighbors)')
('WARNING: ', 2220, ' is an island (no neighbors)')
('WARNING: ', 2226, ' is an island (no neighbors)')
('WARNING: ', 2228, ' is an island (no neighbors)')
('WARNING: ', 2280, ' is an island (no neighbors)')
('WARNING: ', 2325, ' is an island (no neighbors)')
('WARNING: ', 2337, ' is an island (no neighbors)')
('WARNING: ', 2352, ' is an island (no neighbors)')
('WARNING: ', 2372, ' is an island (no neighbors)')
('WARNING: ', 2386, ' is an island (no neighbors)')
('WARNING: ', 2435, ' is an island (no neighbors)')
('WARNING: ', 2449, ' is an island (no neighbors)')
('WARNING: ', 2457, ' is an island (no neighbors)')
('WARNING: ', 2473, ' is an island (no neighbors)')
('WARNING: ', 2480, ' is an island (no neighbors)')
('WARNING: ', 2492, ' is an island (no neighbors)')
('WARNING: ', 2515, ' is an island (no neighbors)')
('WARNING: ', 2533, ' is an island (no neighbors)')
('WARNING: ', 2560, ' is an island (no neighbors)')
('WARNING: ', 2561, ' is an island (no neighbors)')
('WARNING: ', 2562, ' is an island (no neighbors)')
('WARNING: ', 2570, ' is an island (no neighbors)')
('WARNING: ', 2584, ' is an island (no neighbors)')
('WARNING: ', 2587, ' is an island (no neighbors)')
('WARNING: ', 2596, ' is an island (no neighbors)')
('WARNING: ', 2607, ' is an island (no neighbors)')
('WARNING: ', 2710, ' is an island (no neighbors)')
('WARNING: ', 2711, ' is an island (no neighbors)')
('WARNING: ', 2733, ' is an island (no neighbors)')
('WARNING: ', 2742, ' is an island (no neighbors)')
('WARNING: ', 2756, ' is an island (no neighbors)')
('WARNING: ', 2765, ' is an island (no neighbors)')
('WARNING: ', 2781, ' is an island (no neighbors)')
('WARNING: ', 2817, ' is an island (no neighbors)')
('WARNING: ', 2819, ' is an island (no neighbors)')
('WARNING: ', 2820, ' is an island (no neighbors)')
('WARNING: ', 2828, ' is an island (no neighbors)')
('WARNING: ', 2851, ' is an island (no neighbors)')
('WARNING: ', 2864, ' is an island (no neighbors)')
('WARNING: ', 2868, ' is an island (no neighbors)')
('WARNING: ', 2874, ' is an island (no neighbors)')
('WARNING: ', 2885, ' is an island (no neighbors)')
('WARNING: ', 2887, ' is an island (no neighbors)')
('WARNING: ', 2890, ' is an island (no neighbors)')
('WARNING: ', 2891, ' is an island (no neighbors)')
('WARNING: ', 2892, ' is an island (no neighbors)')
('WARNING: ', 2893, ' is an island (no neighbors)')
('WARNING: ', 2894, ' is an island (no neighbors)')
('WARNING: ', 2918, ' is an island (no neighbors)')
('WARNING: ', 2924, ' is an island (no neighbors)')
('WARNING: ', 2926, ' is an island (no neighbors)')
('WARNING: ', 2942, ' is an island (no neighbors)')
('WARNING: ', 2957, ' is an island (no neighbors)')
('WARNING: ', 2962, ' is an island (no neighbors)')
('WARNING: ', 2980, ' is an island (no neighbors)')
('WARNING: ', 3022, ' is an island (no neighbors)')
('WARNING: ', 3025, ' is an island (no neighbors)')
('WARNING: ', 3026, ' is an island (no neighbors)')
('WARNING: ', 3054, ' is an island (no neighbors)')
('WARNING: ', 3057, ' is an island (no neighbors)')
('WARNING: ', 3117, ' is an island (no neighbors)')
('WARNING: ', 3140, ' is an island (no neighbors)')
('WARNING: ', 3142, ' is an island (no neighbors)')
('WARNING: ', 3143, ' is an island (no neighbors)')
('WARNING: ', 3146, ' is an island (no neighbors)')
('WARNING: ', 3174, ' is an island (no neighbors)')
('WARNING: ', 3203, ' is an island (no neighbors)')
('WARNING: ', 3238, ' is an island (no neighbors)')
('WARNING: ', 3284, ' is an island (no neighbors)')
('WARNING: ', 3308, ' is an island (no neighbors)')
('WARNING: ', 3309, ' is an island (no neighbors)')
('WARNING: ', 3315, ' is an island (no neighbors)')
('WARNING: ', 3340, ' is an island (no neighbors)')
('WARNING: ', 3341, ' is an island (no neighbors)')
('WARNING: ', 3342, ' is an island (no neighbors)')
('WARNING: ', 3356, ' is an island (no neighbors)')
('WARNING: ', 3374, ' is an island (no neighbors)')
('WARNING: ', 3384, ' is an island (no neighbors)')
('WARNING: ', 3389, ' is an island (no neighbors)')
('WARNING: ', 3432, ' is an island (no neighbors)')
('WARNING: ', 3529, ' is an island (no neighbors)')
('WARNING: ', 3536, ' is an island (no neighbors)')
('WARNING: ', 3550, ' is an island (no neighbors)')
('WARNING: ', 3551, ' is an island (no neighbors)')
('WARNING: ', 3557, ' is an island (no neighbors)')
('WARNING: ', 3582, ' is an island (no neighbors)')
('WARNING: ', 3595, ' is an island (no neighbors)')
('WARNING: ', 3616, ' is an island (no neighbors)')
('WARNING: ', 3644, ' is an island (no neighbors)')
('WARNING: ', 3645, ' is an island (no neighbors)')
('WARNING: ', 3680, ' is an island (no neighbors)')
('WARNING: ', 3689, ' is an island (no neighbors)')
('WARNING: ', 3696, ' is an island (no neighbors)')
('WARNING: ', 3724, ' is an island (no neighbors)')
('WARNING: ', 3752, ' is an island (no neighbors)')
('WARNING: ', 3771, ' is an island (no neighbors)')
('WARNING: ', 3777, ' is an island (no neighbors)')
('WARNING: ', 3783, ' is an island (no neighbors)')
('WARNING: ', 3788, ' is an island (no neighbors)')
('WARNING: ', 3830, ' is an island (no neighbors)')
('WARNING: ', 3831, ' is an island (no neighbors)')
('WARNING: ', 3832, ' is an island (no neighbors)')
('WARNING: ', 3859, ' is an island (no neighbors)')
('WARNING: ', 3915, ' is an island (no neighbors)')
('WARNING: ', 3916, ' is an island (no neighbors)')
('WARNING: ', 3988, ' is an island (no neighbors)')
('WARNING: ', 3998, ' is an island (no neighbors)')
('WARNING: ', 4011, ' is an island (no neighbors)')
('WARNING: ', 4036, ' is an island (no neighbors)')
('WARNING: ', 4041, ' is an island (no neighbors)')
('WARNING: ', 4042, ' is an island (no neighbors)')
('WARNING: ', 4067, ' is an island (no neighbors)')
('WARNING: ', 4068, ' is an island (no neighbors)')
('WARNING: ', 4069, ' is an island (no neighbors)')
('WARNING: ', 4080, ' is an island (no neighbors)')
('WARNING: ', 4097, ' is an island (no neighbors)')
('WARNING: ', 4098, ' is an island (no neighbors)')
('WARNING: ', 4123, ' is an island (no neighbors)')
('WARNING: ', 4135, ' is an island (no neighbors)')
('WARNING: ', 4196, ' is an island (no neighbors)')
('WARNING: ', 4203, ' is an island (no neighbors)')
('WARNING: ', 4204, ' is an island (no neighbors)')
('WARNING: ', 4218, ' is an island (no neighbors)')
('WARNING: ', 4220, ' is an island (no neighbors)')
('WARNING: ', 4224, ' is an island (no neighbors)')
('WARNING: ', 4230, ' is an island (no neighbors)')
('WARNING: ', 4231, ' is an island (no neighbors)')
('WARNING: ', 4232, ' is an island (no neighbors)')
('WARNING: ', 4246, ' is an island (no neighbors)')
('WARNING: ', 4251, ' is an island (no neighbors)')
('WARNING: ', 4257, ' is an island (no neighbors)')
('WARNING: ', 4258, ' is an island (no neighbors)')
('WARNING: ', 4282, ' is an island (no neighbors)')
('WARNING: ', 4287, ' is an island (no neighbors)')
('WARNING: ', 4292, ' is an island (no neighbors)')
('WARNING: ', 4387, ' is an island (no neighbors)')
('WARNING: ', 4393, ' is an island (no neighbors)')
('WARNING: ', 4398, ' is an island (no neighbors)')
('WARNING: ', 4417, ' is an island (no neighbors)')
('WARNING: ', 4446, ' is an island (no neighbors)')
('WARNING: ', 4475, ' is an island (no neighbors)')
('WARNING: ', 4498, ' is an island (no neighbors)')
('WARNING: ', 4504, ' is an island (no neighbors)')
('WARNING: ', 4516, ' is an island (no neighbors)')
('WARNING: ', 4548, ' is an island (no neighbors)')
('WARNING: ', 4574, ' is an island (no neighbors)')
('WARNING: ', 4579, ' is an island (no neighbors)')
('WARNING: ', 4604, ' is an island (no neighbors)')
('WARNING: ', 4616, ' is an island (no neighbors)')
('WARNING: ', 4622, ' is an island (no neighbors)')
('WARNING: ', 4623, ' is an island (no neighbors)')
('WARNING: ', 4647, ' is an island (no neighbors)')
('WARNING: ', 4648, ' is an island (no neighbors)')
('WARNING: ', 4656, ' is an island (no neighbors)')
('WARNING: ', 4661, ' is an island (no neighbors)')
('WARNING: ', 4667, ' is an island (no neighbors)')
('WARNING: ', 4680, ' is an island (no neighbors)')
('WARNING: ', 4699, ' is an island (no neighbors)')
('WARNING: ', 4718, ' is an island (no neighbors)')
('WARNING: ', 4765, ' is an island (no neighbors)')
('WARNING: ', 4778, ' is an island (no neighbors)')
('WARNING: ', 4807, ' is an island (no neighbors)')
('WARNING: ', 4820, ' is an island (no neighbors)')
('WARNING: ', 4850, ' is an island (no neighbors)')
('WARNING: ', 4868, ' is an island (no neighbors)')
('WARNING: ', 4877, ' is an island (no neighbors)')
('WARNING: ', 4878, ' is an island (no neighbors)')
('WARNING: ', 4879, ' is an island (no neighbors)')
('WARNING: ', 4888, ' is an island (no neighbors)')
('WARNING: ', 4921, ' is an island (no neighbors)')
('WARNING: ', 4948, ' is an island (no neighbors)')
('WARNING: ', 4957, ' is an island (no neighbors)')
('WARNING: ', 4958, ' is an island (no neighbors)')
('WARNING: ', 4971, ' is an island (no neighbors)')
('WARNING: ', 4983, ' is an island (no neighbors)')
('WARNING: ', 4984, ' is an island (no neighbors)')
('WARNING: ', 5005, ' is an island (no neighbors)')
('WARNING: ', 5030, ' is an island (no neighbors)')
('WARNING: ', 5031, ' is an island (no neighbors)')
('WARNING: ', 5039, ' is an island (no neighbors)')
('WARNING: ', 5042, ' is an island (no neighbors)')
('WARNING: ', 5083, ' is an island (no neighbors)')
('WARNING: ', 5089, ' is an island (no neighbors)')
('WARNING: ', 5091, ' is an island (no neighbors)')
('WARNING: ', 5135, ' is an island (no neighbors)')
('WARNING: ', 5139, ' is an island (no neighbors)')
('WARNING: ', 5154, ' is an island (no neighbors)')
('WARNING: ', 5168, ' is an island (no neighbors)')
('WARNING: ', 5173, ' is an island (no neighbors)')
('WARNING: ', 5184, ' is an island (no neighbors)')
('WARNING: ', 5192, ' is an island (no neighbors)')
('WARNING: ', 5226, ' is an island (no neighbors)')
('WARNING: ', 5279, ' is an island (no neighbors)')
('WARNING: ', 5288, ' is an island (no neighbors)')
('WARNING: ', 5305, ' is an island (no neighbors)')
('WARNING: ', 5306, ' is an island (no neighbors)')
('WARNING: ', 5310, ' is an island (no neighbors)')
('WARNING: ', 5337, ' is an island (no neighbors)')
('WARNING: ', 5383, ' is an island (no neighbors)')
('WARNING: ', 5403, ' is an island (no neighbors)')
('WARNING: ', 5424, ' is an island (no neighbors)')
('WARNING: ', 5451, ' is an island (no neighbors)')
('WARNING: ', 5495, ' is an island (no neighbors)')
('WARNING: ', 5500, ' is an island (no neighbors)')
('WARNING: ', 5549, ' is an island (no neighbors)')
('WARNING: ', 5553, ' is an island (no neighbors)')
('WARNING: ', 5585, ' is an island (no neighbors)')
('WARNING: ', 5589, ' is an island (no neighbors)')
('WARNING: ', 5632, ' is an island (no neighbors)')
('WARNING: ', 5679, ' is an island (no neighbors)')
('WARNING: ', 5692, ' is an island (no neighbors)')
('WARNING: ', 5693, ' is an island (no neighbors)')
('WARNING: ', 5695, ' is an island (no neighbors)')
('WARNING: ', 5717, ' is an island (no neighbors)')
('WARNING: ', 5760, ' is an island (no neighbors)')
('WARNING: ', 5866, ' is an island (no neighbors)')
('WARNING: ', 5872, ' is an island (no neighbors)')
('WARNING: ', 5962, ' is an island (no neighbors)')
('WARNING: ', 5982, ' is an island (no neighbors)')
('WARNING: ', 5989, ' is an island (no neighbors)')
('WARNING: ', 5991, ' is an island (no neighbors)')
('WARNING: ', 6004, ' is an island (no neighbors)')
('WARNING: ', 6005, ' is an island (no neighbors)')
('WARNING: ', 6018, ' is an island (no neighbors)')
('WARNING: ', 6047, ' is an island (no neighbors)')
('WARNING: ', 6053, ' is an island (no neighbors)')
('WARNING: ', 6055, ' is an island (no neighbors)')
('WARNING: ', 6064, ' is an island (no neighbors)')
('WARNING: ', 6141, ' is an island (no neighbors)')
('WARNING: ', 6206, ' is an island (no neighbors)')
('WARNING: ', 6210, ' is an island (no neighbors)')
('WARNING: ', 6211, ' is an island (no neighbors)')
('WARNING: ', 6240, ' is an island (no neighbors)')
('WARNING: ', 6251, ' is an island (no neighbors)')
('WARNING: ', 6262, ' is an island (no neighbors)')
('WARNING: ', 6264, ' is an island (no neighbors)')
('WARNING: ', 6292, ' is an island (no neighbors)')
('WARNING: ', 6328, ' is an island (no neighbors)')
('WARNING: ', 6331, ' is an island (no neighbors)')
('WARNING: ', 6332, ' is an island (no neighbors)')
('WARNING: ', 6350, ' is an island (no neighbors)')
('WARNING: ', 6360, ' is an island (no neighbors)')
('WARNING: ', 6391, ' is an island (no neighbors)')
('WARNING: ', 6394, ' is an island (no neighbors)')
('WARNING: ', 6441, ' is an island (no neighbors)')
('WARNING: ', 6442, ' is an island (no neighbors)')
('WARNING: ', 6448, ' is an island (no neighbors)')
('WARNING: ', 6452, ' is an island (no neighbors)')
('WARNING: ', 6458, ' is an island (no neighbors)')
('WARNING: ', 6469, ' is an island (no neighbors)')
('WARNING: ', 6484, ' is an island (no neighbors)')
('WARNING: ', 6508, ' is an island (no neighbors)')
('WARNING: ', 6511, ' is an island (no neighbors)')
('WARNING: ', 6525, ' is an island (no neighbors)')
('WARNING: ', 6537, ' is an island (no neighbors)')
('WARNING: ', 6561, ' is an island (no neighbors)')
('WARNING: ', 6568, ' is an island (no neighbors)')
('WARNING: ', 6585, ' is an island (no neighbors)')
('WARNING: ', 6600, ' is an island (no neighbors)')
('WARNING: ', 6640, ' is an island (no neighbors)')
('WARNING: ', 6683, ' is an island (no neighbors)')
('WARNING: ', 6684, ' is an island (no neighbors)')
('WARNING: ', 6686, ' is an island (no neighbors)')
('WARNING: ', 6687, ' is an island (no neighbors)')
('WARNING: ', 6702, ' is an island (no neighbors)')
('WARNING: ', 6711, ' is an island (no neighbors)')
('WARNING: ', 6723, ' is an island (no neighbors)')
('WARNING: ', 6742, ' is an island (no neighbors)')
('WARNING: ', 6757, ' is an island (no neighbors)')
('WARNING: ', 6774, ' is an island (no neighbors)')
('WARNING: ', 6812, ' is an island (no neighbors)')
('WARNING: ', 6816, ' is an island (no neighbors)')
('WARNING: ', 6826, ' is an island (no neighbors)')
('WARNING: ', 6848, ' is an island (no neighbors)')
('WARNING: ', 6863, ' is an island (no neighbors)')
('WARNING: ', 6873, ' is an island (no neighbors)')
('WARNING: ', 6896, ' is an island (no neighbors)')
('WARNING: ', 6934, ' is an island (no neighbors)')
('WARNING: ', 6969, ' is an island (no neighbors)')
('WARNING: ', 6970, ' is an island (no neighbors)')
('WARNING: ', 6971, ' is an island (no neighbors)')
('WARNING: ', 6989, ' is an island (no neighbors)')
('WARNING: ', 7014, ' is an island (no neighbors)')
('WARNING: ', 7049, ' is an island (no neighbors)')
('WARNING: ', 7050, ' is an island (no neighbors)')
('WARNING: ', 7051, ' is an island (no neighbors)')
('WARNING: ', 7087, ' is an island (no neighbors)')
('WARNING: ', 7093, ' is an island (no neighbors)')
('WARNING: ', 7105, ' is an island (no neighbors)')
('WARNING: ', 7166, ' is an island (no neighbors)')
('WARNING: ', 7167, ' is an island (no neighbors)')
('WARNING: ', 7173, ' is an island (no neighbors)')
('WARNING: ', 7212, ' is an island (no neighbors)')
('WARNING: ', 7216, ' is an island (no neighbors)')
('WARNING: ', 7235, ' is an island (no neighbors)')
('WARNING: ', 7240, ' is an island (no neighbors)')
('WARNING: ', 7265, ' is an island (no neighbors)')
('WARNING: ', 7274, ' is an island (no neighbors)')
('WARNING: ', 7275, ' is an island (no neighbors)')
('WARNING: ', 7304, ' is an island (no neighbors)')
('WARNING: ', 7350, ' is an island (no neighbors)')
('WARNING: ', 7351, ' is an island (no neighbors)')
('WARNING: ', 7359, ' is an island (no neighbors)')
('WARNING: ', 7363, ' is an island (no neighbors)')
('WARNING: ', 7378, ' is an island (no neighbors)')
('WARNING: ', 7386, ' is an island (no neighbors)')
('WARNING: ', 7387, ' is an island (no neighbors)')
('WARNING: ', 7453, ' is an island (no neighbors)')
('WARNING: ', 7466, ' is an island (no neighbors)')
('WARNING: ', 7468, ' is an island (no neighbors)')
('WARNING: ', 7476, ' is an island (no neighbors)')
('WARNING: ', 7487, ' is an island (no neighbors)')
('WARNING: ', 7504, ' is an island (no neighbors)')
('WARNING: ', 7538, ' is an island (no neighbors)')
('WARNING: ', 7564, ' is an island (no neighbors)')
('WARNING: ', 7568, ' is an island (no neighbors)')
('WARNING: ', 7569, ' is an island (no neighbors)')
('WARNING: ', 7597, ' is an island (no neighbors)')
('WARNING: ', 7616, ' is an island (no neighbors)')
('WARNING: ', 7617, ' is an island (no neighbors)')
('WARNING: ', 7638, ' is an island (no neighbors)')
('WARNING: ', 7641, ' is an island (no neighbors)')
('WARNING: ', 7642, ' is an island (no neighbors)')
('WARNING: ', 7644, ' is an island (no neighbors)')
('WARNING: ', 7648, ' is an island (no neighbors)')
('WARNING: ', 7649, ' is an island (no neighbors)')
('WARNING: ', 7650, ' is an island (no neighbors)')
('WARNING: ', 7651, ' is an island (no neighbors)')
('WARNING: ', 7665, ' is an island (no neighbors)')
('WARNING: ', 7666, ' is an island (no neighbors)')
('WARNING: ', 7673, ' is an island (no neighbors)')
('WARNING: ', 7690, ' is an island (no neighbors)')
('WARNING: ', 7693, ' is an island (no neighbors)')
('WARNING: ', 7704, ' is an island (no neighbors)')
('WARNING: ', 7708, ' is an island (no neighbors)')
('WARNING: ', 7760, ' is an island (no neighbors)')
('WARNING: ', 7774, ' is an island (no neighbors)')
('WARNING: ', 7775, ' is an island (no neighbors)')
('WARNING: ', 7781, ' is an island (no neighbors)')
('WARNING: ', 7801, ' is an island (no neighbors)')
('WARNING: ', 7802, ' is an island (no neighbors)')
('WARNING: ', 7811, ' is an island (no neighbors)')
('WARNING: ', 7812, ' is an island (no neighbors)')
('WARNING: ', 7813, ' is an island (no neighbors)')
('WARNING: ', 7814, ' is an island (no neighbors)')
('WARNING: ', 7831, ' is an island (no neighbors)')
('WARNING: ', 7854, ' is an island (no neighbors)')
('WARNING: ', 7858, ' is an island (no neighbors)')
('WARNING: ', 7920, ' is an island (no neighbors)')
('WARNING: ', 7965, ' is an island (no neighbors)')
('WARNING: ', 7966, ' is an island (no neighbors)')
('WARNING: ', 8006, ' is an island (no neighbors)')
('WARNING: ', 8012, ' is an island (no neighbors)')
('WARNING: ', 8013, ' is an island (no neighbors)')
('WARNING: ', 8024, ' is an island (no neighbors)')
('WARNING: ', 8025, ' is an island (no neighbors)')
('WARNING: ', 8031, ' is an island (no neighbors)')
('WARNING: ', 8038, ' is an island (no neighbors)')
('WARNING: ', 8078, ' is an island (no neighbors)')
('WARNING: ', 8079, ' is an island (no neighbors)')
('WARNING: ', 8097, ' is an island (no neighbors)')
('WARNING: ', 8113, ' is an island (no neighbors)')
('WARNING: ', 8128, ' is an island (no neighbors)')
('WARNING: ', 8133, ' is an island (no neighbors)')
('WARNING: ', 8140, ' is an island (no neighbors)')
('WARNING: ', 8188, ' is an island (no neighbors)')
('WARNING: ', 8193, ' is an island (no neighbors)')
('WARNING: ', 8215, ' is an island (no neighbors)')
('WARNING: ', 8216, ' is an island (no neighbors)')
('WARNING: ', 8246, ' is an island (no neighbors)')
('WARNING: ', 8249, ' is an island (no neighbors)')
('WARNING: ', 8250, ' is an island (no neighbors)')
('WARNING: ', 8252, ' is an island (no neighbors)')
('WARNING: ', 8253, ' is an island (no neighbors)')
('WARNING: ', 8258, ' is an island (no neighbors)')
('WARNING: ', 8290, ' is an island (no neighbors)')
('WARNING: ', 8303, ' is an island (no neighbors)')
('WARNING: ', 8314, ' is an island (no neighbors)')
('WARNING: ', 8337, ' is an island (no neighbors)')
('WARNING: ', 8338, ' is an island (no neighbors)')
('WARNING: ', 8362, ' is an island (no neighbors)')
('WARNING: ', 8368, ' is an island (no neighbors)')
('WARNING: ', 8410, ' is an island (no neighbors)')
('WARNING: ', 8476, ' is an island (no neighbors)')
('WARNING: ', 8477, ' is an island (no neighbors)')
('WARNING: ', 8489, ' is an island (no neighbors)')
('WARNING: ', 8490, ' is an island (no neighbors)')
('WARNING: ', 8509, ' is an island (no neighbors)')
('WARNING: ', 8516, ' is an island (no neighbors)')
('WARNING: ', 8523, ' is an island (no neighbors)')
('WARNING: ', 8533, ' is an island (no neighbors)')
('WARNING: ', 8538, ' is an island (no neighbors)')
('WARNING: ', 8543, ' is an island (no neighbors)')
('WARNING: ', 8563, ' is an island (no neighbors)')
('WARNING: ', 8637, ' is an island (no neighbors)')
('WARNING: ', 8672, ' is an island (no neighbors)')
('WARNING: ', 8679, ' is an island (no neighbors)')
('WARNING: ', 8722, ' is an island (no neighbors)')
('WARNING: ', 8723, ' is an island (no neighbors)')
('WARNING: ', 8739, ' is an island (no neighbors)')
('WARNING: ', 8744, ' is an island (no neighbors)')
('WARNING: ', 8798, ' is an island (no neighbors)')
('WARNING: ', 8811, ' is an island (no neighbors)')
('WARNING: ', 8840, ' is an island (no neighbors)')
('WARNING: ', 8878, ' is an island (no neighbors)')
('WARNING: ', 8896, ' is an island (no neighbors)')
('WARNING: ', 8917, ' is an island (no neighbors)')
('WARNING: ', 8927, ' is an island (no neighbors)')
('WARNING: ', 8928, ' is an island (no neighbors)')
('WARNING: ', 8978, ' is an island (no neighbors)')
('WARNING: ', 8988, ' is an island (no neighbors)')
('WARNING: ', 9024, ' is an island (no neighbors)')
('WARNING: ', 9047, ' is an island (no neighbors)')
('WARNING: ', 9052, ' is an island (no neighbors)')
('WARNING: ', 9083, ' is an island (no neighbors)')
('WARNING: ', 9085, ' is an island (no neighbors)')
('WARNING: ', 9099, ' is an island (no neighbors)')
('WARNING: ', 9196, ' is an island (no neighbors)')
('WARNING: ', 9211, ' is an island (no neighbors)')
('WARNING: ', 9219, ' is an island (no neighbors)')
('WARNING: ', 9220, ' is an island (no neighbors)')
('WARNING: ', 9226, ' is an island (no neighbors)')
('WARNING: ', 9270, ' is an island (no neighbors)')
('WARNING: ', 9296, ' is an island (no neighbors)')
('WARNING: ', 9297, ' is an island (no neighbors)')
('WARNING: ', 9299, ' is an island (no neighbors)')
('WARNING: ', 9325, ' is an island (no neighbors)')
('WARNING: ', 9342, ' is an island (no neighbors)')
('WARNING: ', 9399, ' is an island (no neighbors)')
('WARNING: ', 9406, ' is an island (no neighbors)')
('WARNING: ', 9412, ' is an island (no neighbors)')
('WARNING: ', 9413, ' is an island (no neighbors)')
('WARNING: ', 9437, ' is an island (no neighbors)')
('WARNING: ', 9475, ' is an island (no neighbors)')
('WARNING: ', 9480, ' is an island (no neighbors)')
('WARNING: ', 9486, ' is an island (no neighbors)')
('WARNING: ', 9522, ' is an island (no neighbors)')
('WARNING: ', 9536, ' is an island (no neighbors)')
('WARNING: ', 9538, ' is an island (no neighbors)')
('WARNING: ', 9544, ' is an island (no neighbors)')
('WARNING: ', 9546, ' is an island (no neighbors)')
('WARNING: ', 9561, ' is an island (no neighbors)')
('WARNING: ', 9562, ' is an island (no neighbors)')
('WARNING: ', 9566, ' is an island (no neighbors)')
('WARNING: ', 9567, ' is an island (no neighbors)')
('WARNING: ', 9648, ' is an island (no neighbors)')
('WARNING: ', 9656, ' is an island (no neighbors)')
('WARNING: ', 9663, ' is an island (no neighbors)')
('WARNING: ', 9666, ' is an island (no neighbors)')
('WARNING: ', 9677, ' is an island (no neighbors)')
('WARNING: ', 9686, ' is an island (no neighbors)')
('WARNING: ', 9688, ' is an island (no neighbors)')
('WARNING: ', 9690, ' is an island (no neighbors)')
('WARNING: ', 9761, ' is an island (no neighbors)')
('WARNING: ', 9773, ' is an island (no neighbors)')
('WARNING: ', 9781, ' is an island (no neighbors)')
('WARNING: ', 9788, ' is an island (no neighbors)')
('WARNING: ', 9879, ' is an island (no neighbors)')
('WARNING: ', 9894, ' is an island (no neighbors)')
('WARNING: ', 9931, ' is an island (no neighbors)')
('WARNING: ', 9939, ' is an island (no neighbors)')
('WARNING: ', 9942, ' is an island (no neighbors)')
('WARNING: ', 9943, ' is an island (no neighbors)')
('WARNING: ', 9955, ' is an island (no neighbors)')
('WARNING: ', 10004, ' is an island (no neighbors)')
('WARNING: ', 10037, ' is an island (no neighbors)')
('WARNING: ', 10043, ' is an island (no neighbors)')
('WARNING: ', 10084, ' is an island (no neighbors)')
('WARNING: ', 10089, ' is an island (no neighbors)')
('WARNING: ', 10113, ' is an island (no neighbors)')
('WARNING: ', 10157, ' is an island (no neighbors)')
('WARNING: ', 10162, ' is an island (no neighbors)')
('WARNING: ', 10163, ' is an island (no neighbors)')
('WARNING: ', 10189, ' is an island (no neighbors)')
('WARNING: ', 10192, ' is an island (no neighbors)')
('WARNING: ', 10229, ' is an island (no neighbors)')
('WARNING: ', 10255, ' is an island (no neighbors)')
('WARNING: ', 10289, ' is an island (no neighbors)')
('WARNING: ', 10296, ' is an island (no neighbors)')
('WARNING: ', 10320, ' is an island (no neighbors)')
('WARNING: ', 10333, ' is an island (no neighbors)')
('WARNING: ', 10380, ' is an island (no neighbors)')
('WARNING: ', 10441, ' is an island (no neighbors)')
('WARNING: ', 10444, ' is an island (no neighbors)')
('WARNING: ', 10445, ' is an island (no neighbors)')
('WARNING: ', 10446, ' is an island (no neighbors)')
('WARNING: ', 10448, ' is an island (no neighbors)')
('WARNING: ', 10455, ' is an island (no neighbors)')
('WARNING: ', 10483, ' is an island (no neighbors)')
('WARNING: ', 10494, ' is an island (no neighbors)')
('WARNING: ', 10495, ' is an island (no neighbors)')
('WARNING: ', 10496, ' is an island (no neighbors)')
('WARNING: ', 10505, ' is an island (no neighbors)')
('WARNING: ', 10527, ' is an island (no neighbors)')
('WARNING: ', 10528, ' is an island (no neighbors)')
('WARNING: ', 10538, ' is an island (no neighbors)')
('WARNING: ', 10543, ' is an island (no neighbors)')
('WARNING: ', 10561, ' is an island (no neighbors)')
('WARNING: ', 10598, ' is an island (no neighbors)')
('WARNING: ', 10599, ' is an island (no neighbors)')
('WARNING: ', 10604, ' is an island (no neighbors)')
('WARNING: ', 10605, ' is an island (no neighbors)')
('WARNING: ', 10629, ' is an island (no neighbors)')
('WARNING: ', 10657, ' is an island (no neighbors)')
('WARNING: ', 10658, ' is an island (no neighbors)')
('WARNING: ', 10685, ' is an island (no neighbors)')
('WARNING: ', 10696, ' is an island (no neighbors)')
('WARNING: ', 10725, ' is an island (no neighbors)')
('WARNING: ', 10743, ' is an island (no neighbors)')
('WARNING: ', 10772, ' is an island (no neighbors)')
('WARNING: ', 10775, ' is an island (no neighbors)')
('WARNING: ', 10843, ' is an island (no neighbors)')
('WARNING: ', 10844, ' is an island (no neighbors)')
('WARNING: ', 10846, ' is an island (no neighbors)')
('WARNING: ', 10866, ' is an island (no neighbors)')
('WARNING: ', 10898, ' is an island (no neighbors)')
('WARNING: ', 10942, ' is an island (no neighbors)')
('WARNING: ', 10943, ' is an island (no neighbors)')
('WARNING: ', 10954, ' is an island (no neighbors)')
('WARNING: ', 11015, ' is an island (no neighbors)')
('WARNING: ', 11036, ' is an island (no neighbors)')
('WARNING: ', 11052, ' is an island (no neighbors)')
('WARNING: ', 11055, ' is an island (no neighbors)')
('WARNING: ', 11056, ' is an island (no neighbors)')
('WARNING: ', 11078, ' is an island (no neighbors)')
('WARNING: ', 11084, ' is an island (no neighbors)')
('WARNING: ', 11091, ' is an island (no neighbors)')
('WARNING: ', 11109, ' is an island (no neighbors)')
('WARNING: ', 11144, ' is an island (no neighbors)')
('WARNING: ', 11175, ' is an island (no neighbors)')
('WARNING: ', 11187, ' is an island (no neighbors)')
('WARNING: ', 11205, ' is an island (no neighbors)')
('WARNING: ', 11237, ' is an island (no neighbors)')
('WARNING: ', 11248, ' is an island (no neighbors)')
('WARNING: ', 11270, ' is an island (no neighbors)')
('WARNING: ', 11310, ' is an island (no neighbors)')
('WARNING: ', 11318, ' is an island (no neighbors)')
('WARNING: ', 11332, ' is an island (no neighbors)')
('WARNING: ', 11335, ' is an island (no neighbors)')
('WARNING: ', 11358, ' is an island (no neighbors)')
('WARNING: ', 11370, ' is an island (no neighbors)')
('WARNING: ', 11372, ' is an island (no neighbors)')
('WARNING: ', 11403, ' is an island (no neighbors)')
('WARNING: ', 11450, ' is an island (no neighbors)')
('WARNING: ', 11453, ' is an island (no neighbors)')
('WARNING: ', 11462, ' is an island (no neighbors)')
('WARNING: ', 11471, ' is an island (no neighbors)')
('WARNING: ', 11516, ' is an island (no neighbors)')
('WARNING: ', 11517, ' is an island (no neighbors)')
('WARNING: ', 11518, ' is an island (no neighbors)')
('WARNING: ', 11542, ' is an island (no neighbors)')
('WARNING: ', 11565, ' is an island (no neighbors)')
('WARNING: ', 11566, ' is an island (no neighbors)')
('WARNING: ', 11604, ' is an island (no neighbors)')
('WARNING: ', 11619, ' is an island (no neighbors)')
('WARNING: ', 11662, ' is an island (no neighbors)')
('WARNING: ', 11676, ' is an island (no neighbors)')
('WARNING: ', 11700, ' is an island (no neighbors)')
('WARNING: ', 11743, ' is an island (no neighbors)')
('WARNING: ', 11745, ' is an island (no neighbors)')
('WARNING: ', 11799, ' is an island (no neighbors)')
('WARNING: ', 11835, ' is an island (no neighbors)')
('WARNING: ', 11862, ' is an island (no neighbors)')
('WARNING: ', 11864, ' is an island (no neighbors)')
('WARNING: ', 11885, ' is an island (no neighbors)')
('WARNING: ', 11901, ' is an island (no neighbors)')
('WARNING: ', 11915, ' is an island (no neighbors)')
('WARNING: ', 11971, ' is an island (no neighbors)')
('WARNING: ', 11973, ' is an island (no neighbors)')
('WARNING: ', 11974, ' is an island (no neighbors)')
('WARNING: ', 11975, ' is an island (no neighbors)')
('WARNING: ', 11976, ' is an island (no neighbors)')
('WARNING: ', 11998, ' is an island (no neighbors)')
('WARNING: ', 12002, ' is an island (no neighbors)')
('WARNING: ', 12019, ' is an island (no neighbors)')
('WARNING: ', 12026, ' is an island (no neighbors)')
('WARNING: ', 12034, ' is an island (no neighbors)')
('WARNING: ', 12040, ' is an island (no neighbors)')
('WARNING: ', 12072, ' is an island (no neighbors)')
('WARNING: ', 12073, ' is an island (no neighbors)')
('WARNING: ', 12083, ' is an island (no neighbors)')
('WARNING: ', 12084, ' is an island (no neighbors)')
('WARNING: ', 12125, ' is an island (no neighbors)')
('WARNING: ', 12126, ' is an island (no neighbors)')
('WARNING: ', 12151, ' is an island (no neighbors)')
('WARNING: ', 12153, ' is an island (no neighbors)')
('WARNING: ', 12176, ' is an island (no neighbors)')
('WARNING: ', 12195, ' is an island (no neighbors)')
('WARNING: ', 12200, ' is an island (no neighbors)')
('WARNING: ', 12213, ' is an island (no neighbors)')
('WARNING: ', 12215, ' is an island (no neighbors)')
('WARNING: ', 12230, ' is an island (no neighbors)')
('WARNING: ', 12247, ' is an island (no neighbors)')
('WARNING: ', 12248, ' is an island (no neighbors)')
('WARNING: ', 12281, ' is an island (no neighbors)')
('WARNING: ', 12283, ' is an island (no neighbors)')
('WARNING: ', 12287, ' is an island (no neighbors)')
('WARNING: ', 12307, ' is an island (no neighbors)')
('WARNING: ', 12308, ' is an island (no neighbors)')
('WARNING: ', 12317, ' is an island (no neighbors)')
('WARNING: ', 12379, ' is an island (no neighbors)')
('WARNING: ', 12381, ' is an island (no neighbors)')
('WARNING: ', 12405, ' is an island (no neighbors)')
('WARNING: ', 12410, ' is an island (no neighbors)')
('WARNING: ', 12456, ' is an island (no neighbors)')
('WARNING: ', 12460, ' is an island (no neighbors)')
('WARNING: ', 12474, ' is an island (no neighbors)')
('WARNING: ', 12492, ' is an island (no neighbors)')
('WARNING: ', 12526, ' is an island (no neighbors)')
('WARNING: ', 12539, ' is an island (no neighbors)')
('WARNING: ', 12577, ' is an island (no neighbors)')
('WARNING: ', 12589, ' is an island (no neighbors)')
('WARNING: ', 12604, ' is an island (no neighbors)')
('WARNING: ', 12605, ' is an island (no neighbors)')
('WARNING: ', 12636, ' is an island (no neighbors)')
('WARNING: ', 12656, ' is an island (no neighbors)')
('WARNING: ', 12665, ' is an island (no neighbors)')
('WARNING: ', 12692, ' is an island (no neighbors)')
('WARNING: ', 12693, ' is an island (no neighbors)')
('WARNING: ', 12702, ' is an island (no neighbors)')
('WARNING: ', 12723, ' is an island (no neighbors)')
('WARNING: ', 12726, ' is an island (no neighbors)')
('WARNING: ', 12836, ' is an island (no neighbors)')
('WARNING: ', 12848, ' is an island (no neighbors)')
('WARNING: ', 12851, ' is an island (no neighbors)')
('WARNING: ', 12891, ' is an island (no neighbors)')
('WARNING: ', 12898, ' is an island (no neighbors)')
('WARNING: ', 12901, ' is an island (no neighbors)')
('WARNING: ', 12910, ' is an island (no neighbors)')
('WARNING: ', 12911, ' is an island (no neighbors)')
('WARNING: ', 12913, ' is an island (no neighbors)')
('WARNING: ', 12920, ' is an island (no neighbors)')
('WARNING: ', 12932, ' is an island (no neighbors)')
('WARNING: ', 12937, ' is an island (no neighbors)')
('WARNING: ', 12938, ' is an island (no neighbors)')
('WARNING: ', 12939, ' is an island (no neighbors)')
('WARNING: ', 12953, ' is an island (no neighbors)')
('WARNING: ', 12998, ' is an island (no neighbors)')
('WARNING: ', 13000, ' is an island (no neighbors)')
('WARNING: ', 13001, ' is an island (no neighbors)')
('WARNING: ', 13021, ' is an island (no neighbors)')
('WARNING: ', 13022, ' is an island (no neighbors)')
('WARNING: ', 13034, ' is an island (no neighbors)')
('WARNING: ', 13042, ' is an island (no neighbors)')
('WARNING: ', 13043, ' is an island (no neighbors)')
('WARNING: ', 13054, ' is an island (no neighbors)')
('WARNING: ', 13062, ' is an island (no neighbors)')
('WARNING: ', 13063, ' is an island (no neighbors)')
('WARNING: ', 13089, ' is an island (no neighbors)')
('WARNING: ', 13107, ' is an island (no neighbors)')
('WARNING: ', 13116, ' is an island (no neighbors)')
('WARNING: ', 13129, ' is an island (no neighbors)')
('WARNING: ', 13154, ' is an island (no neighbors)')
('WARNING: ', 13159, ' is an island (no neighbors)')
('WARNING: ', 13169, ' is an island (no neighbors)')
('WARNING: ', 13196, ' is an island (no neighbors)')
('WARNING: ', 13204, ' is an island (no neighbors)')
('WARNING: ', 13207, ' is an island (no neighbors)')
('WARNING: ', 13238, ' is an island (no neighbors)')
('WARNING: ', 13239, ' is an island (no neighbors)')
('WARNING: ', 13256, ' is an island (no neighbors)')
('WARNING: ', 13353, ' is an island (no neighbors)')
('WARNING: ', 13354, ' is an island (no neighbors)')
('WARNING: ', 13355, ' is an island (no neighbors)')
('WARNING: ', 13399, ' is an island (no neighbors)')
('WARNING: ', 13406, ' is an island (no neighbors)')
('WARNING: ', 13407, ' is an island (no neighbors)')
('WARNING: ', 13432, ' is an island (no neighbors)')
('WARNING: ', 13440, ' is an island (no neighbors)')
('WARNING: ', 13442, ' is an island (no neighbors)')
('WARNING: ', 13443, ' is an island (no neighbors)')
('WARNING: ', 13463, ' is an island (no neighbors)')
('WARNING: ', 13493, ' is an island (no neighbors)')
('WARNING: ', 13514, ' is an island (no neighbors)')
('WARNING: ', 13542, ' is an island (no neighbors)')
('WARNING: ', 13562, ' is an island (no neighbors)')
('WARNING: ', 13603, ' is an island (no neighbors)')
('WARNING: ', 13651, ' is an island (no neighbors)')
('WARNING: ', 13653, ' is an island (no neighbors)')
('WARNING: ', 13659, ' is an island (no neighbors)')
('WARNING: ', 13670, ' is an island (no neighbors)')
('WARNING: ', 13681, ' is an island (no neighbors)')
('WARNING: ', 13683, ' is an island (no neighbors)')
('WARNING: ', 13691, ' is an island (no neighbors)')
('WARNING: ', 13700, ' is an island (no neighbors)')
('WARNING: ', 13766, ' is an island (no neighbors)')
('WARNING: ', 13773, ' is an island (no neighbors)')
('WARNING: ', 13779, ' is an island (no neighbors)')
('WARNING: ', 13782, ' is an island (no neighbors)')
('WARNING: ', 13783, ' is an island (no neighbors)')
('WARNING: ', 13790, ' is an island (no neighbors)')
('WARNING: ', 13814, ' is an island (no neighbors)')
('WARNING: ', 13834, ' is an island (no neighbors)')
('WARNING: ', 13835, ' is an island (no neighbors)')
('WARNING: ', 13885, ' is an island (no neighbors)')
('WARNING: ', 13925, ' is an island (no neighbors)')
('WARNING: ', 13926, ' is an island (no neighbors)')
('WARNING: ', 13940, ' is an island (no neighbors)')
('WARNING: ', 13945, ' is an island (no neighbors)')
('WARNING: ', 13964, ' is an island (no neighbors)')
('WARNING: ', 13969, ' is an island (no neighbors)')
('WARNING: ', 13997, ' is an island (no neighbors)')
('WARNING: ', 14016, ' is an island (no neighbors)')
('WARNING: ', 14021, ' is an island (no neighbors)')
('WARNING: ', 14029, ' is an island (no neighbors)')
('WARNING: ', 14031, ' is an island (no neighbors)')
('WARNING: ', 14038, ' is an island (no neighbors)')
('WARNING: ', 14043, ' is an island (no neighbors)')
('WARNING: ', 14057, ' is an island (no neighbors)')
('WARNING: ', 14067, ' is an island (no neighbors)')
('WARNING: ', 14106, ' is an island (no neighbors)')
('WARNING: ', 14119, ' is an island (no neighbors)')
('WARNING: ', 14131, ' is an island (no neighbors)')
('WARNING: ', 14135, ' is an island (no neighbors)')
('WARNING: ', 14136, ' is an island (no neighbors)')
('WARNING: ', 14152, ' is an island (no neighbors)')
('WARNING: ', 14173, ' is an island (no neighbors)')
('WARNING: ', 14174, ' is an island (no neighbors)')
('WARNING: ', 14175, ' is an island (no neighbors)')
('WARNING: ', 14196, ' is an island (no neighbors)')
('WARNING: ', 14199, ' is an island (no neighbors)')
('WARNING: ', 14200, ' is an island (no neighbors)')
('WARNING: ', 14302, ' is an island (no neighbors)')
('WARNING: ', 14341, ' is an island (no neighbors)')
('WARNING: ', 14344, ' is an island (no neighbors)')
('WARNING: ', 14347, ' is an island (no neighbors)')
('WARNING: ', 14352, ' is an island (no neighbors)')
('WARNING: ', 14353, ' is an island (no neighbors)')
('WARNING: ', 14357, ' is an island (no neighbors)')
('WARNING: ', 14403, ' is an island (no neighbors)')
('WARNING: ', 14413, ' is an island (no neighbors)')
('WARNING: ', 14490, ' is an island (no neighbors)')
('WARNING: ', 14539, ' is an island (no neighbors)')
('WARNING: ', 14576, ' is an island (no neighbors)')
('WARNING: ', 14580, ' is an island (no neighbors)')
('WARNING: ', 14586, ' is an island (no neighbors)')
('WARNING: ', 14599, ' is an island (no neighbors)')
('WARNING: ', 14606, ' is an island (no neighbors)')
('WARNING: ', 14649, ' is an island (no neighbors)')
('WARNING: ', 14654, ' is an island (no neighbors)')
('WARNING: ', 14683, ' is an island (no neighbors)')
('WARNING: ', 14755, ' is an island (no neighbors)')
('WARNING: ', 14756, ' is an island (no neighbors)')
('WARNING: ', 14766, ' is an island (no neighbors)')
('WARNING: ', 14779, ' is an island (no neighbors)')
('WARNING: ', 14785, ' is an island (no neighbors)')
('WARNING: ', 14790, ' is an island (no neighbors)')
('WARNING: ', 14803, ' is an island (no neighbors)')
('WARNING: ', 14832, ' is an island (no neighbors)')
('WARNING: ', 14845, ' is an island (no neighbors)')
('WARNING: ', 14891, ' is an island (no neighbors)')
('WARNING: ', 14899, ' is an island (no neighbors)')
('WARNING: ', 14900, ' is an island (no neighbors)')
('WARNING: ', 14901, ' is an island (no neighbors)')
('WARNING: ', 14916, ' is an island (no neighbors)')
('WARNING: ', 14929, ' is an island (no neighbors)')
('WARNING: ', 14935, ' is an island (no neighbors)')
('WARNING: ', 14946, ' is an island (no neighbors)')
('WARNING: ', 14993, ' is an island (no neighbors)')
('WARNING: ', 15051, ' is an island (no neighbors)')
('WARNING: ', 15091, ' is an island (no neighbors)')
('WARNING: ', 15102, ' is an island (no neighbors)')
('WARNING: ', 15173, ' is an island (no neighbors)')
('WARNING: ', 15185, ' is an island (no neighbors)')
('WARNING: ', 15207, ' is an island (no neighbors)')
('WARNING: ', 15208, ' is an island (no neighbors)')
('WARNING: ', 15291, ' is an island (no neighbors)')
('WARNING: ', 15302, ' is an island (no neighbors)')
('WARNING: ', 15361, ' is an island (no neighbors)')
('WARNING: ', 15373, ' is an island (no neighbors)')
('WARNING: ', 15376, ' is an island (no neighbors)')
('WARNING: ', 15377, ' is an island (no neighbors)')
('WARNING: ', 15386, ' is an island (no neighbors)')
('WARNING: ', 15392, ' is an island (no neighbors)')
('WARNING: ', 15416, ' is an island (no neighbors)')
('WARNING: ', 15468, ' is an island (no neighbors)')
('WARNING: ', 15526, ' is an island (no neighbors)')
('WARNING: ', 15527, ' is an island (no neighbors)')
('WARNING: ', 15533, ' is an island (no neighbors)')
('WARNING: ', 15543, ' is an island (no neighbors)')
('WARNING: ', 15562, ' is an island (no neighbors)')
('WARNING: ', 15577, ' is an island (no neighbors)')
('WARNING: ', 15591, ' is an island (no neighbors)')
('WARNING: ', 15592, ' is an island (no neighbors)')
('WARNING: ', 15612, ' is an island (no neighbors)')
('WARNING: ', 15644, ' is an island (no neighbors)')
('WARNING: ', 15692, ' is an island (no neighbors)')
('WARNING: ', 15695, ' is an island (no neighbors)')
('WARNING: ', 15699, ' is an island (no neighbors)')
('WARNING: ', 15707, ' is an island (no neighbors)')
('WARNING: ', 15708, ' is an island (no neighbors)')
('WARNING: ', 15725, ' is an island (no neighbors)')
('WARNING: ', 15751, ' is an island (no neighbors)')
('WARNING: ', 15754, ' is an island (no neighbors)')
('WARNING: ', 15773, ' is an island (no neighbors)')
('WARNING: ', 15788, ' is an island (no neighbors)')
('WARNING: ', 15824, ' is an island (no neighbors)')
('WARNING: ', 15832, ' is an island (no neighbors)')
('WARNING: ', 15882, ' is an island (no neighbors)')
('WARNING: ', 15889, ' is an island (no neighbors)')
('WARNING: ', 15913, ' is an island (no neighbors)')
('WARNING: ', 15914, ' is an island (no neighbors)')
('WARNING: ', 15924, ' is an island (no neighbors)')
('WARNING: ', 15925, ' is an island (no neighbors)')
('WARNING: ', 15966, ' is an island (no neighbors)')
('WARNING: ', 15970, ' is an island (no neighbors)')
('WARNING: ', 15974, ' is an island (no neighbors)')
('WARNING: ', 15979, ' is an island (no neighbors)')
('WARNING: ', 16016, ' is an island (no neighbors)')
('WARNING: ', 16061, ' is an island (no neighbors)')
('WARNING: ', 16065, ' is an island (no neighbors)')
('WARNING: ', 16154, ' is an island (no neighbors)')
('WARNING: ', 16167, ' is an island (no neighbors)')
('WARNING: ', 16177, ' is an island (no neighbors)')
('WARNING: ', 16190, ' is an island (no neighbors)')
('WARNING: ', 16199, ' is an island (no neighbors)')
('WARNING: ', 16202, ' is an island (no neighbors)')
('WARNING: ', 16207, ' is an island (no neighbors)')
('WARNING: ', 16215, ' is an island (no neighbors)')
('WARNING: ', 16240, ' is an island (no neighbors)')
('WARNING: ', 16241, ' is an island (no neighbors)')
('WARNING: ', 16242, ' is an island (no neighbors)')
('WARNING: ', 16243, ' is an island (no neighbors)')
('WARNING: ', 16294, ' is an island (no neighbors)')
('WARNING: ', 16329, ' is an island (no neighbors)')
('WARNING: ', 16400, ' is an island (no neighbors)')
('WARNING: ', 16401, ' is an island (no neighbors)')
('WARNING: ', 16408, ' is an island (no neighbors)')
('WARNING: ', 16426, ' is an island (no neighbors)')
('WARNING: ', 16437, ' is an island (no neighbors)')
('WARNING: ', 16443, ' is an island (no neighbors)')
('WARNING: ', 16444, ' is an island (no neighbors)')
('WARNING: ', 16447, ' is an island (no neighbors)')
('WARNING: ', 16475, ' is an island (no neighbors)')
('WARNING: ', 16479, ' is an island (no neighbors)')
('WARNING: ', 16500, ' is an island (no neighbors)')
('WARNING: ', 16501, ' is an island (no neighbors)')
('WARNING: ', 16511, ' is an island (no neighbors)')
('WARNING: ', 16545, ' is an island (no neighbors)')
('WARNING: ', 16546, ' is an island (no neighbors)')
('WARNING: ', 16599, ' is an island (no neighbors)')
('WARNING: ', 16637, ' is an island (no neighbors)')
('WARNING: ', 16666, ' is an island (no neighbors)')
('WARNING: ', 16669, ' is an island (no neighbors)')
('WARNING: ', 16731, ' is an island (no neighbors)')
('WARNING: ', 16795, ' is an island (no neighbors)')
('WARNING: ', 16799, ' is an island (no neighbors)')
('WARNING: ', 16855, ' is an island (no neighbors)')
('WARNING: ', 16856, ' is an island (no neighbors)')
('WARNING: ', 16895, ' is an island (no neighbors)')
('WARNING: ', 16922, ' is an island (no neighbors)')
('WARNING: ', 16923, ' is an island (no neighbors)')
('WARNING: ', 16948, ' is an island (no neighbors)')
('WARNING: ', 16950, ' is an island (no neighbors)')
('WARNING: ', 16953, ' is an island (no neighbors)')
('WARNING: ', 17025, ' is an island (no neighbors)')
('WARNING: ', 17029, ' is an island (no neighbors)')
('WARNING: ', 17043, ' is an island (no neighbors)')
('WARNING: ', 17044, ' is an island (no neighbors)')
('WARNING: ', 17071, ' is an island (no neighbors)')
('WARNING: ', 17081, ' is an island (no neighbors)')
('WARNING: ', 17083, ' is an island (no neighbors)')
('WARNING: ', 17088, ' is an island (no neighbors)')
('WARNING: ', 17103, ' is an island (no neighbors)')
('WARNING: ', 17136, ' is an island (no neighbors)')
('WARNING: ', 17216, ' is an island (no neighbors)')
('WARNING: ', 17235, ' is an island (no neighbors)')
('WARNING: ', 17364, ' is an island (no neighbors)')
('WARNING: ', 17365, ' is an island (no neighbors)')
('WARNING: ', 17367, ' is an island (no neighbors)')
('WARNING: ', 17387, ' is an island (no neighbors)')
('WARNING: ', 17425, ' is an island (no neighbors)')
('WARNING: ', 17430, ' is an island (no neighbors)')
('WARNING: ', 17441, ' is an island (no neighbors)')
('WARNING: ', 17463, ' is an island (no neighbors)')
('WARNING: ', 17464, ' is an island (no neighbors)')
('WARNING: ', 17468, ' is an island (no neighbors)')
('WARNING: ', 17487, ' is an island (no neighbors)')
('WARNING: ', 17497, ' is an island (no neighbors)')
('WARNING: ', 17498, ' is an island (no neighbors)')
('WARNING: ', 17525, ' is an island (no neighbors)')
('WARNING: ', 17529, ' is an island (no neighbors)')
('WARNING: ', 17533, ' is an island (no neighbors)')
('WARNING: ', 17578, ' is an island (no neighbors)')
('WARNING: ', 17665, ' is an island (no neighbors)')
('WARNING: ', 17674, ' is an island (no neighbors)')
('WARNING: ', 17678, ' is an island (no neighbors)')
('WARNING: ', 17692, ' is an island (no neighbors)')
('WARNING: ', 17726, ' is an island (no neighbors)')
('WARNING: ', 17727, ' is an island (no neighbors)')
('WARNING: ', 17728, ' is an island (no neighbors)')
('WARNING: ', 17734, ' is an island (no neighbors)')
('WARNING: ', 17738, ' is an island (no neighbors)')
('WARNING: ', 17739, ' is an island (no neighbors)')
('WARNING: ', 17742, ' is an island (no neighbors)')
('WARNING: ', 17798, ' is an island (no neighbors)')
('WARNING: ', 17821, ' is an island (no neighbors)')
('WARNING: ', 17831, ' is an island (no neighbors)')
('WARNING: ', 17837, ' is an island (no neighbors)')
('WARNING: ', 17896, ' is an island (no neighbors)')
('WARNING: ', 17903, ' is an island (no neighbors)')
('WARNING: ', 17914, ' is an island (no neighbors)')
('WARNING: ', 17925, ' is an island (no neighbors)')
('WARNING: ', 17954, ' is an island (no neighbors)')
('WARNING: ', 17955, ' is an island (no neighbors)')
('WARNING: ', 17957, ' is an island (no neighbors)')
('WARNING: ', 17974, ' is an island (no neighbors)')
('WARNING: ', 18019, ' is an island (no neighbors)')
('WARNING: ', 18022, ' is an island (no neighbors)')
('WARNING: ', 18053, ' is an island (no neighbors)')
('WARNING: ', 18060, ' is an island (no neighbors)')
('WARNING: ', 18115, ' is an island (no neighbors)')
('WARNING: ', 18116, ' is an island (no neighbors)')
('WARNING: ', 18141, ' is an island (no neighbors)')
('WARNING: ', 18184, ' is an island (no neighbors)')
('WARNING: ', 18189, ' is an island (no neighbors)')
('WARNING: ', 18206, ' is an island (no neighbors)')
('WARNING: ', 18218, ' is an island (no neighbors)')
('WARNING: ', 18226, ' is an island (no neighbors)')
('WARNING: ', 18237, ' is an island (no neighbors)')
('WARNING: ', 18239, ' is an island (no neighbors)')
('WARNING: ', 18262, ' is an island (no neighbors)')
('WARNING: ', 18267, ' is an island (no neighbors)')
('WARNING: ', 18317, ' is an island (no neighbors)')
('WARNING: ', 18364, ' is an island (no neighbors)')
('WARNING: ', 18371, ' is an island (no neighbors)')
('WARNING: ', 18372, ' is an island (no neighbors)')
('WARNING: ', 18390, ' is an island (no neighbors)')
('WARNING: ', 18391, ' is an island (no neighbors)')
('WARNING: ', 18402, ' is an island (no neighbors)')
('WARNING: ', 18405, ' is an island (no neighbors)')
('WARNING: ', 18409, ' is an island (no neighbors)')
('WARNING: ', 18439, ' is an island (no neighbors)')
('WARNING: ', 18458, ' is an island (no neighbors)')
('WARNING: ', 18462, ' is an island (no neighbors)')
('WARNING: ', 18468, ' is an island (no neighbors)')
('WARNING: ', 18495, ' is an island (no neighbors)')
('WARNING: ', 18511, ' is an island (no neighbors)')
('WARNING: ', 18522, ' is an island (no neighbors)')
('WARNING: ', 18532, ' is an island (no neighbors)')
('WARNING: ', 18539, ' is an island (no neighbors)')
('WARNING: ', 18540, ' is an island (no neighbors)')
('WARNING: ', 18547, ' is an island (no neighbors)')
('WARNING: ', 18548, ' is an island (no neighbors)')
('WARNING: ', 18597, ' is an island (no neighbors)')
('WARNING: ', 18626, ' is an island (no neighbors)')
('WARNING: ', 18632, ' is an island (no neighbors)')
('WARNING: ', 18689, ' is an island (no neighbors)')
('WARNING: ', 18728, ' is an island (no neighbors)')
('WARNING: ', 18734, ' is an island (no neighbors)')
('WARNING: ', 18739, ' is an island (no neighbors)')
('WARNING: ', 18742, ' is an island (no neighbors)')
('WARNING: ', 18752, ' is an island (no neighbors)')
('WARNING: ', 18788, ' is an island (no neighbors)')
('WARNING: ', 18828, ' is an island (no neighbors)')
('WARNING: ', 18834, ' is an island (no neighbors)')
('WARNING: ', 18835, ' is an island (no neighbors)')
('WARNING: ', 18842, ' is an island (no neighbors)')
('WARNING: ', 18843, ' is an island (no neighbors)')
('WARNING: ', 18887, ' is an island (no neighbors)')
('WARNING: ', 18903, ' is an island (no neighbors)')
('WARNING: ', 18910, ' is an island (no neighbors)')
('WARNING: ', 18914, ' is an island (no neighbors)')
('WARNING: ', 18938, ' is an island (no neighbors)')
('WARNING: ', 18965, ' is an island (no neighbors)')
('WARNING: ', 18968, ' is an island (no neighbors)')
('WARNING: ', 19015, ' is an island (no neighbors)')
('WARNING: ', 19023, ' is an island (no neighbors)')
('WARNING: ', 19038, ' is an island (no neighbors)')
('WARNING: ', 19053, ' is an island (no neighbors)')
('WARNING: ', 19060, ' is an island (no neighbors)')
('WARNING: ', 19068, ' is an island (no neighbors)')
('WARNING: ', 19080, ' is an island (no neighbors)')
('WARNING: ', 19081, ' is an island (no neighbors)')
('WARNING: ', 19094, ' is an island (no neighbors)')
('WARNING: ', 19096, ' is an island (no neighbors)')
('WARNING: ', 19123, ' is an island (no neighbors)')
('WARNING: ', 19124, ' is an island (no neighbors)')
('WARNING: ', 19199, ' is an island (no neighbors)')
('WARNING: ', 19212, ' is an island (no neighbors)')
('WARNING: ', 19230, ' is an island (no neighbors)')
('WARNING: ', 19261, ' is an island (no neighbors)')
('WARNING: ', 19303, ' is an island (no neighbors)')
('WARNING: ', 19327, ' is an island (no neighbors)')
('WARNING: ', 19365, ' is an island (no neighbors)')
('WARNING: ', 19381, ' is an island (no neighbors)')
('WARNING: ', 19382, ' is an island (no neighbors)')
('WARNING: ', 19386, ' is an island (no neighbors)')
('WARNING: ', 19388, ' is an island (no neighbors)')
('WARNING: ', 19404, ' is an island (no neighbors)')
('WARNING: ', 19433, ' is an island (no neighbors)')
('WARNING: ', 19437, ' is an island (no neighbors)')
('WARNING: ', 19446, ' is an island (no neighbors)')
('WARNING: ', 19488, ' is an island (no neighbors)')
('WARNING: ', 19489, ' is an island (no neighbors)')
('WARNING: ', 19497, ' is an island (no neighbors)')
('WARNING: ', 19498, ' is an island (no neighbors)')
('WARNING: ', 19541, ' is an island (no neighbors)')
('WARNING: ', 19549, ' is an island (no neighbors)')
('WARNING: ', 19552, ' is an island (no neighbors)')
('WARNING: ', 19592, ' is an island (no neighbors)')
('WARNING: ', 19602, ' is an island (no neighbors)')
('WARNING: ', 19649, ' is an island (no neighbors)')
('WARNING: ', 19679, ' is an island (no neighbors)')
('WARNING: ', 19735, ' is an island (no neighbors)')
('WARNING: ', 19792, ' is an island (no neighbors)')
('WARNING: ', 19804, ' is an island (no neighbors)')
('WARNING: ', 19809, ' is an island (no neighbors)')
('WARNING: ', 19810, ' is an island (no neighbors)')
('WARNING: ', 19811, ' is an island (no neighbors)')
('WARNING: ', 19814, ' is an island (no neighbors)')
('WARNING: ', 19821, ' is an island (no neighbors)')
('WARNING: ', 19832, ' is an island (no neighbors)')
('WARNING: ', 19838, ' is an island (no neighbors)')
('WARNING: ', 19919, ' is an island (no neighbors)')
('WARNING: ', 19944, ' is an island (no neighbors)')
('WARNING: ', 19965, ' is an island (no neighbors)')
('WARNING: ', 19979, ' is an island (no neighbors)')
('WARNING: ', 20008, ' is an island (no neighbors)')
('WARNING: ', 20042, ' is an island (no neighbors)')
('WARNING: ', 20043, ' is an island (no neighbors)')
('WARNING: ', 20047, ' is an island (no neighbors)')
('WARNING: ', 20048, ' is an island (no neighbors)')
('WARNING: ', 20055, ' is an island (no neighbors)')
('WARNING: ', 20058, ' is an island (no neighbors)')
('WARNING: ', 20061, ' is an island (no neighbors)')
('WARNING: ', 20097, ' is an island (no neighbors)')
('WARNING: ', 20105, ' is an island (no neighbors)')
('WARNING: ', 20110, ' is an island (no neighbors)')
('WARNING: ', 20111, ' is an island (no neighbors)')
('WARNING: ', 20143, ' is an island (no neighbors)')
('WARNING: ', 20147, ' is an island (no neighbors)')
('WARNING: ', 20152, ' is an island (no neighbors)')
('WARNING: ', 20157, ' is an island (no neighbors)')
('WARNING: ', 20158, ' is an island (no neighbors)')
('WARNING: ', 20175, ' is an island (no neighbors)')
('WARNING: ', 20216, ' is an island (no neighbors)')
('WARNING: ', 20241, ' is an island (no neighbors)')
('WARNING: ', 20248, ' is an island (no neighbors)')
('WARNING: ', 20266, ' is an island (no neighbors)')
('WARNING: ', 20271, ' is an island (no neighbors)')
('WARNING: ', 20277, ' is an island (no neighbors)')
('WARNING: ', 20278, ' is an island (no neighbors)')
('WARNING: ', 20297, ' is an island (no neighbors)')
('WARNING: ', 20362, ' is an island (no neighbors)')
('WARNING: ', 20376, ' is an island (no neighbors)')
('WARNING: ', 20395, ' is an island (no neighbors)')
('WARNING: ', 20405, ' is an island (no neighbors)')
('WARNING: ', 20410, ' is an island (no neighbors)')
('WARNING: ', 20425, ' is an island (no neighbors)')
('WARNING: ', 20432, ' is an island (no neighbors)')
('WARNING: ', 20439, ' is an island (no neighbors)')
('WARNING: ', 20445, ' is an island (no neighbors)')
('WARNING: ', 20468, ' is an island (no neighbors)')
('WARNING: ', 20495, ' is an island (no neighbors)')
('WARNING: ', 20496, ' is an island (no neighbors)')
('WARNING: ', 20497, ' is an island (no neighbors)')
('WARNING: ', 20505, ' is an island (no neighbors)')
('WARNING: ', 20514, ' is an island (no neighbors)')
('WARNING: ', 20520, ' is an island (no neighbors)')
('WARNING: ', 20523, ' is an island (no neighbors)')
('WARNING: ', 20540, ' is an island (no neighbors)')
('WARNING: ', 20542, ' is an island (no neighbors)')
('WARNING: ', 20543, ' is an island (no neighbors)')
('WARNING: ', 20575, ' is an island (no neighbors)')
('WARNING: ', 20610, ' is an island (no neighbors)')
('WARNING: ', 20628, ' is an island (no neighbors)')
('WARNING: ', 20630, ' is an island (no neighbors)')
('WARNING: ', 20635, ' is an island (no neighbors)')
('WARNING: ', 20636, ' is an island (no neighbors)')
('WARNING: ', 20648, ' is an island (no neighbors)')
('WARNING: ', 20653, ' is an island (no neighbors)')
('WARNING: ', 20686, ' is an island (no neighbors)')
('WARNING: ', 20713, ' is an island (no neighbors)')
('WARNING: ', 20723, ' is an island (no neighbors)')
('WARNING: ', 20725, ' is an island (no neighbors)')
('WARNING: ', 20728, ' is an island (no neighbors)')
('WARNING: ', 20731, ' is an island (no neighbors)')
('WARNING: ', 20756, ' is an island (no neighbors)')
('WARNING: ', 20778, ' is an island (no neighbors)')
('WARNING: ', 20836, ' is an island (no neighbors)')
('WARNING: ', 20874, ' is an island (no neighbors)')
('WARNING: ', 20919, ' is an island (no neighbors)')
('WARNING: ', 20920, ' is an island (no neighbors)')
('WARNING: ', 20930, ' is an island (no neighbors)')
('WARNING: ', 20933, ' is an island (no neighbors)')
('WARNING: ', 20960, ' is an island (no neighbors)')
('WARNING: ', 20968, ' is an island (no neighbors)')
('WARNING: ', 20971, ' is an island (no neighbors)')
('WARNING: ', 20973, ' is an island (no neighbors)')
('WARNING: ', 20988, ' is an island (no neighbors)')
('WARNING: ', 20990, ' is an island (no neighbors)')
('WARNING: ', 21013, ' is an island (no neighbors)')
('WARNING: ', 21044, ' is an island (no neighbors)')
('WARNING: ', 21134, ' is an island (no neighbors)')
('WARNING: ', 21138, ' is an island (no neighbors)')
('WARNING: ', 21173, ' is an island (no neighbors)')
('WARNING: ', 21216, ' is an island (no neighbors)')
('WARNING: ', 21262, ' is an island (no neighbors)')
('WARNING: ', 21277, ' is an island (no neighbors)')
('WARNING: ', 21292, ' is an island (no neighbors)')
('WARNING: ', 21342, ' is an island (no neighbors)')
('WARNING: ', 21344, ' is an island (no neighbors)')
('WARNING: ', 21345, ' is an island (no neighbors)')
('WARNING: ', 21346, ' is an island (no neighbors)')
('WARNING: ', 21352, ' is an island (no neighbors)')
('WARNING: ', 21434, ' is an island (no neighbors)')
('WARNING: ', 21472, ' is an island (no neighbors)')
('WARNING: ', 21477, ' is an island (no neighbors)')
('WARNING: ', 21500, ' is an island (no neighbors)')
('WARNING: ', 21501, ' is an island (no neighbors)')
('WARNING: ', 21538, ' is an island (no neighbors)')
('WARNING: ', 21541, ' is an island (no neighbors)')
('WARNING: ', 21573, ' is an island (no neighbors)')
('WARNING: ', 21574, ' is an island (no neighbors)')
('WARNING: ', 21575, ' is an island (no neighbors)')
('WARNING: ', 21576, ' is an island (no neighbors)')
('WARNING: ', 21599, ' is an island (no neighbors)')
('WARNING: ', 21657, ' is an island (no neighbors)')
('WARNING: ', 21673, ' is an island (no neighbors)')
('WARNING: ', 21680, ' is an island (no neighbors)')
('WARNING: ', 21714, ' is an island (no neighbors)')
('WARNING: ', 21715, ' is an island (no neighbors)')
('WARNING: ', 21719, ' is an island (no neighbors)')
('WARNING: ', 21784, ' is an island (no neighbors)')
('WARNING: ', 21794, ' is an island (no neighbors)')
('WARNING: ', 21821, ' is an island (no neighbors)')
('WARNING: ', 21851, ' is an island (no neighbors)')
('WARNING: ', 21857, ' is an island (no neighbors)')
('WARNING: ', 21867, ' is an island (no neighbors)')
('WARNING: ', 21878, ' is an island (no neighbors)')
('WARNING: ', 21888, ' is an island (no neighbors)')
('WARNING: ', 21915, ' is an island (no neighbors)')
('WARNING: ', 21955, ' is an island (no neighbors)')
('WARNING: ', 22011, ' is an island (no neighbors)')
('WARNING: ', 22054, ' is an island (no neighbors)')
('WARNING: ', 22056, ' is an island (no neighbors)')
('WARNING: ', 22075, ' is an island (no neighbors)')
('WARNING: ', 22087, ' is an island (no neighbors)')
('WARNING: ', 22131, ' is an island (no neighbors)')
('WARNING: ', 22179, ' is an island (no neighbors)')
('WARNING: ', 22218, ' is an island (no neighbors)')
('WARNING: ', 22272, ' is an island (no neighbors)')
('WARNING: ', 22274, ' is an island (no neighbors)')
('WARNING: ', 22276, ' is an island (no neighbors)')
('WARNING: ', 22284, ' is an island (no neighbors)')
('WARNING: ', 22314, ' is an island (no neighbors)')
('WARNING: ', 22335, ' is an island (no neighbors)')
('WARNING: ', 22341, ' is an island (no neighbors)')
('WARNING: ', 22343, ' is an island (no neighbors)')
('WARNING: ', 22347, ' is an island (no neighbors)')
('WARNING: ', 22348, ' is an island (no neighbors)')
('WARNING: ', 22383, ' is an island (no neighbors)')
('WARNING: ', 22414, ' is an island (no neighbors)')
('WARNING: ', 22424, ' is an island (no neighbors)')
('WARNING: ', 22433, ' is an island (no neighbors)')
('WARNING: ', 22436, ' is an island (no neighbors)')
('WARNING: ', 22453, ' is an island (no neighbors)')
('WARNING: ', 22462, ' is an island (no neighbors)')
('WARNING: ', 22492, ' is an island (no neighbors)')
('WARNING: ', 22631, ' is an island (no neighbors)')
('WARNING: ', 22652, ' is an island (no neighbors)')
('WARNING: ', 22696, ' is an island (no neighbors)')
('WARNING: ', 22730, ' is an island (no neighbors)')
('WARNING: ', 22731, ' is an island (no neighbors)')
('WARNING: ', 22732, ' is an island (no neighbors)')
('WARNING: ', 22733, ' is an island (no neighbors)')
('WARNING: ', 22734, ' is an island (no neighbors)')
('WARNING: ', 22744, ' is an island (no neighbors)')
('WARNING: ', 22746, ' is an island (no neighbors)')
('WARNING: ', 22796, ' is an island (no neighbors)')
('WARNING: ', 22807, ' is an island (no neighbors)')
('WARNING: ', 22814, ' is an island (no neighbors)')
('WARNING: ', 22817, ' is an island (no neighbors)')
('WARNING: ', 22847, ' is an island (no neighbors)')
('WARNING: ', 22859, ' is an island (no neighbors)')
('WARNING: ', 22866, ' is an island (no neighbors)')
('WARNING: ', 22917, ' is an island (no neighbors)')
('WARNING: ', 22941, ' is an island (no neighbors)')
('WARNING: ', 22949, ' is an island (no neighbors)')
('WARNING: ', 22976, ' is an island (no neighbors)')
('WARNING: ', 22987, ' is an island (no neighbors)')
('WARNING: ', 22992, ' is an island (no neighbors)')
('WARNING: ', 23024, ' is an island (no neighbors)')
('WARNING: ', 23047, ' is an island (no neighbors)')
('WARNING: ', 23078, ' is an island (no neighbors)')
('WARNING: ', 23093, ' is an island (no neighbors)')
('WARNING: ', 23096, ' is an island (no neighbors)')
('WARNING: ', 23097, ' is an island (no neighbors)')
('WARNING: ', 23124, ' is an island (no neighbors)')
('WARNING: ', 23125, ' is an island (no neighbors)')
('WARNING: ', 23154, ' is an island (no neighbors)')
('WARNING: ', 23159, ' is an island (no neighbors)')
('WARNING: ', 23226, ' is an island (no neighbors)')
('WARNING: ', 23241, ' is an island (no neighbors)')
('WARNING: ', 23255, ' is an island (no neighbors)')
('WARNING: ', 23256, ' is an island (no neighbors)')
('WARNING: ', 23264, ' is an island (no neighbors)')
('WARNING: ', 23265, ' is an island (no neighbors)')
('WARNING: ', 23270, ' is an island (no neighbors)')
('WARNING: ', 23271, ' is an island (no neighbors)')
('WARNING: ', 23272, ' is an island (no neighbors)')
('WARNING: ', 23276, ' is an island (no neighbors)')
('WARNING: ', 23281, ' is an island (no neighbors)')
('WARNING: ', 23282, ' is an island (no neighbors)')
('WARNING: ', 23284, ' is an island (no neighbors)')
('WARNING: ', 23321, ' is an island (no neighbors)')
('WARNING: ', 23398, ' is an island (no neighbors)')
('WARNING: ', 23403, ' is an island (no neighbors)')
('WARNING: ', 23404, ' is an island (no neighbors)')
('WARNING: ', 23442, ' is an island (no neighbors)')
('WARNING: ', 23444, ' is an island (no neighbors)')
('WARNING: ', 23473, ' is an island (no neighbors)')
('WARNING: ', 23515, ' is an island (no neighbors)')
('WARNING: ', 23539, ' is an island (no neighbors)')
('WARNING: ', 23562, ' is an island (no neighbors)')
('WARNING: ', 23573, ' is an island (no neighbors)')
('WARNING: ', 23605, ' is an island (no neighbors)')
('WARNING: ', 23624, ' is an island (no neighbors)')
('WARNING: ', 23639, ' is an island (no neighbors)')
('WARNING: ', 23661, ' is an island (no neighbors)')
('WARNING: ', 23687, ' is an island (no neighbors)')
('WARNING: ', 23779, ' is an island (no neighbors)')
('WARNING: ', 23781, ' is an island (no neighbors)')
('WARNING: ', 23808, ' is an island (no neighbors)')
('WARNING: ', 23817, ' is an island (no neighbors)')
('WARNING: ', 23822, ' is an island (no neighbors)')
('WARNING: ', 23844, ' is an island (no neighbors)')
('WARNING: ', 23857, ' is an island (no neighbors)')
('WARNING: ', 23861, ' is an island (no neighbors)')
('WARNING: ', 23885, ' is an island (no neighbors)')
('WARNING: ', 23906, ' is an island (no neighbors)')
('WARNING: ', 23957, ' is an island (no neighbors)')
('WARNING: ', 24021, ' is an island (no neighbors)')
('WARNING: ', 24022, ' is an island (no neighbors)')
('WARNING: ', 24046, ' is an island (no neighbors)')
('WARNING: ', 24057, ' is an island (no neighbors)')
('WARNING: ', 24111, ' is an island (no neighbors)')
('WARNING: ', 24121, ' is an island (no neighbors)')
('WARNING: ', 24129, ' is an island (no neighbors)')
('WARNING: ', 24158, ' is an island (no neighbors)')
('WARNING: ', 24171, ' is an island (no neighbors)')
('WARNING: ', 24187, ' is an island (no neighbors)')
('WARNING: ', 24243, ' is an island (no neighbors)')
('WARNING: ', 24268, ' is an island (no neighbors)')
('WARNING: ', 24296, ' is an island (no neighbors)')
('WARNING: ', 24354, ' is an island (no neighbors)')
('WARNING: ', 24358, ' is an island (no neighbors)')
('WARNING: ', 24361, ' is an island (no neighbors)')
('WARNING: ', 24378, ' is an island (no neighbors)')
('WARNING: ', 24401, ' is an island (no neighbors)')
('WARNING: ', 24403, ' is an island (no neighbors)')
('WARNING: ', 24472, ' is an island (no neighbors)')
('WARNING: ', 24511, ' is an island (no neighbors)')
('WARNING: ', 24524, ' is an island (no neighbors)')
('WARNING: ', 24548, ' is an island (no neighbors)')
('WARNING: ', 24586, ' is an island (no neighbors)')
('WARNING: ', 24589, ' is an island (no neighbors)')
('WARNING: ', 24627, ' is an island (no neighbors)')
('WARNING: ', 24664, ' is an island (no neighbors)')
('WARNING: ', 24669, ' is an island (no neighbors)')
('WARNING: ', 24680, ' is an island (no neighbors)')
('WARNING: ', 24685, ' is an island (no neighbors)')
('WARNING: ', 24693, ' is an island (no neighbors)')
('WARNING: ', 24737, ' is an island (no neighbors)')
('WARNING: ', 24776, ' is an island (no neighbors)')
('WARNING: ', 24789, ' is an island (no neighbors)')
('WARNING: ', 24801, ' is an island (no neighbors)')
('WARNING: ', 24807, ' is an island (no neighbors)')
('WARNING: ', 24825, ' is an island (no neighbors)')
('WARNING: ', 24828, ' is an island (no neighbors)')
('WARNING: ', 24836, ' is an island (no neighbors)')
('WARNING: ', 24837, ' is an island (no neighbors)')
('WARNING: ', 24861, ' is an island (no neighbors)')
('WARNING: ', 24880, ' is an island (no neighbors)')
('WARNING: ', 24904, ' is an island (no neighbors)')
('WARNING: ', 24915, ' is an island (no neighbors)')
('WARNING: ', 24931, ' is an island (no neighbors)')
('WARNING: ', 24949, ' is an island (no neighbors)')
('WARNING: ', 24981, ' is an island (no neighbors)')
('WARNING: ', 24997, ' is an island (no neighbors)')
('WARNING: ', 25000, ' is an island (no neighbors)')
('WARNING: ', 25001, ' is an island (no neighbors)')
('WARNING: ', 25023, ' is an island (no neighbors)')
('WARNING: ', 25044, ' is an island (no neighbors)')
('WARNING: ', 25081, ' is an island (no neighbors)')
('WARNING: ', 25084, ' is an island (no neighbors)')
('WARNING: ', 25087, ' is an island (no neighbors)')
('WARNING: ', 25106, ' is an island (no neighbors)')
('WARNING: ', 25113, ' is an island (no neighbors)')
('WARNING: ', 25114, ' is an island (no neighbors)')
('WARNING: ', 25149, ' is an island (no neighbors)')
('WARNING: ', 25213, ' is an island (no neighbors)')
('WARNING: ', 25224, ' is an island (no neighbors)')
('WARNING: ', 25287, ' is an island (no neighbors)')
('WARNING: ', 25307, ' is an island (no neighbors)')
('WARNING: ', 25314, ' is an island (no neighbors)')
('WARNING: ', 25351, ' is an island (no neighbors)')
('WARNING: ', 25384, ' is an island (no neighbors)')
('WARNING: ', 25385, ' is an island (no neighbors)')
('WARNING: ', 25392, ' is an island (no neighbors)')
('WARNING: ', 25400, ' is an island (no neighbors)')
('WARNING: ', 25414, ' is an island (no neighbors)')
('WARNING: ', 25415, ' is an island (no neighbors)')
('WARNING: ', 25418, ' is an island (no neighbors)')
('WARNING: ', 25430, ' is an island (no neighbors)')
('WARNING: ', 25435, ' is an island (no neighbors)')
('WARNING: ', 25450, ' is an island (no neighbors)')
('WARNING: ', 25470, ' is an island (no neighbors)')
('WARNING: ', 25487, ' is an island (no neighbors)')
('WARNING: ', 25500, ' is an island (no neighbors)')
('WARNING: ', 25506, ' is an island (no neighbors)')
('WARNING: ', 25512, ' is an island (no neighbors)')
('WARNING: ', 25513, ' is an island (no neighbors)')
('WARNING: ', 25528, ' is an island (no neighbors)')
('WARNING: ', 25529, ' is an island (no neighbors)')
('WARNING: ', 25542, ' is an island (no neighbors)')
('WARNING: ', 25580, ' is an island (no neighbors)')
('WARNING: ', 25583, ' is an island (no neighbors)')
('WARNING: ', 25589, ' is an island (no neighbors)')
('WARNING: ', 25590, ' is an island (no neighbors)')
('WARNING: ', 25600, ' is an island (no neighbors)')
('WARNING: ', 25611, ' is an island (no neighbors)')
('WARNING: ', 25645, ' is an island (no neighbors)')
('WARNING: ', 25647, ' is an island (no neighbors)')
('WARNING: ', 25680, ' is an island (no neighbors)')
('WARNING: ', 25682, ' is an island (no neighbors)')
('WARNING: ', 25697, ' is an island (no neighbors)')
('WARNING: ', 25719, ' is an island (no neighbors)')
('WARNING: ', 25740, ' is an island (no neighbors)')
('WARNING: ', 25759, ' is an island (no neighbors)')
('WARNING: ', 25819, ' is an island (no neighbors)')
('WARNING: ', 25849, ' is an island (no neighbors)')
('WARNING: ', 25853, ' is an island (no neighbors)')
('WARNING: ', 25860, ' is an island (no neighbors)')
('WARNING: ', 25866, ' is an island (no neighbors)')
('WARNING: ', 25867, ' is an island (no neighbors)')
('WARNING: ', 25877, ' is an island (no neighbors)')
('WARNING: ', 25886, ' is an island (no neighbors)')
('WARNING: ', 25887, ' is an island (no neighbors)')
('WARNING: ', 25900, ' is an island (no neighbors)')
('WARNING: ', 25907, ' is an island (no neighbors)')
('WARNING: ', 25912, ' is an island (no neighbors)')
('WARNING: ', 25963, ' is an island (no neighbors)')
('WARNING: ', 25976, ' is an island (no neighbors)')
('WARNING: ', 25977, ' is an island (no neighbors)')
('WARNING: ', 26033, ' is an island (no neighbors)')
('WARNING: ', 26034, ' is an island (no neighbors)')
('WARNING: ', 26088, ' is an island (no neighbors)')
('WARNING: ', 26109, ' is an island (no neighbors)')
('WARNING: ', 26116, ' is an island (no neighbors)')
('WARNING: ', 26117, ' is an island (no neighbors)')
('WARNING: ', 26119, ' is an island (no neighbors)')
('WARNING: ', 26122, ' is an island (no neighbors)')
('WARNING: ', 26136, ' is an island (no neighbors)')
('WARNING: ', 26141, ' is an island (no neighbors)')
('WARNING: ', 26162, ' is an island (no neighbors)')
('WARNING: ', 26198, ' is an island (no neighbors)')
('WARNING: ', 26199, ' is an island (no neighbors)')
('WARNING: ', 26222, ' is an island (no neighbors)')
('WARNING: ', 26243, ' is an island (no neighbors)')
('WARNING: ', 26246, ' is an island (no neighbors)')
('WARNING: ', 26248, ' is an island (no neighbors)')
('WARNING: ', 26251, ' is an island (no neighbors)')
('WARNING: ', 26256, ' is an island (no neighbors)')
('WARNING: ', 26264, ' is an island (no neighbors)')
('WARNING: ', 26278, ' is an island (no neighbors)')
('WARNING: ', 26285, ' is an island (no neighbors)')
('WARNING: ', 26286, ' is an island (no neighbors)')
('WARNING: ', 26287, ' is an island (no neighbors)')
('WARNING: ', 26350, ' is an island (no neighbors)')
('WARNING: ', 26354, ' is an island (no neighbors)')
('WARNING: ', 26374, ' is an island (no neighbors)')
('WARNING: ', 26375, ' is an island (no neighbors)')
('WARNING: ', 26379, ' is an island (no neighbors)')
('WARNING: ', 26380, ' is an island (no neighbors)')
('WARNING: ', 26383, ' is an island (no neighbors)')
('WARNING: ', 26404, ' is an island (no neighbors)')
('WARNING: ', 26413, ' is an island (no neighbors)')
('WARNING: ', 26441, ' is an island (no neighbors)')
('WARNING: ', 26459, ' is an island (no neighbors)')
('WARNING: ', 26479, ' is an island (no neighbors)')
('WARNING: ', 26496, ' is an island (no neighbors)')
('WARNING: ', 26541, ' is an island (no neighbors)')
('WARNING: ', 26552, ' is an island (no neighbors)')
('WARNING: ', 26569, ' is an island (no neighbors)')
('WARNING: ', 26630, ' is an island (no neighbors)')
('WARNING: ', 26690, ' is an island (no neighbors)')
('WARNING: ', 26691, ' is an island (no neighbors)')
('WARNING: ', 26713, ' is an island (no neighbors)')
('WARNING: ', 26716, ' is an island (no neighbors)')
('WARNING: ', 26717, ' is an island (no neighbors)')
('WARNING: ', 26720, ' is an island (no neighbors)')
('WARNING: ', 26721, ' is an island (no neighbors)')
('WARNING: ', 26722, ' is an island (no neighbors)')
('WARNING: ', 26729, ' is an island (no neighbors)')
('WARNING: ', 26741, ' is an island (no neighbors)')
('WARNING: ', 26764, ' is an island (no neighbors)')
('WARNING: ', 26778, ' is an island (no neighbors)')
('WARNING: ', 26797, ' is an island (no neighbors)')
('WARNING: ', 26828, ' is an island (no neighbors)')
('WARNING: ', 26859, ' is an island (no neighbors)')
('WARNING: ', 26976, ' is an island (no neighbors)')
('WARNING: ', 26978, ' is an island (no neighbors)')
('WARNING: ', 26979, ' is an island (no neighbors)')
('WARNING: ', 26980, ' is an island (no neighbors)')
('WARNING: ', 27002, ' is an island (no neighbors)')
('WARNING: ', 27026, ' is an island (no neighbors)')
('WARNING: ', 27050, ' is an island (no neighbors)')
('WARNING: ', 27085, ' is an island (no neighbors)')
('WARNING: ', 27204, ' is an island (no neighbors)')
('WARNING: ', 27205, ' is an island (no neighbors)')
('WARNING: ', 27208, ' is an island (no neighbors)')
('WARNING: ', 27233, ' is an island (no neighbors)')
('WARNING: ', 27286, ' is an island (no neighbors)')
('WARNING: ', 27287, ' is an island (no neighbors)')
('WARNING: ', 27303, ' is an island (no neighbors)')
('WARNING: ', 27325, ' is an island (no neighbors)')
('WARNING: ', 27326, ' is an island (no neighbors)')
('WARNING: ', 27351, ' is an island (no neighbors)')
('WARNING: ', 27358, ' is an island (no neighbors)')
('WARNING: ', 27390, ' is an island (no neighbors)')
('WARNING: ', 27411, ' is an island (no neighbors)')
('WARNING: ', 27420, ' is an island (no neighbors)')
('WARNING: ', 27421, ' is an island (no neighbors)')
('WARNING: ', 27424, ' is an island (no neighbors)')
('WARNING: ', 27469, ' is an island (no neighbors)')
('WARNING: ', 27478, ' is an island (no neighbors)')
('WARNING: ', 27495, ' is an island (no neighbors)')
('WARNING: ', 27496, ' is an island (no neighbors)')
('WARNING: ', 27508, ' is an island (no neighbors)')
('WARNING: ', 27510, ' is an island (no neighbors)')
('WARNING: ', 27519, ' is an island (no neighbors)')
('WARNING: ', 27521, ' is an island (no neighbors)')
('WARNING: ', 27538, ' is an island (no neighbors)')
('WARNING: ', 27546, ' is an island (no neighbors)')
('WARNING: ', 27549, ' is an island (no neighbors)')
('WARNING: ', 27550, ' is an island (no neighbors)')
('WARNING: ', 27566, ' is an island (no neighbors)')
('WARNING: ', 27619, ' is an island (no neighbors)')
('WARNING: ', 27641, ' is an island (no neighbors)')
('WARNING: ', 27643, ' is an island (no neighbors)')
('WARNING: ', 27686, ' is an island (no neighbors)')
('WARNING: ', 27687, ' is an island (no neighbors)')
('WARNING: ', 27688, ' is an island (no neighbors)')
('WARNING: ', 27706, ' is an island (no neighbors)')
('WARNING: ', 27727, ' is an island (no neighbors)')
('WARNING: ', 27739, ' is an island (no neighbors)')
('WARNING: ', 27771, ' is an island (no neighbors)')
('WARNING: ', 27795, ' is an island (no neighbors)')
('WARNING: ', 27817, ' is an island (no neighbors)')
('WARNING: ', 27827, ' is an island (no neighbors)')
('WARNING: ', 27851, ' is an island (no neighbors)')
('WARNING: ', 27869, ' is an island (no neighbors)')
('WARNING: ', 27883, ' is an island (no neighbors)')
('WARNING: ', 27884, ' is an island (no neighbors)')
('WARNING: ', 27886, ' is an island (no neighbors)')
('WARNING: ', 27963, ' is an island (no neighbors)')
('WARNING: ', 27964, ' is an island (no neighbors)')
('WARNING: ', 27968, ' is an island (no neighbors)')
('WARNING: ', 27999, ' is an island (no neighbors)')
('WARNING: ', 28037, ' is an island (no neighbors)')
('WARNING: ', 28039, ' is an island (no neighbors)')
('WARNING: ', 28094, ' is an island (no neighbors)')
('WARNING: ', 28106, ' is an island (no neighbors)')
('WARNING: ', 28134, ' is an island (no neighbors)')
('WARNING: ', 28135, ' is an island (no neighbors)')
('WARNING: ', 28136, ' is an island (no neighbors)')
('WARNING: ', 28143, ' is an island (no neighbors)')
('WARNING: ', 28145, ' is an island (no neighbors)')
('WARNING: ', 28152, ' is an island (no neighbors)')
('WARNING: ', 28218, ' is an island (no neighbors)')
('WARNING: ', 28219, ' is an island (no neighbors)')
('WARNING: ', 28220, ' is an island (no neighbors)')
('WARNING: ', 28234, ' is an island (no neighbors)')
('WARNING: ', 28306, ' is an island (no neighbors)')
('WARNING: ', 28330, ' is an island (no neighbors)')
('WARNING: ', 28337, ' is an island (no neighbors)')
('WARNING: ', 28339, ' is an island (no neighbors)')
('WARNING: ', 28367, ' is an island (no neighbors)')
('WARNING: ', 28379, ' is an island (no neighbors)')
('WARNING: ', 28381, ' is an island (no neighbors)')
('WARNING: ', 28398, ' is an island (no neighbors)')
('WARNING: ', 28410, ' is an island (no neighbors)')
('WARNING: ', 28411, ' is an island (no neighbors)')
('WARNING: ', 28427, ' is an island (no neighbors)')
('WARNING: ', 28435, ' is an island (no neighbors)')
('WARNING: ', 28437, ' is an island (no neighbors)')
('WARNING: ', 28490, ' is an island (no neighbors)')
('WARNING: ', 28546, ' is an island (no neighbors)')
('WARNING: ', 28561, ' is an island (no neighbors)')
('WARNING: ', 28573, ' is an island (no neighbors)')
('WARNING: ', 28582, ' is an island (no neighbors)')
('WARNING: ', 28586, ' is an island (no neighbors)')
('WARNING: ', 28587, ' is an island (no neighbors)')
('WARNING: ', 28592, ' is an island (no neighbors)')
('WARNING: ', 28593, ' is an island (no neighbors)')
('WARNING: ', 28597, ' is an island (no neighbors)')
('WARNING: ', 28598, ' is an island (no neighbors)')
('WARNING: ', 28618, ' is an island (no neighbors)')
('WARNING: ', 28619, ' is an island (no neighbors)')
('WARNING: ', 28623, ' is an island (no neighbors)')
('WARNING: ', 28633, ' is an island (no neighbors)')
('WARNING: ', 28639, ' is an island (no neighbors)')
('WARNING: ', 28644, ' is an island (no neighbors)')
('WARNING: ', 28673, ' is an island (no neighbors)')
('WARNING: ', 28681, ' is an island (no neighbors)')
('WARNING: ', 28682, ' is an island (no neighbors)')
('WARNING: ', 28683, ' is an island (no neighbors)')
('WARNING: ', 28686, ' is an island (no neighbors)')
('WARNING: ', 28717, ' is an island (no neighbors)')
('WARNING: ', 28721, ' is an island (no neighbors)')
('WARNING: ', 28754, ' is an island (no neighbors)')
('WARNING: ', 28758, ' is an island (no neighbors)')
('WARNING: ', 28775, ' is an island (no neighbors)')
('WARNING: ', 28796, ' is an island (no neighbors)')
('WARNING: ', 28798, ' is an island (no neighbors)')
('WARNING: ', 28807, ' is an island (no neighbors)')
('WARNING: ', 28808, ' is an island (no neighbors)')
('WARNING: ', 28859, ' is an island (no neighbors)')
('WARNING: ', 28863, ' is an island (no neighbors)')
('WARNING: ', 28881, ' is an island (no neighbors)')
('WARNING: ', 28899, ' is an island (no neighbors)')
('WARNING: ', 28911, ' is an island (no neighbors)')
('WARNING: ', 28912, ' is an island (no neighbors)')
('WARNING: ', 28913, ' is an island (no neighbors)')
('WARNING: ', 28920, ' is an island (no neighbors)')
('WARNING: ', 28967, ' is an island (no neighbors)')
('WARNING: ', 28994, ' is an island (no neighbors)')
('WARNING: ', 29000, ' is an island (no neighbors)')
('WARNING: ', 29002, ' is an island (no neighbors)')
('WARNING: ', 29019, ' is an island (no neighbors)')
('WARNING: ', 29036, ' is an island (no neighbors)')
('WARNING: ', 29050, ' is an island (no neighbors)')
('WARNING: ', 29081, ' is an island (no neighbors)')
('WARNING: ', 29087, ' is an island (no neighbors)')
('WARNING: ', 29139, ' is an island (no neighbors)')
('WARNING: ', 29140, ' is an island (no neighbors)')
('WARNING: ', 29150, ' is an island (no neighbors)')
('WARNING: ', 29192, ' is an island (no neighbors)')
('WARNING: ', 29194, ' is an island (no neighbors)')
('WARNING: ', 29203, ' is an island (no neighbors)')
('WARNING: ', 29208, ' is an island (no neighbors)')
('WARNING: ', 29216, ' is an island (no neighbors)')
('WARNING: ', 29219, ' is an island (no neighbors)')
('WARNING: ', 29220, ' is an island (no neighbors)')
('WARNING: ', 29222, ' is an island (no neighbors)')
('WARNING: ', 29233, ' is an island (no neighbors)')
('WARNING: ', 29238, ' is an island (no neighbors)')
('WARNING: ', 29262, ' is an island (no neighbors)')
('WARNING: ', 29270, ' is an island (no neighbors)')
('WARNING: ', 29312, ' is an island (no neighbors)')
('WARNING: ', 29331, ' is an island (no neighbors)')
('WARNING: ', 29335, ' is an island (no neighbors)')
('WARNING: ', 29350, ' is an island (no neighbors)')
('WARNING: ', 29371, ' is an island (no neighbors)')
('WARNING: ', 29372, ' is an island (no neighbors)')
('WARNING: ', 29414, ' is an island (no neighbors)')
('WARNING: ', 29416, ' is an island (no neighbors)')
('WARNING: ', 29426, ' is an island (no neighbors)')
('WARNING: ', 29430, ' is an island (no neighbors)')
('WARNING: ', 29477, ' is an island (no neighbors)')
('WARNING: ', 29525, ' is an island (no neighbors)')
('WARNING: ', 29532, ' is an island (no neighbors)')
('WARNING: ', 29573, ' is an island (no neighbors)')
('WARNING: ', 29592, ' is an island (no neighbors)')
('WARNING: ', 29619, ' is an island (no neighbors)')
('WARNING: ', 29620, ' is an island (no neighbors)')
('WARNING: ', 29635, ' is an island (no neighbors)')
('WARNING: ', 29694, ' is an island (no neighbors)')
('WARNING: ', 29704, ' is an island (no neighbors)')
('WARNING: ', 29705, ' is an island (no neighbors)')
('WARNING: ', 29706, ' is an island (no neighbors)')
('WARNING: ', 29708, ' is an island (no neighbors)')
('WARNING: ', 29752, ' is an island (no neighbors)')
('WARNING: ', 29771, ' is an island (no neighbors)')
('WARNING: ', 29774, ' is an island (no neighbors)')
('WARNING: ', 29782, ' is an island (no neighbors)')
('WARNING: ', 29796, ' is an island (no neighbors)')
('WARNING: ', 29821, ' is an island (no neighbors)')
('WARNING: ', 29825, ' is an island (no neighbors)')
('WARNING: ', 29828, ' is an island (no neighbors)')
('WARNING: ', 29862, ' is an island (no neighbors)')
('WARNING: ', 29863, ' is an island (no neighbors)')
('WARNING: ', 29874, ' is an island (no neighbors)')
('WARNING: ', 29878, ' is an island (no neighbors)')
('WARNING: ', 29879, ' is an island (no neighbors)')
('WARNING: ', 29891, ' is an island (no neighbors)')
('WARNING: ', 29892, ' is an island (no neighbors)')
('WARNING: ', 29894, ' is an island (no neighbors)')
('WARNING: ', 29895, ' is an island (no neighbors)')
('WARNING: ', 29921, ' is an island (no neighbors)')
('WARNING: ', 29923, ' is an island (no neighbors)')
('WARNING: ', 29935, ' is an island (no neighbors)')
('WARNING: ', 29939, ' is an island (no neighbors)')
('WARNING: ', 29940, ' is an island (no neighbors)')
('WARNING: ', 29948, ' is an island (no neighbors)')
('WARNING: ', 29978, ' is an island (no neighbors)')
('WARNING: ', 29985, ' is an island (no neighbors)')
('WARNING: ', 29991, ' is an island (no neighbors)')
('WARNING: ', 29994, ' is an island (no neighbors)')
('WARNING: ', 29998, ' is an island (no neighbors)')
('WARNING: ', 30013, ' is an island (no neighbors)')
('WARNING: ', 30025, ' is an island (no neighbors)')
('WARNING: ', 30026, ' is an island (no neighbors)')
('WARNING: ', 30052, ' is an island (no neighbors)')
('WARNING: ', 30099, ' is an island (no neighbors)')
('WARNING: ', 30110, ' is an island (no neighbors)')
('WARNING: ', 30114, ' is an island (no neighbors)')
('WARNING: ', 30115, ' is an island (no neighbors)')
('WARNING: ', 30125, ' is an island (no neighbors)')
('WARNING: ', 30189, ' is an island (no neighbors)')
('WARNING: ', 30196, ' is an island (no neighbors)')
('WARNING: ', 30216, ' is an island (no neighbors)')
('WARNING: ', 30227, ' is an island (no neighbors)')
('WARNING: ', 30288, ' is an island (no neighbors)')
('WARNING: ', 30294, ' is an island (no neighbors)')
('WARNING: ', 30303, ' is an island (no neighbors)')
('WARNING: ', 30317, ' is an island (no neighbors)')
('WARNING: ', 30371, ' is an island (no neighbors)')
('WARNING: ', 30402, ' is an island (no neighbors)')
('WARNING: ', 30406, ' is an island (no neighbors)')
('WARNING: ', 30408, ' is an island (no neighbors)')
('WARNING: ', 30449, ' is an island (no neighbors)')
('WARNING: ', 30450, ' is an island (no neighbors)')
('WARNING: ', 30560, ' is an island (no neighbors)')
('WARNING: ', 30567, ' is an island (no neighbors)')
('WARNING: ', 30588, ' is an island (no neighbors)')
('WARNING: ', 30615, ' is an island (no neighbors)')
('WARNING: ', 30647, ' is an island (no neighbors)')
('WARNING: ', 30670, ' is an island (no neighbors)')
('WARNING: ', 30687, ' is an island (no neighbors)')
('WARNING: ', 30728, ' is an island (no neighbors)')
('WARNING: ', 30729, ' is an island (no neighbors)')
('WARNING: ', 30730, ' is an island (no neighbors)')
('WARNING: ', 30780, ' is an island (no neighbors)')
('WARNING: ', 30781, ' is an island (no neighbors)')
('WARNING: ', 30804, ' is an island (no neighbors)')
('WARNING: ', 30806, ' is an island (no neighbors)')
('WARNING: ', 30823, ' is an island (no neighbors)')
('WARNING: ', 30825, ' is an island (no neighbors)')
('WARNING: ', 30830, ' is an island (no neighbors)')
('WARNING: ', 30832, ' is an island (no neighbors)')
('WARNING: ', 30833, ' is an island (no neighbors)')
('WARNING: ', 30865, ' is an island (no neighbors)')
('WARNING: ', 30878, ' is an island (no neighbors)')
('WARNING: ', 30895, ' is an island (no neighbors)')
('WARNING: ', 30901, ' is an island (no neighbors)')
/opt/conda/lib/python3.9/site-packages/libpysal/weights/weights.py:172: UserWarning: The weights matrix is not fully connected: 
 There are 13 disconnected components.
 There are 10 islands with ids: 11563, 18112, 24885, 27089, 37460, 42477, 47994, 49645, 59851, 66131.
  warnings.warn(message)
('WARNING: ', 11563, ' is an island (no neighbors)')
('WARNING: ', 18112, ' is an island (no neighbors)')
('WARNING: ', 24885, ' is an island (no neighbors)')
('WARNING: ', 27089, ' is an island (no neighbors)')
('WARNING: ', 37460, ' is an island (no neighbors)')
('WARNING: ', 42477, ' is an island (no neighbors)')
('WARNING: ', 47994, ' is an island (no neighbors)')
('WARNING: ', 49645, ' is an island (no neighbors)')
('WARNING: ', 59851, ' is an island (no neighbors)')
('WARNING: ', 66131, ' is an island (no neighbors)')

To make things handier later, we grab the names of the lagged variables separately:

w_class_names = ['w_'+i for i in tools.class_names]

Spatially lagging the split chips will give rise to islands (chips that do not have any neighbors). This will mean later on, when we consolidate the table for models, we will have to drop island observations and, if there is a systematic bias in the group (train/val) where we drop more, it might induce further issues down the line.

sns.displot(
    lag_all.assign(
        train_all=db_all['train_all'].map({True: "Train", False: "Validation"})
    ), 
    x='card', 
    hue='train_all', 
    element='step',
    aspect=2,
    height=3
);
../_images/sp_model_chip_probabilities_36_01.png

Cardinalities clearly differ: trainining observations (a larger group) has more neighbors on average. This is potentially a problem in that the validation set is not mimmicking the training one. However, the direction of the difference might be such that evaluation metrics could be taken as a lower bound: the model is trained using more information from context but evaluated with less; performance will be evaluated with “worse” conditions than it’s been trained on so, everything else being equal, it’d give lower scores than the model actually should.

DA-B: discuss with MF it is the case

corrs = tools.build_prob_wprob_corrs(
    tools.class_names, w_class_names, db_all, lag_all
)

As an exploration, here we have the correlation between high probability in a given class, and high probability in other classes in the spatial lag (geographic context). There is a clear pattern of non-zero correlations.

h = sns.heatmap(corrs, vmin=0, vmax=1, cmap='viridis')
h.set_xticklabels(h.get_xticklabels(), rotation = 45, ha="right");
../_images/sp_model_chip_probabilities_40_01.png

Block Split lag

[TBA]

Interaction variables

Here we develop a set of interaction variables between the probability of each class and their spatial lag. In mathematical terms, the expected probability \(\mu_i\) for chip \(i\) in our base model is:

\[ \mu_i = \alpha + \sum_k P_{ki} \beta_k \]

When we include the spatial lag, this becomes:

\[ \mu_i = \alpha + \sum_k P_{ki} \beta_k + \sum_k WP_{ki} \gamma_k \]

The idea with interactions is to model the probability expectation as:

\[ \mu_i = \alpha + \sum_k P_{ki} \beta_k + \sum_k WP_{ki} \gamma_k + \sum_k \sum_k P_{ki} \times WP_{ki} \delta_{kk} \]

Here we build a method to construct the last term in the equation above (\(\sum_k \sum_k P_{ki} \times WP_{ki}\)), which will be used when fitting some of the models below:

Build db

Finally, we bring together in a single, clean table information on the original probabilities, their spatial lags, and class label. To make sure it is analysis-ready, we retain only single-class chips that are not islands (i.e., have at least one neighbor).

db = db_all.join(
    lag_all
).query(
    '(single_class == True) & (island == False)'
).drop(['single_class', 'island'], axis=1)

The dropping of observations that happened above might also induce additional biases.

DA-B Explore further the distribution of values between train/val sets (e.g. heatmaps/hists before the split and after)

Extract train/val indices

Now we have the set ready, we can pick out train/val indices as the modeling will expect them.

train_ids = db.query('train_all == True').index
val_ids = db.query('train_all == False').index

Class (im)balance

The spatial lag step might be introducing bias in the sample before modelling. We pick all the single class chips and split them randomly between train and validation. If spatially lagging has a systematic effect on some classes (e.g., some classes get dropped more often), this might introduce bias that will make our model scoress unreliable. To explore this case, we want to get an idea of:

  • [x] Overall proportion of train/val before (db_all single class) and after spatially lagging (db)

pandas.DataFrame(
    {
        'before_lag': db_all.query('single_class').value_counts(
            'train_all'
        ) * 100 / len(db_all.query('single_class')),
        'after_lag': db.value_counts('train_all') * 100 / len(db)
    }
).rename({True: 'Training', False: 'Validation'})
before_lag after_lag
train_all
Training 70.116082 71.35183
Validation 29.883918 28.64817
  • [x] Poportion by class in the set before spatially lagging and after –> Fig. Balance (b)

props = pandas.DataFrame(
    {
        'before_lag': pandas.value_counts(
            db_all.query('single_class')['label']
        ) * 100 / len(db_all.query('single_class')),
        'after_lag': pandas.value_counts(
            db['label']
        ) * 100 / len(db['label'])
    }
)

p = props.reindex(tools.class_names).plot.bar(figsize=(9, 3), title='Fig. Balance (b)')
p.set_xticklabels(p.get_xticklabels(), rotation = 45, ha="right");
../_images/sp_model_chip_probabilities_56_01.png

Single class models

Models to evaluate:

Algorithm / Features

Baseline

Baseline + \(WX\)

Baseline + \(WX\) + \(X\times WX\)

Max. Prob

mp_res

N/A

N/A

Logit ensemble

logite_baseline_res

logite_wx_res

Singular matrix

MNLogit

Does not converge

Does not converge

-

Random Forest

rf_baseline_res

rf_wx_res

N/A

XGBoost

hbgb_baseline_res

hbgb_wx_res

N/A

Evaluation workflow:

  1. Split train/validation randomly (e.g., 70/30)

  2. Fit model on train subset

  3. Obtain perf_ measures on validation subset

  4. Fill results.json file

Format:

{
    "meta_n_class": <int>,
    "meta_class_names": <list>,
    "meta_trainval_counts": <dict>
    "model_name": <str>,
    "model_params": <list>,
    "meta_runtime": <float>,
    "meta_preds_path": <str>,
    "perf_model_accuracy_train": <float>,
    "perf_within_class_accuracy_train": <list>,
    "perf_confusion_train": <list>,    
    "perf_model_accuracy_val": <float>,
    "perf_within_class_accuracy_val": <list>,
    "perf_confusion_val": <list>,
    "notes": <str>,
}
res_path = '/home/jovyan/data/spatial_signatures/chip_probs/model_outputs/'

Flush db to disk for availability later on:

db.to_parquet(os.path.join(res_path, 'db.pq'))
/tmp/ipykernel_1597682/473553071.py:1: UserWarning: this is an initial implementation of Parquet/Feather file support and associated metadata.  This is tracking version 0.1.0 of the metadata specification at https://github.com/geopandas/geo-arrow-spec

This metadata specification does not yet make stability promises.  We do not yet recommend using this in a production setting unless you are able to rewrite your Parquet/Feather files.

To further ignore this warning, you can do: 
import warnings; warnings.filterwarnings('ignore', message='.*initial implementation of Parquet.*')
  db.to_parquet(os.path.join(res_path, 'db.pq'))

Max. Probability

This is a baseline that selects as predicted category that which displays the highest probability as stored in probs. We can consider this the baseline upon which other models will improve.

mp_res = tools.run_maxprob(
    tools.class_names, 'label', db, train_ids, val_ids, 'baseline', res_path
)

Logit ensemble

Our approach here consists on fitting individual logistic regressions to predict each class against all other ones. With these models, we obtain a probability for each class, and pick that with the largest one as the predicted class.


NOTE (DA-B): this might not be right if different logits have different distribution of probabilities. Maybe replace the probability by the rank and pick the largest rank as the predicted class?


Two methods, logite_fit to fit each class model, and logite_predict to generate predicted classes from set of arbitrary features.

Baseline

from importlib import reload
reload(tools);
logite_baseline_res = tools.run_logite(
    tools.class_names, 'label', db, train_ids, val_ids, 'baseline', res_path
)
/opt/conda/lib/python3.9/site-packages/sklearn/preprocessing/_data.py:258: UserWarning: Numerical issues were encountered when scaling the data and might not be solved. The standard deviation of the data is probably very close to 0. 
  warnings.warn(
Optimization terminated successfully.
         Current function value: 0.680899
         Iterations 6
Optimization terminated successfully.
         Current function value: 0.653074
         Iterations 6
Optimization terminated successfully.
         Current function value: 0.685377
         Iterations 5
Optimization terminated successfully.
         Current function value: 0.692871
         Iterations 4
Optimization terminated successfully.
         Current function value: 0.692743
         Iterations 4
Optimization terminated successfully.
         Current function value: 0.682253
         Iterations 6
Optimization terminated successfully.
         Current function value: 0.692692
         Iterations 4
Optimization terminated successfully.
         Current function value: 0.691024
         Iterations 4
Optimization terminated successfully.
         Current function value: 0.692967
         Iterations 4
Optimization terminated successfully.
         Current function value: 0.693131
         Iterations 3
Optimization terminated successfully.
         Current function value: 0.693139
         Iterations 3
Optimization terminated successfully.
         Current function value: 0.689146
         Iterations 4
/opt/conda/lib/python3.9/site-packages/sklearn/preprocessing/_data.py:239: UserWarning: Numerical issues were encountered when centering the data and might not be solved. Dataset may contain too large values. You may need to prescale your features.
  warnings.warn(
/opt/conda/lib/python3.9/site-packages/sklearn/preprocessing/_data.py:258: UserWarning: Numerical issues were encountered when scaling the data and might not be solved. The standard deviation of the data is probably very close to 0. 
  warnings.warn(

Baseline + \(WX\)

logite_wx_res = tools.run_logite(
    tools.class_names + w_class_names, 
    'label', 
    db, 
    train_ids, 
    val_ids, 
    'baseline_wx', 
    res_path
)
Optimization terminated successfully.
         Current function value: 0.657119
         Iterations 6
Optimization terminated successfully.
         Current function value: 0.604344
         Iterations 6
Optimization terminated successfully.
         Current function value: 0.676905
         Iterations 5
Optimization terminated successfully.
         Current function value: 0.692461
         Iterations 4
Optimization terminated successfully.
         Current function value: 0.692309
         Iterations 4
Optimization terminated successfully.
         Current function value: 0.668075
         Iterations 6
Optimization terminated successfully.
         Current function value: 0.692096
         Iterations 4
Optimization terminated successfully.
         Current function value: 0.687466
         Iterations 4
Optimization terminated successfully.
         Current function value: 0.692777
         Iterations 4
Optimization terminated successfully.
         Current function value: 0.693107
         Iterations 3
Optimization terminated successfully.
         Current function value: 0.693127
         Iterations 3
Optimization terminated successfully.
         Current function value: 0.684861
         Iterations 4

Baseline + \(WX\) + \(X\times WX\)

logite_xwx_res = tools.run_logite(
    tools.class_names + w_class_names, 
    'label', 
    db, 
    train_ids, 
    val_ids, 
    'baseline_wx_xwx', 
    'model_results/',
    scale_x=False,
    log_x=True,
    interact=(tools.class_names, w_class_names)
)

Multinomial Logit

For this we rely on statsmodels implementation and fit it to the standardised log of the original probabilities to make convergence possible:

X_train = pandas.DataFrame(
    scale(np.log1p(db.loc[train_ids, class_names+w_class_names])), train_ids, class_names+w_class_names
)
t0 = time()
mlogit_mod = sm.MNLogit(db.loc[train_ids, 'label'], X_train)
mlogit_res = mlogit_mod.fit()
from importlib import reload
reload(tools);

Baseline

mlogit_res = tools.run_mlogit(
    tools.class_names, 'label', db, train_ids, val_ids, 'baseline', 'model_results/'
)
/opt/conda/lib/python3.9/site-packages/sklearn/preprocessing/_data.py:235: UserWarning: Numerical issues were encountered when centering the data and might not be solved. Dataset may contain too large values. You may need to prescale your features.
  warnings.warn(
/opt/conda/lib/python3.9/site-packages/sklearn/preprocessing/_data.py:254: UserWarning: Numerical issues were encountered when scaling the data and might not be solved. The standard deviation of the data is probably very close to 0. 
  warnings.warn(
/opt/conda/lib/python3.9/site-packages/statsmodels/discrete/discrete_model.py:2299: RuntimeWarning: overflow encountered in exp
  eXB = np.column_stack((np.ones(len(X)), np.exp(X)))
/opt/conda/lib/python3.9/site-packages/statsmodels/discrete/discrete_model.py:2300: RuntimeWarning: invalid value encountered in true_divide
  return eXB/eXB.sum(1)[:,None]
Optimization terminated successfully.
         Current function value: nan
         Iterations 5
/opt/conda/lib/python3.9/site-packages/sklearn/preprocessing/_data.py:235: UserWarning: Numerical issues were encountered when centering the data and might not be solved. Dataset may contain too large values. You may need to prescale your features.
  warnings.warn(
/opt/conda/lib/python3.9/site-packages/sklearn/preprocessing/_data.py:254: UserWarning: Numerical issues were encountered when scaling the data and might not be solved. The standard deviation of the data is probably very close to 0. 
  warnings.warn(
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
/tmp/ipykernel_109/2293739738.py in <module>
----> 1 mlogit_res = tools.run_mlogit(
      2     tools.class_names, 'label', db, train_ids, val_ids, 'baseline', 'model_results/'
      3 )

~/work/OneDrive - The University of Liverpool/AAA/research_liv/u-lvl/2020/ati_fellowship/code/chip_probs/chip_prob_modelling.py in run_mlogit(x_name, y_name, db, train_ids, val_ids, model_name_xtra, res_path)
    293     # Results
    294     model_name = build_model_name('mlogit', model_name_xtra)
--> 295     mlogit_res = build_perf(
    296         db.loc[train_ids, y_name],
    297         mlogit_pred_train,

~/work/OneDrive - The University of Liverpool/AAA/research_liv/u-lvl/2020/ati_fellowship/code/chip_probs/chip_prob_modelling.py in build_perf(y_true_train, y_pred_train, y_true_val, y_pred_val, class_names, meta)
    107         meta['meta_trainval_counts'].append([int(t_vc[c]), int(v_vc[c])])
    108     for (y_true, y_pred), subset in zip(splits, ['train', 'val']):
--> 109         meta[f'perf_model_accuracy_{subset}'] = accuracy_score(y_true, y_pred)
    110         meta[f'perf_confusion_{subset}'] = confusion_matrix(
    111             y_true, y_pred, labels=class_names

/opt/conda/lib/python3.9/site-packages/sklearn/metrics/_classification.py in accuracy_score(y_true, y_pred, normalize, sample_weight)
    203 
    204     # Compute accuracy for each possible representation
--> 205     y_type, y_true, y_pred = _check_targets(y_true, y_pred)
    206     check_consistent_length(y_true, y_pred, sample_weight)
    207     if y_type.startswith("multilabel"):

/opt/conda/lib/python3.9/site-packages/sklearn/metrics/_classification.py in _check_targets(y_true, y_pred)
     84     check_consistent_length(y_true, y_pred)
     85     type_true = type_of_target(y_true)
---> 86     type_pred = type_of_target(y_pred)
     87 
     88     y_type = {type_true, type_pred}

/opt/conda/lib/python3.9/site-packages/sklearn/utils/multiclass.py in type_of_target(y)
    322     if y.dtype.kind == "f" and np.any(y != y.astype(int)):
    323         # [.1, .2, 3] or [[.1, .2, 3]] or [[1., .2]] and not [1., 2., 3.]
--> 324         _assert_all_finite(y)
    325         return "continuous" + suffix
    326 

/opt/conda/lib/python3.9/site-packages/sklearn/utils/validation.py in _assert_all_finite(X, allow_nan, msg_dtype)
    112         ):
    113             type_err = "infinity" if allow_nan else "NaN, infinity"
--> 114             raise ValueError(
    115                 msg_err.format(
    116                     type_err, msg_dtype if msg_dtype is not None else X.dtype

ValueError: Input contains NaN, infinity or a value too large for dtype('float64').

Baseline + \(WX\)

mlogit_wx = tools.run_mlogit(
    tools.class_names + w_class_names, 
    'label', 
    db, 
    train_ids, 
    val_ids, 
    'baseline', 
    'model_results/'
)

Random Forest

rf_param_grid = {
    'n_estimators': [50, 100, 150, 200, 300],
    'max_depth': [5, 10, 20, 30, None],
    'max_features': [0.25, 0.5, 0.75, 1, 'sqrt', 'log2']
}

Baseline

  • Grid search

%%time 
grid = GridSearchCV(
    RandomForestClassifier(),
    rf_param_grid,
    scoring='accuracy',
    cv=5,
    n_jobs=-1
)
grid.fit(
    db.query('train_all')[tools.class_names], 
    db.query('train_all')['label']
)
pandas.DataFrame(grid.cv_results_).to_csv(
    os.path.join(res_path, 'RandomForestClassifier_baseline.csv')
)
print(grid.best_params_)
/opt/conda/lib/python3.9/site-packages/joblib/externals/loky/process_executor.py:702: UserWarning: A worker stopped while some jobs were given to the executor. This can be caused by a too short worker timeout or by a memory leak.
  warnings.warn(
{'max_depth': 5, 'max_features': 0.5, 'n_estimators': 100}
CPU times: user 8.91 s, sys: 662 ms, total: 9.57 s
Wall time: 23min 52s
  • Model fitting

try:
    rf_params = grid.best_params_
except:
    # Hardcoded values based on grid search results
    rf_params = {
        'n_estimators': 100,
        'max_depth': 5,
        'max_features': 0.5
    }
rf_baseline_res = tools.run_tree(
    tools.class_names, 
    'label', 
    db, 
    train_ids, 
    val_ids, 
    RandomForestClassifier(**rf_params),
    'baseline', 
    res_path
)

Baseline + \(WX\)

  • Grid search

%%time
grid = GridSearchCV(
    RandomForestClassifier(),
    rf_param_grid,
    scoring='accuracy',
    cv=5,
    n_jobs=-1
)
grid.fit(
    db.query('train_all')[tools.class_names + w_class_names], 
    db.query('train_all')['label']
)
pandas.DataFrame(grid.cv_results_).to_csv(
    os.path.join(res_path, 'RandomForestClassifier_baseline_wx.csv')
)
print(grid.best_params_)
/opt/conda/lib/python3.9/site-packages/joblib/externals/loky/process_executor.py:702: UserWarning: A worker stopped while some jobs were given to the executor. This can be caused by a too short worker timeout or by a memory leak.
  warnings.warn(
{'max_depth': 10, 'max_features': 'sqrt', 'n_estimators': 150}
CPU times: user 14.8 s, sys: 717 ms, total: 15.6 s
Wall time: 38min 45s
  • Model fitting

try:
    rf_wx_params = grid.best_params_
except:
    # Hardcoded values based on grid search results
    rf_wx_params = {
        'n_estimators': 150,
        'max_depth': 10,
        'max_features': 'sqrt'
    }
rf_wx_res = tools.run_tree(
    tools.class_names + w_class_names, 
    'label', 
    db, 
    train_ids, 
    val_ids, 
    RandomForestClassifier(**rf_wx_params),
    'baseline_wx', 
    res_path
)

Histogram-Based Gradient Boosting

See documentation for the meaning and approaches to the hyper-parameters.

hbgb_param_grid = {
    'max_iter': [50],
    'learning_rate': [0.01, 0.05],
    'max_depth': [30, None],
}
hbgb_param_grid = {
    'max_iter': [50, 100, 150, 200, 300],
    'learning_rate': [0.01, 0.05] + np.linspace(0, 1, 11)[1:].tolist(),
    'max_depth': [5, 10, 20, 30, None],
}

Baseline

  • Grid search:

%%time
grid = GridSearchCV(
    HistGradientBoostingClassifier(),
    hbgb_param_grid,
    scoring='accuracy',
    cv=5,
    n_jobs=-1
)
grid.fit(
    db.query('train_all')[tools.class_names], db.query('train_all')['label']
)
pandas.DataFrame(grid.cv_results_).to_csv(
    os.path.join(res_path, 'HistGradientBoostingClassifier_baseline.csv')
)
print(grid.best_params_)
{'learning_rate': 0.01, 'max_depth': 5, 'max_iter': 150}
CPU times: user 3min 42s, sys: 3.91 s, total: 3min 46s
Wall time: 6min 1s
  • Model fitting

hbgb_baseline_res = tools.run_tree(
    tools.class_names, 
    'label', 
    db, 
    train_ids, 
    val_ids, 
    HistGradientBoostingClassifier(**grid.best_params_),
    'baseline', 
    res_path
)

Baseline + \(WX\)

  • Grid search:

%%time
grid = GridSearchCV(
    HistGradientBoostingClassifier(),
    hbgb_param_grid,
    scoring='accuracy',
    cv=5,
    n_jobs=-1
)
grid.fit(
    db.query('train_all')[tools.class_names + w_class_names], 
    db.query('train_all')['label']
)
pandas.DataFrame(grid.cv_results_).to_csv(
    os.path.join(res_path, 'HistGradientBoostingClassifier_baseline_wx.csv')
)
print(grid.best_params_)
{'learning_rate': 0.01, 'max_depth': 5, 'max_iter': 150}
CPU times: user 4min 50s, sys: 4.64 s, total: 4min 55s
Wall time: 9min 28s
  • Model fitting

hbgb_wx_res = tools.run_tree(
    tools.class_names + w_class_names, 
    'label', 
    db, 
    train_ids, 
    val_ids, 
    HistGradientBoostingClassifier(max_iter=100),
    'baseline_wx', 
    res_path
)

NOTE - As of April 21st’22, standard gradient-boosted trees are deprecated due to their long training time and similar performance with histogram-based ones.

Gradient Tree Boosting

See documentation for the meaning and approaches to the hyper-parameters (mostly n_estimators and learning_rate).

Baseline

gbt_baseline_res = run_tree(
    class_names, 
    'label', 
    db, 
    train_ids, 
    val_ids, 
    GradientBoostingClassifier(n_estimators=50, learning_rate=1.),
    'baseline', 
    'model_results/'
)

Baseline + \(WX\)

gbt_baseline_res = run_tree(
    class_names + w_class_names, 
    'label', 
    db, 
    train_ids, 
    val_ids, 
    GradientBoostingClassifier(n_estimators=50, learning_rate=1.),
    'baseline_wx', 
    'model_results/'
)