• 大小: 6KB
    文件类型: .rar
    金币: 2
    下载: 1 次
    发布日期: 2021-05-12
  • 语言: Python
  • 标签: 模糊聚类  

资源简介

该资源包括两部分代码,都是python实现,使用两种方式实现了模糊聚类,使用的数据集也在压缩包内,配置好环境可直接运行。

资源截图

代码片段和文件信息

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# author:1111
# datetime:2019/2/22 11:17
# software: PyCharm

from pylab import *
from numpy import *
import copy
import random
import  time
import math
import matplotlib.pyplot as plt

import matplotlib.animation as animation
import decimal
#



#初始化隶属度矩阵U
global MAX
MAX = 10000.0
#用于结束条件
global Epsilon
Epsilon = 0.00000001

def import_data(file):
    “““
    格式化数据,前四列为data最后一列为cluster_location
    “““
    data = []
    cluster_location = []
    with open(str(file)‘r‘) as f :
        for line in f:
            current = line.strip().split(““)
            current_dummy = []
            #只读取数据库中除去最后一列之外的其他数据
            for j in range(0len(current)-1):
                current_dummy.append(float(current[j]))
            j += 1#将指针位移到表示类别的列 j=4
            #对原始数据每一行的数据进行分类,分为三类,用012表示
            if  current[j] == “Iris-setosa“:
                 cluster_location.append(0)

            elif current[j] == “Iris-versicolor“:
                 cluster_location.append(1)

            elif current[j] == “Iris-virginica“:
                 cluster_location.append(2)
            #创建只剩属性的新数据集
            data.append(current_dummy)
    print(“data lode over“)
    return data  cluster_location

def randomise_data(data):
    “““
    将数据随机化并保持随机化顺序的记录
    :param data:
    :return:
    “““
    order = list(range(0len(data)))#数据的条目数

    random.shuffle(order)#随机排序列表

    new_data = [[] for i in range(0len(data))]
    for index in range(0len(order)):
        new_data[index] = data[order[index]] #随机化数据顺序之后所对应的数据进行重新赋值,相当于随机化原始数据
    return  new_dataorder

def de_randomise_data(dataorder):
    “““
    将返回数据的原始顺序,将randomise_data()返回的order列表作为参数
    :param data:
    :param order:
    :return:
    “““
    new_data = [[] for i in range(0 len(data))]
    for index in range(len(order)):
        new_data[order[index]] = data[index]
    return new_data

def print_matrix(list):
    “““
以可重复的方式打印矩阵
“““
    for i in range(0 len(list)):
        print (list[i])

def initialise_U(data cluster_number):
    “““
    隶属度矩阵U的每行加起来为1
    :param data:
    :param cluster_number:
    :return:
    “““
    global MAX
    U = []
    for i in range(0len(data)):
        current = []
        rand_sum = 0.0
        for j in range(0cluster_number):
            dummy = random.randint(1int(MAX))
            current.append(dummy)
            rand_sum += dummy

        for j in range(0cluster_number):
            current[j] = current[j]/ rand_sum
        U.append(current)
    return U


def distance(point center):
    “““
    该函数计算2点之间的距离(作为列表)。我们指欧几里德距离。        闵可夫斯基距离
    “““
    if len(point) != len(center):
        return -1
    dummy = 0.0
    for i in range(0 len(point)):
        dummy += abs(point[i] - center[i]) ** 2
    return math.sqrt(dummy)


def end_conditon(U U_old):
    “““
结束条件。当U矩阵随着连续迭代停止变化时

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       4700  2019-03-09 22:13  模糊聚类\iris.txt

     文件       8560  2019-03-14 15:35  模糊聚类\KCM.py

     文件       3716  2019-03-13 22:40  模糊聚类\result.csv

     文件       4431  2019-03-14 15:20  模糊聚类\tst.py

     目录          0  2019-03-15 20:51  模糊聚类

----------- ---------  ---------- -----  ----

                21407                    5


评论

共有 条评论

相关资源