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:
[
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.[
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.[
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
);
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");
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:
When we include the spatial lag, this becomes:
The idea with interactions is to model the probability expectation as:
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");
Single class models¶
Models to evaluate:
Algorithm / Features |
Baseline |
Baseline + \(WX\) |
Baseline + \(WX\) + \(X\times WX\) |
---|---|---|---|
Max. Prob |
|
N/A |
N/A |
Logit ensemble |
|
|
Singular matrix |
MNLogit |
Does not converge |
Does not converge |
- |
Random Forest |
|
|
N/A |
XGBoost |
|
|
N/A |
Evaluation workflow:
Split train/validation randomly (e.g., 70/30)
Fit model on train subset
Obtain
perf_
measures on validation subsetFill
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/'
)