快乐的鱼儿学敲码 2018-06-19
目的
这是一次通过执行k均值聚类来检测网络入侵的尝试
这个过程需要五步。我们要从没有聚类的非标记数据开始。算法创建了这个非标记数据的聚类。假设你想要计算错误和梯度下降,但是你没有这样做,在这种情况下你能做什么?这就是无监督学习开始发挥作用原因。
让我们开始吧!k是我们想要的聚类数目。然后我们将k的质心放在随机位置上。
它是如何工作的 ?
这个算法是一个迭代过程。本文将在图像的帮助下逐步解释它。
考虑下面的一组数据。我们需要将这些数据分成两组。
步骤1:算法随机选择两个质心c1和c2(有时,任何两个数据都作为质心)。
步骤2:它计算从每个点到两个质心的距离。如果测试数据更接近c1,那么该数据标记为'0'。如果它更接近c2,则标记为'1'(如果有更多的质心,标记为'2','3'等)。在我们的例子中,我们将用红色标记所有'0','1 '用蓝色标记。所以我们在进行上面的操作之后可以得到以下图像:
步骤3: 接下来,我们分别计算所有蓝色点和红色点的平均值,这个值将是我们的新质心。那就是c1和c2转移后的新质心。(请记住,所显示的图像不是真正的值,也不是真正的比例尺,它仅用于演示)。再次,执行步骤2,新质心和标记数据为'0'和'1'。
所以我们得到如下结果:
现在,迭代步骤2和步骤3,直到两个质心停止移动到固定点。(或者根据考验我们提供的标准,例如迭代的最大次数,或者达到特定的精度等等,它都可能会停止。)这些点是测试数据与它们对应的质心之间的距离的最小总和。
最终结果几乎如下所示:
这只是对K均值聚类的直观理解,更多解释。如果我们已经知道它可以被分为三种类型,那么k = 3。但是如果我们不知道有多少分类可能是与数据,所以我们使用肘形方法。肘形方法的概念是运行k数据集后的k值的范围(例如,在上面的例子中k从1到10),并且计算平方误差总和(SSE)。就像这个:
上述k均值聚类的算法,因为我们需要建立我们的算法,所以它将接收参数:
我们应该什么时候使用它?
但是你的数据是数字。它不适用于分类功能。我们要计算实数之间的距离!
如果你没有数据标签
K均值聚类是最简单的。实施运行中,你只需选择"k"并多次运行即可。
当你有多元数据时,K均值聚类和其他聚类算法会"发光"。它们将与一维数据共同"工作"。
当你想了解你的空间中实际存在多少个聚类时,这是很有用的。
其他例子
https://github.com/georgymh/ml-fraud-detection(欺诈检测)
https://github.com/Datamine/MNIST-K-Means-Clustering/blob/master/Kmeans.ipynb(MNIST无标签(最后))
k聚类算法通过需要上述步骤,因为我们需要构建我们的算法,所以它将接收为参数:
· K:群集数量(必需)
· epsilon:在停止条件下使用的最小错误(可选,默认== 0)
· 距离:该方法用于计算距离(可选defalut == 0)并返回:
· 质心
· 质心的演变历史
· 每个实例的成员向量具有其各自的质心