【机器学习】基于组平均的AGNES算法,支持多维数组,距离用欧式距离

简介: 【机器学习】基于组平均的AGNES算法,支持多维数组,距离用欧式距离

2021人工智能领域新星创作者,带你从入门到精通,该博客每天更新,逐渐完善各个知识体系的文章,帮助大家更高效学习。

自己实现基于组平均的AGNES算法,语言不限。要能支持多维数组,距离用欧式距离

  • numpy实现
  • 相似性度量方式:average-cluster
  • 绘制层次树图

编程实现

"""
 * Created with PyCharm
 * 作者: Laura
 * 日期: 2021/11/6
 * 时间: 12:10
 * 描述: 基于组平均的AGNES算法,支持多维数组,距离用欧式距离
"""
import numpy as np
import pandas as pd
from scipy.cluster.hierarchy import dendrogram,linkage
from scipy.spatial.distance import squareform
import matplotlib.pyplot as plt
import random
class AGNES():
    def __init__(self, data, cluster = 2):
        self.cluster = cluster
        self.data = data
        self.distance_matrix = []
        self.dic = {}
        self.dic_ = {}
        self.index = ['A', 'B', 'C', 'D', 'E']
        self.columns = ['A', 'B', 'C', 'D', 'E']
    def init_data(self, data, dic):
        dic={i:[chr(ord('A')+i)] for i in range(len(data))}
        data = self.calculate_distance(data)
        self.distance_matrix = data.copy()
        row, col = np.diag_indices_from(data) 
        temp = data.max() + 1
        data[row, col] = temp
        row_, col_ = np.triu_indices_from(data, k = 0)
        data[row_, col_] = temp
        return data, dic
    def train(self, cluster, method='train'):
        data = self.data.copy()
        dic = {}
        data, dic = self.init_data(data, dic)
        k = 0
        while k < len(data) - cluster:
            location = np.where(data == data.min()) # 找到此时矩阵距离最小值的坐标
            x, y = location[0][0], location[1][0]   # 分别获取横纵坐标
            x_ = self.index[x]
            y_ = self.columns[y]                    # 获取对应样本信息
            x_key = '-'
            y_key = '-'
            for key, value in dic.items():
                if x_ in value:
                    x_key = key
                if y_ in value:
                    y_key = key
            dic[y_key].extend(dic[x_key])
            dic.pop(x_key)
            slic = dic[y_key]  # 更新簇的样本
            num = len(dic[y_key]) # 簇内样本的数目
            data_sum = np.zeros(5)
            for item in slic:
                data_sum += data[:, self.index.index(item)]
            data_sum /= num
            for item in slic:
            #   data[index.index(item)]=data_sum
                data[:, self.index.index(item)] = data_sum
                row, col = np.diag_indices_from(data) 
                temp = data.max() + 999
                data[row, col] = temp
                row_,col_ = np.triu_indices_from(data, k=0)
                data[row_, col_] = temp
            k += 1
        if method == 'train':
            self.dic = dic
        else:
            self.dic_ = dic
    def draw(self):
        dists = squareform(self.distance_matrix)
        linkage_type = 'average'   # single,complete,average不同方式
        linkage_matrix = linkage(dists, linkage_type)
        dendrogram(linkage_matrix, labels = self.index)
        plt.show()
    def process(self):
        for cluster in range(1, self.distance_matrix.shape[0] + 1):
            self.train(cluster, 'other')
            print('簇数:', cluster, self.dic_)
    def calculate_distance(self, data):
        distance_matrix = np.zeros((data.shape[0],data.shape[1]))
        for i in range(data.shape[0]):
            for j in range(data.shape[1]):
                distance_matrix[i][j] = np.sum((data[i] - data[j])**2)
        return distance_matrix
data = np.random.rand(5, 5)
model = AGNES(data)
model.train(cluster = 2)
model.process()
model.draw()


