資源簡介
該資源包括兩部分代碼,都是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
評論
共有 條評論