绘制(纬度,纬度)的二维 numpy 数组的直方图,以确定 DBSCAN 的正确值
Plotting a histogram of 2D numpyArray of (latitude, latitude), in order to determine the proper values for DBSCAN
我正在尝试将 DBSCAN 应用于 (Lan,Lat) 的数据集。该算法对参数非常敏感; EPS 和 MinPts。
我想查看数据的直方图,以确定正确的值。不幸的是,Matplotlib Hist() 仅采用 1D 数组。
将二维矩阵作为参数传递,Hist() 将每一列视为单独的输入。
散点图和直方图:
有没有人有办法解决这个问题,
你可以使用 numpy.histogram2d
:
import numpy as np
np.random.seed(2016)
N = 100
arr = np.random.random((N, 2))
xedges = np.linspace(0, 1, 10)
yedges = np.linspace(0, 1, 10)
lat = arr[:, 0]
lng = arr[:, 1]
hist, xedges, yedges = np.histogram2d(lat, lng, (xedges, yedges))
print(hist)
产量
[[ 0. 0. 5. 0. 3. 0. 0. 0. 3.]
[ 0. 3. 0. 3. 0. 0. 4. 0. 2.]
[ 2. 2. 1. 1. 1. 1. 3. 0. 1.]
[ 2. 1. 0. 3. 1. 2. 1. 1. 3.]
[ 3. 0. 3. 2. 0. 1. 0. 2. 0.]
[ 3. 2. 3. 1. 1. 2. 1. 1. 0.]
[ 2. 3. 0. 1. 0. 1. 3. 0. 0.]
[ 1. 1. 1. 1. 2. 0. 2. 1. 1.]
[ 0. 1. 1. 0. 1. 1. 2. 0. 0.]]
或者可视化直方图:
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.imshow(hist)
plt.show()
如果您遵循 DBSCAN 文章,您只需要每个对象的 4-nearest-neighbor 距离,而不是所有成对距离。即,一维数组。
他们没有绘制直方图,而是对值进行排序,并尝试在此图中选择拐点。
- 找到每个对象的4个最近邻
- 在一个数组中收集所有 4NN 距离
- 按降序排列此数组
- 绘制结果曲线
- 寻找膝盖,通常最好在 x 轴的 5%-10% 左右(因此 95%-90% 的对象是核心点)。
有关详细信息,请参阅原始 DBSCAN 出版物!
我正在尝试将 DBSCAN 应用于 (Lan,Lat) 的数据集。该算法对参数非常敏感; EPS 和 MinPts。
我想查看数据的直方图,以确定正确的值。不幸的是,Matplotlib Hist() 仅采用 1D 数组。
将二维矩阵作为参数传递,Hist() 将每一列视为单独的输入。
散点图和直方图:
有没有人有办法解决这个问题,
你可以使用 numpy.histogram2d
:
import numpy as np
np.random.seed(2016)
N = 100
arr = np.random.random((N, 2))
xedges = np.linspace(0, 1, 10)
yedges = np.linspace(0, 1, 10)
lat = arr[:, 0]
lng = arr[:, 1]
hist, xedges, yedges = np.histogram2d(lat, lng, (xedges, yedges))
print(hist)
产量
[[ 0. 0. 5. 0. 3. 0. 0. 0. 3.]
[ 0. 3. 0. 3. 0. 0. 4. 0. 2.]
[ 2. 2. 1. 1. 1. 1. 3. 0. 1.]
[ 2. 1. 0. 3. 1. 2. 1. 1. 3.]
[ 3. 0. 3. 2. 0. 1. 0. 2. 0.]
[ 3. 2. 3. 1. 1. 2. 1. 1. 0.]
[ 2. 3. 0. 1. 0. 1. 3. 0. 0.]
[ 1. 1. 1. 1. 2. 0. 2. 1. 1.]
[ 0. 1. 1. 0. 1. 1. 2. 0. 0.]]
或者可视化直方图:
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.imshow(hist)
plt.show()
如果您遵循 DBSCAN 文章,您只需要每个对象的 4-nearest-neighbor 距离,而不是所有成对距离。即,一维数组。
他们没有绘制直方图,而是对值进行排序,并尝试在此图中选择拐点。
- 找到每个对象的4个最近邻
- 在一个数组中收集所有 4NN 距离
- 按降序排列此数组
- 绘制结果曲线
- 寻找膝盖,通常最好在 x 轴的 5%-10% 左右(因此 95%-90% 的对象是核心点)。
有关详细信息,请参阅原始 DBSCAN 出版物!