def getKernelDensityEstimation(nodes, metric='euclidean', metric_params=None, bbox=None, bandwidth=0.002, optimizeBandwidth=False, bwmin=0.0001, bwmax=0.01, crossValidation=20):
lon = []
lat = []
for nlon,nlat in nodes:
lon.append(nlon)
lat.append(nlat)
lon = np.array(lon)
lat = np.array(lat)
if bbox is None:
xmin, xmax = min(lon), max(lon)
ymin, ymax = min(lat), max(lat)
bbox = [xmin, xmax, ymin, ymax]
else:
xmin, ymin, xmax, ymax = bbox[0],bbox[1],bbox[2],bbox[3]
bbox = [xmin, xmax, ymin, ymax]
x, y = np.mgrid[xmin:xmax:100j, ymin:ymax:100j]
positions = np.vstack([x.ravel(), y.ravel()])
values = np.vstack([lon, lat])
if optimizeBandwidth:
grid = GridSearchCV(KernelDensity(kernel='gaussian', metric=metric, metric_params=metric_params, algorithm='ball_tree'), {'bandwidth': np.linspace(bwmin, bwmax, 30)}, cv=crossValidation) # 20-fold cross-validation
grid.fit(zip(*values))
bandwidth = grid.best_params_['bandwidth']
kernel = grid.best_estimator_
else:
kernel = KernelDensity(kernel='gaussian', metric=metric, metric_params=metric_params, algorithm='ball_tree', bandwidth=bandwidth)
kernel.fit(zip(*values))
return kernel, positions, x, y, bbox, bandwidth
testGetKernelDensityEstimation.py 文件源码
python
阅读 34
收藏 0
点赞 0
评论 0
评论列表
文章目录