如何找到一维阵列的弯头?

问题描述 投票:-1回答:1

我有下面几列的数据框;日期和湿度:

data = {'Date':['09:00:00', '10:00:00', '10:00:00', '12:00:00', '13:00:00', '14:00:00', '15:00:00', '16:00:00'], 'Humidity':[60, 71, 59, 18, 50, 21, 119, 78]} 

df = pd.DataFrame(data)  

    Date    Humidity
0   09:00:00    60
1   10:00:00    71
2   10:00:00    59
3   12:00:00    18
4   13:00:00    50
5   14:00:00    21
6   15:00:00    119
7   16:00:00    78

这是我拥有的数据框的一小部分。我想使用DBSCAN在“湿度”中找到异常值。为了获得最佳的eps参数值,我决定选择弯头。到目前为止,我了解到弯头点使用的是群集内各点之间的平均距离。但问题是在我的情况下,我仅使用一维数组,即湿度。在这种情况下,我必须在哪两个点之间寻找距离?在湿度和湿度之间?

肘点也可以算作kmeans中的簇数。所以我用下面的代码找到eps。但是在kmeans.fit(df [[''Humidity','Humidity']])中,我使用的是湿度与湿度


from sklearn.cluster import KMeans
new_list = []
for i in range(1, 6):
    kmeans = KMeans(n_clusters = i, init = 'k-means++', random_state = 42)
    kmeans.fit(df[['Humidity','Humidity']])
    new_list.append(kmeans.inertia_)
plt.plot(range(1, 6), new_list)
plt.grid(True)
plt.show()

它给了我以下情节:

enter image description here

这是否意味着eps的最优值为3?如何使用一维阵列查找eps?

python cluster-analysis k-means dbscan epsilon
1个回答
0
投票
不要基于对功能的理解不多而合用。仅仅因为两个事物具有相似的名称(“弯头”)并不意味着它们做同样的事情。 k均值的弯头方法对于选择k均值的参数k来说是一种非常糟糕的启发式方法,它与DBSCAN的epsilon参数没有任何关系,也可以通过在k均值中寻找一个弯头来确定。方式非常不同(到minpts-1最近邻居的距离排序)。

都不是用于选择一维数据中的异常值的合适方法。相反,请使用经典的离群值检测方法,例如z分数。

© www.soinside.com 2019 - 2024. All rights reserved.