从初始lis中用预定义的平均值形成子列表

2024-04-19 07:01:24 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我们有一个列表list = [1,2,3,4,5,6,7,8,9,10,11,12],一组期望的平均值a=[2,5,8,11],并且隐式地有4个组,我们想要形成这样的组,每个组的值分别为2、5、8和11。这本质上是一个排序问题吗?有没有一种方法可以在不检查子列表的每个可能组合的情况下执行此操作?你知道吗

如果上面的版本实际上不易处理,那么假设目标是通过依次遍历上面的列表来形成子列表。这如何让事情变得更容易?你知道吗


Tags: 方法版本目标列表排序情况事情list
1条回答
网友
1楼 · 发布于 2024-04-19 07:01:24

考虑到这个问题,正如评论中所建议的,k-means似乎是一个合适的算法选择。你知道吗

您可以实现自己版本的k-means,也可以从^{}中提供的实现开始,这是一个提供机器学习技术的包,特别是^{}。你知道吗

从示例和绘图开始使用scikit-learn的可能实现是:

import matplotlib.pyplot as plt
import numpy as np
import sklearn.cluster

list1 = np.arange(1,13)
list1_y = np.array([1]*12)
a = np.array([2,5,8,11])
kmeans = sklearn.cluster.KMeans(n_clusters=a.shape[0],n_init=1,init=a.reshape((a.shape[0],1)))
kmeans.fit(list1.reshape((list1.shape[0],1)))
labels = kmeans.labels_
plt.scatter(list1, list1_y, c=labels.astype(np.float))
plt.show()

发现4个聚类的k均值结果如下图所示(每个数据点都有一个颜色,标识它们所属的聚类):

enter image description here

为了理解sklearn的工作原理,您可以更深入地了解一些方面:

  • KMeans的初始化。我只包括了相关的参数,即来自a的集群数量、它应该尝试执行初始化的次数,以及来自a的初始集群的方法。您还可以设置其他参数。你知道吗
  • 调用fit函数来查找list1中每个数据的labels。你知道吗
  • 用于容纳sklearn的数据集的reshape。你知道吗

有关k-means的更多信息,请开始查看related wikipedia page。你知道吗

相关问题 更多 >