目录
相关文章
|
7天前
|
数据采集 机器学习/深度学习 算法
机器学习方法之决策树算法
决策树算法是一种常用的机器学习方法,可以应用于分类和回归任务。通过递归地将数据集划分为更小的子集,从而形成一棵树状的结构模型。每个内部节点代表一个特征的判断,每个分支代表这个特征的某个取值或范围,每个叶节点则表示预测结果。
25 1
|
1天前
|
机器学习/深度学习 数据采集 人工智能
|
1天前
|
机器学习/深度学习 人工智能 供应链
|
2天前
|
机器学习/深度学习 数据采集 算法
【机器学习】CART决策树算法的核心思想及其大数据时代银行贷款参考案例——机器认知外界的重要算法
【机器学习】CART决策树算法的核心思想及其大数据时代银行贷款参考案例——机器认知外界的重要算法
|
6天前
|
机器学习/深度学习 分布式计算 算法
在机器学习项目中,选择算法涉及问题类型识别(如回归、分类、聚类、强化学习)
【6月更文挑战第28天】在机器学习项目中,选择算法涉及问题类型识别(如回归、分类、聚类、强化学习)、数据规模与特性(大数据可能适合分布式算法或深度学习)、性能需求(准确性、速度、可解释性)、资源限制(计算与内存)、领域知识应用以及实验验证(交叉验证、模型比较)。迭代过程包括数据探索、模型构建、评估和优化,结合业务需求进行决策。
12 0
|
6天前
|
机器学习/深度学习 算法
机器学习中的超参数优化涉及手动尝试、网格搜索、随机搜索、贝叶斯优化、梯度优化、进化算法等策略
【6月更文挑战第28天】**机器学习中的超参数优化涉及手动尝试、网格搜索、随机搜索、贝叶斯优化、梯度优化、进化算法等策略。工具如scikit-optimize、Optuna助力优化,迁移学习和元学习提供起点,集成方法则通过多模型融合提升性能。资源与时间考虑至关重要,交叉验证和提前停止能有效防止过拟合。**
13 0
|
6天前
|
机器学习/深度学习 算法 数据可视化
技术心得记录:机器学习笔记之聚类算法层次聚类HierarchicalClustering
技术心得记录:机器学习笔记之聚类算法层次聚类HierarchicalClustering
11 0
|
11天前
|
机器学习/深度学习 人工智能 算法
【昆虫识别系统】图像识别Python+卷积神经网络算法+人工智能+深度学习+机器学习+TensorFlow+ResNet50
昆虫识别系统,使用Python作为主要开发语言。通过TensorFlow搭建ResNet50卷积神经网络算法(CNN)模型。通过对10种常见的昆虫图片数据集('蜜蜂', '甲虫', '蝴蝶', '蝉', '蜻蜓', '蚱蜢', '蛾', '蝎子', '蜗牛', '蜘蛛')进行训练,得到一个识别精度较高的H5格式模型文件,然后使用Django搭建Web网页端可视化操作界面,实现用户上传一张昆虫图片识别其名称。
142 7
【昆虫识别系统】图像识别Python+卷积神经网络算法+人工智能+深度学习+机器学习+TensorFlow+ResNet50
|
11天前
|
机器学习/深度学习 人工智能 算法
算法金 | 统计学的回归和机器学习中的回归有什么差别?
**摘要:** 统计学回归重在解释,使用线性模型分析小数据集,强调假设检验与解释性。机器学习回归目标预测,处理大数据集,模型复杂多样,关注泛化能力和预测误差。两者在假设、模型、数据量和评估标准上有显著差异,分别适用于解释性研究和预测任务。
38 8
算法金 | 统计学的回归和机器学习中的回归有什么差别?
|
8天前
|
机器学习/深度学习 人工智能 自然语言处理
机器学习算法入门:从K-means到神经网络
【6月更文挑战第26天】机器学习入门:从K-means到神经网络。文章涵盖了K-means聚类、逻辑回归、决策树和神经网络的基础原理及应用场景。K-means用于数据分组,逻辑回归适用于二分类,决策树通过特征划分做决策,神经网络则在复杂任务如图像和语言处理中大显身手。是初学者的算法导览。