通过聚类分析能源数据集
Analysis of energy dataset by clustering
所以我对机器学习相当陌生,我正在尝试创建一个 python 脚本来分析计算机的能量数据集。
该脚本最终应确定计算机的不同状态(如空闲、待机、工作等...)以及这些状态平均消耗的能量。
我想知道是否可以通过一些聚类方法(如 k-means 或 DBSCAN)来完成此任务。
我对 scikit learn 中的一些聚类方法进行了一些修改,但到目前为止的结果并没有我预期的那么好。
我研究了很多关于聚类方法的方法,但我一直找不到与我的相似的场景。
所以我的问题是它是否值得麻烦,如果是的话,哪种聚类方法(或整体机器学习算法)最适合该任务?或者有更好的方法吗?
能量数据集只是一列 table,一个单元格是几天内每秒一个能量值。
The energy dataset is just a single column table with one cell being one energy value per second of a few days.
您将无法对此数据集应用监督学习,因为您的数据集没有标签(没有给定能量值的已知状态)。这意味着 SVM、决策树等模型在给定您的数据集的情况下不可行。
您拥有的是一个具有单个变量输出的时间序列。据我了解,您的目标是确定是否存在不同的能量状态,以及这些状态的平均值是多少。
我认为使用 matplotlib 或 seaborn 之类的工具来绘制时间序列会非常有帮助。绘制数据后,您可以更好地了解您的假设是否合理以及您可能希望如何进一步解决问题。您可以通过绘制时间序列并观察有四种不同的能量状态(例如空闲、待机、工作等)来解决您的问题,避免任何复杂的统计技术、机器学习等。
要回答您的问题,您可以原则上对一维数据使用k-means。但是,这可能不被推荐,因为这些技术通常用于多维数据。
我建议您查看 Jenks natural breaks optimization or kernel density optimization. Similar questions to yours can be found here and here,应该可以帮助您入门。
不要忽视时间。
首先,如果您的信号有噪声,时间平滑可能会有所帮助。
其次,您需要先执行一些特征提取。例如,通过使用 segmentation 将您的时间序列分割成不同的状态。然后您可以尝试对这些状态进行聚类,但我不相信聚类在这里适用。您可能会想要使用直方图或密度图。这是一维数据 - 您可以将其可视化,然后手动选择阈值,而不是希望某些自动化技术可能起作用(因为它可能不会......)
所以我对机器学习相当陌生,我正在尝试创建一个 python 脚本来分析计算机的能量数据集。 该脚本最终应确定计算机的不同状态(如空闲、待机、工作等...)以及这些状态平均消耗的能量。
我想知道是否可以通过一些聚类方法(如 k-means 或 DBSCAN)来完成此任务。
我对 scikit learn 中的一些聚类方法进行了一些修改,但到目前为止的结果并没有我预期的那么好。 我研究了很多关于聚类方法的方法,但我一直找不到与我的相似的场景。
所以我的问题是它是否值得麻烦,如果是的话,哪种聚类方法(或整体机器学习算法)最适合该任务?或者有更好的方法吗?
能量数据集只是一列 table,一个单元格是几天内每秒一个能量值。
The energy dataset is just a single column table with one cell being one energy value per second of a few days.
您将无法对此数据集应用监督学习,因为您的数据集没有标签(没有给定能量值的已知状态)。这意味着 SVM、决策树等模型在给定您的数据集的情况下不可行。
您拥有的是一个具有单个变量输出的时间序列。据我了解,您的目标是确定是否存在不同的能量状态,以及这些状态的平均值是多少。
我认为使用 matplotlib 或 seaborn 之类的工具来绘制时间序列会非常有帮助。绘制数据后,您可以更好地了解您的假设是否合理以及您可能希望如何进一步解决问题。您可以通过绘制时间序列并观察有四种不同的能量状态(例如空闲、待机、工作等)来解决您的问题,避免任何复杂的统计技术、机器学习等。
要回答您的问题,您可以原则上对一维数据使用k-means。但是,这可能不被推荐,因为这些技术通常用于多维数据。
我建议您查看 Jenks natural breaks optimization or kernel density optimization. Similar questions to yours can be found here and here,应该可以帮助您入门。
不要忽视时间。
首先,如果您的信号有噪声,时间平滑可能会有所帮助。
其次,您需要先执行一些特征提取。例如,通过使用 segmentation 将您的时间序列分割成不同的状态。然后您可以尝试对这些状态进行聚类,但我不相信聚类在这里适用。您可能会想要使用直方图或密度图。这是一维数据 - 您可以将其可视化,然后手动选择阈值,而不是希望某些自动化技术可能起作用(因为它可能不会......)