要在 Python 中实现 k-means 时间序列异常数据检测,可以按照以下步骤进行操作:\n\n1. 导入所需的库:\n\npython\nimport numpy as np\nfrom sklearn.cluster import KMeans\n\n\n2. 准备数据:\n假设我们有一个时间序列数据集,其中每个时间点都有一个数值。我们将数据存储在一个 numpy 数组中。\n\npython\ndata = np.array([1, 2, 1, 2, 1, 2, 100, 2, 1, 2, 1, 2, 1, 2])\n\n\n3. 数据预处理:\n由于 k-means 算法需要将数据转换为二维数组,我们需要对数据进行一些预处理。我们将每个时间点的数值作为一个特征,将时间点作为另一个特征。\n\npython\ntimestamps = np.arange(len(data)).reshape(-1, 1)\nfeatures = data.reshape(-1, 1)\nX = np.hstack((timestamps, features))\n\n\n4. 运行 k-means 算法:\n我们可以使用 sklearn 库中的 KMeans 类来运行 k-means 算法。\n\npython\nkmeans = KMeans(n_clusters=2, random_state=0).fit(X)\n\n\n5. 计算异常数据的阈值:\n为了找到异常数据,我们可以计算每个数据点到其所属簇的质心的距离,并将距离排序。然后可以选择距离最大的一部分数据作为异常数据。\n\npython\ndistances = kmeans.transform(X) # 计算每个点到每个簇质心的距离\nsorted_distances = np.sort(distances[:, 0]) # 按照距离排序\nthreshold = sorted_distances[-int(len(data) * 0.01)] # 计算阈值\n\n\n6. 标记异常数据:\n将距离大于阈值的数据点标记为异常数据。\n\npython\nanomalies = X[distances[:, 0] > threshold]\n\n\n完整代码如下:\n\npython\nimport numpy as np\nfrom sklearn.cluster import KMeans\n\ndata = np.array([1, 2, 1, 2, 1, 2, 100, 2, 1, 2, 1, 2, 1, 2])\n\ntimestamps = np.arange(len(data)).reshape(-1, 1)\nfeatures = data.reshape(-1, 1)\nX = np.hstack((timestamps, features))\n\nkmeans = KMeans(n_clusters=2, random_state=0).fit(X)\n\ndistances = kmeans.transform(X)\nsorted_distances = np.sort(distances[:, 0])\nthreshold = sorted_distances[-int(len(data) * 0.01)]\n\nanomalies = X[distances[:, 0] > threshold]\n\nprint(anomalies)\n\n\n这将打印出所有的异常数据点。

Python K-Means 时间序列异常值检测 (异常值占总数 1%)

原文地址: https://www.cveoy.top/t/topic/pPaw 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录