【数据挖掘】DIANA聚类算法(python实现)

一、python代码

'''
Author: Vici__
date: 2020/5/13
'''
import math

'''
Point类,记录坐标x,y和点的名字id
'''
class Point:
    '''
    初始化函数
    '''
    def __init__(self, x, y, name, id):
        self.x = x # 横坐标
        self.y = y # 纵坐标
        self.name = name # 名字 
        self.id =  id # 编号 
    '''
    计算两点之间的欧几里得距离
    '''
    def calc_Euclidean_distance(self, p2):
        return math.sqrt((self.x - p2.x) * (self.x - p2.x) + (self.y - p2.y) * (self.y - p2.y))

'''
1. 获取数据集
'''
def get_dataset():
    # 原始数据集以元组形式存放,(横坐标,纵坐标,编号)
    datas = [(0, 2, 'A'), (0, 0, 'B'), (1.5, 0, 'C'), (5, 0, 'D'), (5, 2, 'E')]
    dataset = [] # 用于计算两点之间的距离,形式 [point1, point2...]
    id_point_dict = {} # 编号和点的映射
    te
首先需要导入鸢尾花数据集并进行预处理: ```python from sklearn.datasets import load_iris import pandas as pd # 导入数据集 iris = load_iris() # 转换为DataFrame格式 data = pd.DataFrame(iris.data, columns=iris.feature_names) # 输出前5行数据 print(data.head()) ``` 接下来,我们可以使用DIANA聚类算法对数据进行聚类。其中,我们需要使用`pyclustering`库中的`diana`模块。 ```python from pyclustering.cluster.diana import diana from pyclustering.utils import read_sample # 将数据集转换为样本列表 samples = read_sample(data.values.tolist()) # 运行DIANA算法 model = diana(samples) # 获取聚类结果 clusters = model.get_clusters() # 获取每个样本所属的簇编号 labels = [0] * len(samples) for i, cluster in enumerate(clusters): for j in cluster: labels[j] = i # 输出聚类结果 print(labels) ``` 现在我们已经得到了聚类结果。接下来,我们可以使用调参来优化聚类效果。DIANA算法主要有两个参数需要调整:阈值和距离度量。其中,阈值控制了簇与簇之间的距离,距离度量用于计算簇之间的距离。 ```python from pyclustering.cluster.diana import diana from pyclustering.utils import read_sample from pyclustering.samples.definitions import SIMPLE_SAMPLES # 将数据集转换为样本列表 samples = read_sample(data.values.tolist()) # 设置阈值和距离度量 threshold = 1.0 metric = 'euclidean' # 创建DIANA算法模型 model = diana(samples, threshold=threshold, metric=metric) # 运行DIANA算法 model.process() # 获取聚类结果 clusters = model.get_clusters() # 获取每个样本所属的簇编号 labels = [0] * len(samples) for i, cluster in enumerate(clusters): for j in cluster: labels[j] = i # 输出聚类结果 print(labels) ``` 在调参时,我们可以通过多次运行DIANA算法来比较不同参数下的聚类效果,并选择效果最好的参数组合。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值