【问题标题】:Dividing a dataset into three subsets with similar development of mean将数据集分成三个均值发展相似的子集
【发布时间】:2022-12-07 05:44:09
【问题描述】:

我有一组简单的数据,显示每个数据点随时间的特定分数。这个数据集看起来有点像这样:

id day 1 day 2 day 3 day 4
0 0 0.5 1 3
1 0 0.25 0.75 2.25
2 0 0 0.5 2.75
3 0 0.5 1 2
... ... ... ... ...

目标是将该数据集分成 3 组,每组在任何给定日期具有相似的平均值.我知道这是一个 NP 最小化问题,找到最优解是低效的。但是近似解绝对没问题。

随机选取数据点并将它们放入其中一组显示了以下结果:

其中 global-mean 是未拆分数据的平均值,group1-3 是拆分组。 这看起来还不错,但显然还有改进的余地,因为这只是随机拼凑的。

我思考这个问题的时间越长,它似乎变得越复杂。

我目前正在使用 Python 3.10 来尝试解决它。

有谁知道如何解决这个问题?它不一定是一个优雅的解决方案。蛮力也应该产生足够的结果,对吧?

预先感谢您的宝贵时间。

【问题讨论】:

  • 您是否正在寻找实施的完整算法?尝试看一下 K-Mean 聚类并返回一个最小的可重现代码,这样如果有任何问题我们可以帮助您 :)
  • 根据您的需要以及有多少个 ID,简单的随机化可能非常接近您想要的。您可以通过“最小化”方法来改进它,您可以随机选择一个 ID 1 的组,然后将每个后续 ID 添加到所选的组中,从而使组之间的差异最小化(通过某些标准)。

标签: python r dataset subset similarity


【解决方案1】:
import matplotlib.pyplot as plt

# The dataset
data = [
    [0, 0.5, 1, 3],
    [0, 0.25, 0.75, 2.25],
    [0, 0, 0.5, 2.75],
    [0, 0.5, 1, 2],
    ...
]

# Create a KMeans object with 3 clusters
kmeans = KMeans(n_clusters=3)

# Fit the data to the KMeans object
kmeans.fit(data)

# Predict the cluster labels for each data point
clusters = kmeans.predict(data)

# Create a scatter plot of the data points, colored by their cluster labels
plt.scatter(data[:,0], data[:,1], c=clusters, cmap="viridis")
plt.show()

【讨论】:

    猜你喜欢
    • 2021-07-09
    • 2022-07-20
    • 2017-06-12
    • 1970-01-01
    • 2017-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多