1 确认聚类中心

对西瓜数据集的密度属性和含糖量属性分别进行3类聚,从而得到两个属性模糊子集的判断临界点。

"""属性数据进行聚类"""
    # 读取原始数据集
    X = readDataSet().data
    print(X)

    # 密度数据聚类
    x1 = [n[0] for n in X]
    y1 = np.array(x1).reshape(-1, 1)
    km1 = KMeans(n_clusters=3)
    km1.fit(y1)
    k1 = sorted(km1.cluster_centers_)
    print(k1)

    # 含糖量数据聚类
    x2 = [n[1] for n in X]
    y2 = np.array(x2).reshape(-1, 1)
    km2 = KMeans(n_clusters=3)
    km2.fit(y2)
    k2 = sorted(km2.cluster_centers_)
    print(k2)

2 一维数组的聚类

这里参照的是这篇博客:聚类实战:一维数组数据聚类
使用的是方法一:采用K-Means对一维数据聚类:

	x1 = [n[0] for n in X] # X 是之前读取自定义数据集返回来的data,即[[密度1,含糖量1],[密度2,含糖量2],...]
    y1 = np.array(x1).reshape(-1, 1) # 这个格式转换我也不太理解,但是如果不这样的话,就类聚不成功了。
    km1 = KMeans(n_clusters=3)
    km1.fit(y1)
    k1 = sorted(km1.cluster_centers_) # 对3个类聚中心进行从低到高的排序
    print(k1)

3 类聚加模糊化处理完整代码

类聚加模糊化处理完整代码:

def main():
    """属性数据进行聚类"""
    # 读取原始数据集
    X = readDataSet().data
    print(X)

    # 密度数据聚类
    x1 = [n[0] for n in X]
    y1 = np.array(x1).reshape(-1, 1)
    km1 = KMeans(n_clusters=3)
    km1.fit(y1)
    k1 = sorted(km1.cluster_centers_)
    print(k1)

    # 含糖量数据聚类
    x2 = [n[1] for n in X]
    y2 = np.array(x2).reshape(-1, 1)
    km2 = KMeans(n_clusters=3)
    km2.fit(y2)
    k2 = sorted(km2.cluster_centers_)
    print(k2)

    preDataSet(k1, k2)  # 数据模糊化

运行结果:
打印信息
模糊化以后的数据集

4 问题记录

1、想要将标签列通过程序写入模糊数据表中,但是很多次都无果,以前都是复制粘贴的,虽然手动复制粘贴也没有什么错,就是看着不太聪明的样子。再看看有没有办法解决这个问题,如果不能的话先不在这里耗费时间了。

2、K-Means好像只能对列向量进行处理?

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