gpt4 book ai didi

machine-learning - 如何在Python中执行肘法?

转载 作者:行者123 更新时间:2023-11-30 09:04:37 27 4
gpt4 key购买 nike

我想使用肘部方法检查 k 的最佳数量。我没有使用 scikit-learn 库。我从头开始编码了 k 均值,现在我很难弄清楚如何在 python 中编码肘方法。我完全是个初学者。

这是我的 k-means 代码:


def cluster_init(array, k):

initial_assgnm = np.append(np.arange(k), np.random.randint(0, k, size=(len(array))))[:len(array)]
np.random.shuffle(initial_assgnm)
zero_arr = np.zeros((len(initial_assgnm), 1))

for indx, cluster_assgnm in enumerate(initial_assgnm):
zero_arr[indx] = cluster_assgnm
upd_array = np.append(array, zero_arr, axis=1)

return upd_array


def kmeans(array, k):

cluster_array = cluster_init(array, k)


while True:
unique_clusters = np.unique(cluster_array[:, -1])

centroid_dictonary = {}
for cluster in unique_clusters:
centroid_dictonary[cluster] = np.mean(cluster_array[np.where(cluster_array[:, -1] == cluster)][:, :-1], axis=0)


start_array = np.copy(cluster_array)


for row in range(len(cluster_array)):
cluster_array[row, -1] = unique_clusters[np.argmin(
[np.linalg.norm(cluster_array[row, :-1] - centroid_dictonary.get(cluster)) for cluster in unique_clusters])]

if np.array_equal(cluster_array, start_array):
break

return centroid_dictonary

这是我尝试过的肘部方法:

cost = []
K= range(1,239)
for k in K :
KM = kmeans(x,k)
print(k)
KM.fit(x)
cost.append(KM.inertia_)

但我收到以下错误

KM.fit(x)

AttributeError:“dict”对象没有属性“fit”

最佳答案

如果您想从头开始计算弯 header value ,则需要计算当前聚类分配的惯性。为此,您可以计算粒子惯性的总和。数据点的粒子惯性是从其当前位置到最近中心的距离。如果你有一个函数可以为你计算这个值(在 scikit-learn 中,这个函数对应于pairwise_distances_argmin_min),你可以这样做

labels, mindist = pairwise_distances_argmin_min(
X=X, Y=centers, metric='euclidean', metric_kwargs={'squared': True})
inertia = mindist.sum()

如果你真的想编写这个函数,你要做的就是循环遍历 X 中的每一行 x,找到 dist(x,y) 的 Y 中所有 y 的最小值,这就是 x 的惯性。这种计算粒子惯性的简单方法是 O(nk),因此您可以考虑使用库函数。

关于machine-learning - 如何在Python中执行肘法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55753966/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com