近日有项目需求,要对一堆数据进行聚类,并依据聚类结果对原始数据进行自学习,生成类的规则,并以此检测新数据是否符合之前旧数据的模式。简单看来,找到个合适的聚类算法聚个类,然后对数据进行统计融合就可以了,可是有个特殊的问题在于:一般聚类算法中,一条数据是属于一个确定的类别的,但依照本项目的特定需求,一条数据可能是属于多个类的。
对此,一种思路是不直接对数据进行聚类,而是1. 对数据进行特征提取, 2. 依照数据共享的特征多少进行数据类别判定,将某数据划分到一个或者多个类。特征提取可以采用非负矩阵分解,算法思路不再赘述,上代码:
from numpy import *
import random
# 属性矩阵 假定理想分组为 (012)(345)(67) 或者(01267)(34567)
l1 = [
[5,5,0,0],
[6,6,0,0],
[7,6,1,0],
[0,1,9,9],
[1,1,9,9],
[0,0,5,5],
[9,9,9,9],
[4,5,6,7],
]
# 单位化
def Unit(aa):
return_l = []
for line in aa:
line_2 = [ x**2 for x in line]
v = r