精华内容
下载资源
问答
  • ©1994-2010ChinaAcademicJournalElectronicPublishingHouse.Allrightsreserved.http://www.cnki.net第31卷第4期物探与化探Vol.31,No.42007年8月...GEOCHEMICALEXPLORATIONAug.,2007利用Excel实现R型聚类分析春...

    © 1994-2010 China Academic Journal Electronic Publishing House. All rights reserved.    http://www.cnki.net

    31

    卷第

    4

    Vol

    .

    31,

    No

    .

    4

    2007

    8

    GE

    OPHYSI

    CAL

    &

    GE

    OCHE

    M

    I

    CAL

    EXP

    LORATI

    O

    N

    Aug

    .

    ,

    2007

    利用

    Excel

    实现

    R

    型聚类分析

    (

    辽宁有色葫芦岛地质勘查院

    ,

    辽宁

    葫芦岛

    125000

    )

    :

    R

    型聚类分析是对若干个元素进行数量化相似程度分类的一种数理统计方法

    ,

    主要步骤包括

    :

    原始数据转

    ;

    求解相关系数

    ;

    对结果聚类

    利用

    Excel

    的数据分析工具实现

    R

    型聚类分析的方法和步骤

    ,

    对野外一线地质人

    员的工作相当适用

    关键词

    :

    Excel;

    数据分析

    ;

    相关系数

    ;

    显著性检验

    中图分类号

    :

    P632

    文献标识码

    :

    A

    文章编号

    :

    1000

    -

    8918

    (

    2007

    )

    04

    -

    0374

    -

    03

    化探工作中

    ,

    聚类分析可提供数量化的衡量元

    素或样品相似程度的指标

    ,

    利用这些指标可以将元

    素或样品划分为不同的类别

    ,

    从而揭示元素或样品

    之间本质上的联系

    ,

    分析元素的共生组合和对岩体

    异常等的分类评价

    。聚类分析一般分为

    2

    :

    R

    聚类分析

    (

    对元素分类

    )

    Q

    型聚类分析

    (

    对样品分

    )

    笔者介绍运用

    Excel

    数据分析工具实现

    R

    聚类分析的方法和步骤

    利用

    Excel

    数据分析工具实现

    R

    型聚类分析的

    操作流程为

    :

    加载分析工具库

    ;

    原始数据输入

    ;

    数据转换

    ;

    求解相关矩阵

    ;

    聚类分类

    ;

    分类

    结果解释

    以参考文献

    [

    1

    ]

    的原始数据为例

    ,

    介绍上述流

    1

    加载数据分析工具库

    缺省的

    W

    indows

    并不安装数据分析功能

    ,

    需要

    重新加载

    ,

    步骤如下

    :

    工具栏

    工具

    加载宏

    分析

    工具库

    确定

    2

    原始数据输入

    为了快速而准确地输入原始数据

    ,

    除了按照正

    常的

    Excel

    方法输入数据以外

    ,

    可以设定“

    工具

    2

    选项

    ,

    1

    个数据输入完毕之后

    ,

    Enter

    键即可语

    音朗读

    ,

    实现数据输入的同步检查

    ,

    确保其准确性

    例子的原始数据如表

    1

    所示

    输入数据应按行输入

    字段名

    (

    元素符号

    )

    ,

    相同一列按行输入同一元素的

    数值

    ,

    所有数据输入完毕之后

    ,

    所有字段名之下的其

    他行单元格内不再输入任何内容

    ,

    以保证在

    5

    .

    2

    Count

    (

    )

    函数求样本数

    n

    时不发生错误

    。在第

    4

    步求解相关矩阵时应选择逐列

    ,

    表明不同的列代表

    不同元素的数据

    1

    几种元素的原始数据

    10

    -

    6

    N

    i

    Co

    Cu

    Cr

    S

    A

    展开全文
  • 一、聚类分析10.1 聚类分析原理简介 基本思想是在样本之间定义距离,在变量之间定义相似系数,距离和相似系数分别代表样本和变量之间的相似程度。 通常聚类分析分为Q型聚类和R型聚类,Q型聚类是对样品进行分类处理,...

    一、聚类分析

    10.1 聚类分析原理简介
    • 基本思想是在样本之间定义距离,在变量之间定义相似系数,距离和相似系数分别代表样本和变量之间的相似程度。
    • 通常聚类分析分为Q型聚类和R型聚类,Q型聚类是对样品进行分类处理,R型聚类是对变量进行分类处理;
    展开全文
  • 利用Excel实现R型聚类分析第3l卷第4期 物探与化探 V01.31.No.42007年8月 GEOPHYSICAL&GEOCHEMICALEXPLORAll0N Aug.,2007利用Excel实现R型聚类分析春乃 芽(辽宁有色葫芦岛地质勘查院,辽宁葫芦岛 125...

    利用Excel实现R型聚类分析

    第3l卷第4期 物探与化探 V01.31.No.4

    2007年8月 GEOPHYSICAL&GEOCHEMICALEXPLORAll0N Aug.,2007

    利用Excel实现R型聚类分析

    春乃 芽

    (辽宁有色葫芦岛地质勘查院,辽宁葫芦岛 125000)

    摘要:R型聚类分析是对若干个元素进行数量化相似程度分类的一种数理统计方法,主要步骤包括:原始数据转

    换;求解相关系数;对结果聚类。利用Excel的数据分析工具实现R型聚类分析的方法和步骤,对野外一线地质人

    员的工作相当适用。

    关键词:Excel;数据分析;相关系数;显著性检验

    中图分类号:P632 文献标识码:A 文章编号:1000—8918(2007)04一0374一03

    化探工作中,聚类分析可提供数量化的衡量元 用Count()函数求样本数n时不发生错误。在第4

    素或样品相似程度的指标,利用这些指标可以将元 步求解相关矩阵时应选择逐列,表明不同的列代表

    素或样品划分为不同的类别,从而揭示元素或样品 不同元素的数据。

    之间本质上的联系,分析元素的共生组合和对岩体 表1几种元素的原始数据 10一6

    异常等的分类评价。聚类分析一般分为2种:R型 Ni Co Cu Cr S As

    1903 ”3 160 1178 8163 4

    聚类分析(对元素分类)和Q型聚类分析(对样品分

    2328 79 6 3175 586 14

    类)。笔者介绍运用Excel数据分析工具实现R型744 26 1 84l 425 3

    聚类分析的方法和步骤。 2782 273 150 2400 8234 37

    1775 94 13 3140 54 l

    利用Excel数据分析工具实现R型聚类分析的

    1046 44 6 2093 104 4

    操作流程为:①加载分析工具库;②原始数据输入;

    ③数据转换;④求解相关矩阵;⑤聚类分类;⑥分类 3 数据转换

    结果解释。

    一般认为岩石当中常量元素服从正态分布,而

    以参考文献[1]的原始数据为例,介绍上述流

    其他微量元素多为对数正态分布,而且数据过于离

    程。

    散…(这是地质数理统计的一个重要前提条件,利

    1加载数据分析工具库 用“数据分析-描述统计”当中的偏度/峰度,依据文

    献[1]所介绍的方法进行检验,笔者直接使用文

    缺省的windows并不安装数据分析功能,需要

    献¨3的数据,未做检验),所以要将其转换为常用对

    重新加载,步骤如下:工具栏_工具_÷加载宏_+分析

    数。

    工具库_+确定。

    选择单元格“J3”,在公式栏中输入“=L0910

    2 原始数据输人

    标放在该单元格的右下角的复制控点上,鼠标变成

    为了快速

    展开全文
  • 第二,聚类数变化对聚类性能的影响 第三,不同初始聚类中心对分类速度的影响 第四,代码实现 第一,实验步骤描述 本次实验主要使用208个学生的身高、体重、50m成绩数据作为基础,使用C均值算法对这些三维特征...

    模式识别学习,课程实例分享。

    文章目录

    • 第一,实验步骤描述
    • 第二,聚类数变化对聚类性能的影响
    • 第三,不同初始聚类中心对分类速度的影响
    • 第四,代码实现

    第一,实验步骤描述

             本次实验主要使用208个学生的身高、体重、50m成绩数据作为基础,使用C均值算法对这些三维特征点进行聚类。其中,C均值算法聚类准则是以最小欧式距离方法,将每个点分配到最近的聚类中来实现的。

             本节主要分成两个测试小节来描述C均值算法的特性,并用三维图像模型对聚类效果进行直观展示。第一,将目标聚类数c从0至20进行变化时,观测每个聚类数c对应的最后稳定准则函数值J变化趋势。第二,介绍并对比两种不同的初始聚类中心点选取方法,对准则函数值J收敛速度的影响。

    第二,聚类数变化对聚类性能的影响

           本次测试方法为:对208个学生的身高、体重、50m成绩三维特征点按照c个随机分布聚类中心点进行聚类,其中c的变化范围为1至20,

    观察准则函数值J即最后各个聚类集方差的收敛程度和变化趋势(聚类数值c的变化范围应该是1至208,但是在实际测试中准则函数值J从c=20开始,

    随着c的增长J值的变化很小,所以在此将不讨论c>20后的J值变化情况)。

           由上述测试方法,可以得到上表一的测试数据和图1的准则函数值J遂聚类数c增加而变化趋势图。由数据可以看出c∈[1,16]范围时,J值迅速收敛,即当将数据特征点分别分为1类、2类……16类时,各个类别里面的特征点方差快速减小,这些类别的点也越集中。可以预见,当c∈[17,208]时,J值减小速度明显放缓,乃至忽略。

           由表一数据结合图1曲线,当将所有特征点数据分成6类时,即c=6、J=0.83时,为聚类最优选择。因为随着将特征点分的类别越多,每个聚类里面能够分到的特征点必定减少即方差变小但运算时间和成本也会增多,当将有限特征点分成足够多的类时每个类都会近似为每个特征点本身失去实际分类意义,所以将数据分为6类时最能够兼顾分类效果和运算成本的分类方法,其具体分类效果如上图2所示。

    第三,不同初始聚类中心对分类速度的影响

           由图2结合图3所示的Result聚类效果进行对比,不难得出初始聚类中心的选取对最终聚类结果有很大影响的结论。此外,在实践过程中我们发现,不同的初始聚类中心除了会影响最终聚类结果以外,还会影响准则函数值J的稳定速度。为此,除了随机选取特征点作为聚类中心的方法外,我们还设计了另外一种初始聚类中心点选取方法进行比较。

            主特征值聚类中心选取法,对由208个人每人3个特征数据的208×3矩阵提取特征值,选取其中最大特征值所在的矩阵列数据(即3个特征中某个特征的208个数据)作由大到小排序得到208×1的数据M。此时,若需要N个初始聚类中心,则需对M进行N-1等分,再将各等份的边界点作为初始聚类中心点即可。

             测试方法:对随机取点法和主特征取点法分别做10次6分类的测试,每次测试会得到该次分类准则函数值J从减小到稳定不变的循环调整次数,并

    记录该次测试J稳定时的值。最后分别得到两种方法的J稳定平衡环调整次数与J稳定平均值。

             对表二进行结果分析可以得到如下结论。特征法比随机法运算速度更快更稳定,但是随机法的平均聚类效果比特征法要好,即平均J值更小。

            对于主特征取点法,由于在不改变原始数据矩阵的前提下,其主特征值所对应特征列是不变的,所以如果不改变选取点的个数,无论运行多少次

    都会得到唯一的初始聚类中心选择结果。对于身高、体重、50m成绩特征下的6分类结果,其准则函数值J为0.89,通过循环10次即可使J保持不变。

           对于随机取点法,由于聚类中心点时随机选取的,所以有概率循环最低的次数得到最小的J,使得算法可以用最快的速度得到最紧凑的分类效果,如第4次测试时,仅循环4次即可使J值稳定且达到最小的0.8。可是该随机方法也会带来计算速度不稳定或者陷入到最差解情况的问题。

    第四,代码实现

    * 测试

    import numpy as np
    import os
    import openpyxl
    import random
    import matplotlib.pyplot as plt
    
    #获取N个随机分类中心
    def C_Center(Data, Lable, N, Func):
        Center_Data  = []
        Center_Lable = []
        Center_Position = []
        Lenth = np.shape(Data)[0]
        if Func:
            Ranlist = random.sample(range(0, Lenth), N)
            Center_Position = Ranlist
            for i in range(N):
                Center_Data.append(Data[Ranlist[i]])
                Center_Lable.append(Lable[Ranlist[i]])
        return Center_Data, Center_Lable, Center_Position
    
    #计算两点的欧氏距离
    def Eucldist(coords1, coords2):
        coords1 = np.array(coords1)
        coords2 = np.array(coords2)
        err = coords1 - coords2
        return np.sqrt(np.sum((coords1 - coords2)**2))
    
    #更新各个点到中心点的欧氏距离
    def CentDis(Center, Data, N):
        Long = np.shape(Data)[0]
        CenterDis = [[0 for i in range(N)] for i in range(Long)]
        for i in range(Long):
            for j in range(N):
                CenterDis[i][j] = Eucldist(Data[i],Center[j])
        return CenterDis
    
    #得到列表中最小值对应的序号
    def MinOlder(Data):
        return sorted(range(len(Data)), key=lambda k: Data[k], reverse=True)[len(Data) - 1]
    
    def MaxOlder(Data):
        return sorted(range(len(Data)), key=lambda k: Data[k], reverse=True)[1]
    
    #计算类样本点平均值
    def ClassMean(Data, ClassNum):
        Mean = [[0 for i in range(np.shape(Data[0])[1])] for i in range(ClassNum)]
        for i in range(ClassNum):
            m, n = np.shape(Data[i])
            for j in range(n):
                sum = 0
                for k in range(m):
                    sum = sum + Data[i][k][j]
                Mean[i][j] = sum/m
        return Mean
    
    
    # 画出 特征点
    def plot_dataset(X, y, V, str1, str2, str3):
        show = plt.figure().add_subplot(111, projection='3d')
        PointShape = ["^", "o", "+", "*", "p", "x", "s", "h"]
        PointColor = ['red', 'green', 'blue', 'firebrick', 'black', 'sage', 'deeppink', 'orange']
        if V > 8:
            V = 8
        # 生成散点图
        for i in range(V):
            show.scatter(X[:, 0][y == i], X[:, 1][y == i], X[:, 2][y == i], \
                         c=PointColor[i], marker=PointShape[i])
        # 设置坐标轴名称
        show.set_xlabel(str1)
        show.set_ylabel(str2)
        show.set_zlabel(str3)
    
    def PltShow(Data, Center_Num):
        ShowData = []
        ShowLabel = []
        for i in range(Center_Num):
            for j in range(np.shape(Data[i])[0]):
                ShowData.append(Data[i][j])
                ShowLabel.append(i)
        plot_dataset(np.array(ShowData), np.array(ShowLabel), 4, "X", "Y", "Z")
    
    def main():
        Data_Num = 10 # 提取 208 个人信息
        Data  = [[163,	51,	7.5],
    			 [171,	64,	7.5],
    			 [182,	68,	7.8],
    			 [172,	66,	8.2],
    			 [185,	80,	8.5],
    			 [164,	47,	9  ],
    			 [160,	46,	9  ],
    			 [170,	46,	7  ],
    			 [178,	60,	7  ],
    			 [180,	71,	7.5]]
    
        Lable =  [1,1,1,1,1,0,0,1,1,1]
    
        # 设聚类中心4个
        Center_Num = 2
        # 设定不同类别的点池
        ClassData = [[] for i in range(Center_Num)]
        # 使用方法0,得到初始聚类中心4个
        Center_Data, Center_Lable, Center_Position = C_Center(Data, Lable, Center_Num, 1)
        Distance = CentDis(Center_Data, Data, Center_Num)  # 更新各点与新中心的距离
        MinDistance = [MinOlder(Distance[i]) for i in range(Data_Num)]#得到每点所属类别
        # 将每个点分到所属的类里面
        for i in range(Data_Num):
            ClassData[MinDistance[i]].append(Data[i])
        print(random.randint(0,10))
        PltShow(ClassData, Center_Num)
        #plt.show()
    
    if __name__ == '__main__':
        main()

    * 全部

    import numpy as np
    import os
    import openpyxl
    import random
    import matplotlib.pyplot as plt
    
    #输入表格名file_data
    # 要读该列的行数从1到row_end
    def ReadInData(file_data, LableClassNum, ClassNum, row_end):
        LableClassNum = LableClassNum+1
        row_end = row_end+2
        Data = [[i for i in range(len(ClassNum))] for i in range(row_end-2)]
        Lable = []
        ClassLenth = len(ClassNum)
        Data = np.array(Data, dtype='float32')
        for i in range(2, row_end):
            Lable.append(file_data.cell(i, LableClassNum).value)
            for j in range(ClassLenth):
                Data[i-2][j] = file_data.cell(i,ClassNum[j]+1).value
        # 读入数据归一化处理
        Mean = []
        for i in range(row_end - 2):
            sum = 0
            k = 0
            for j in range(ClassLenth):
                sum = sum + Data[i][j]
                k = k + 1
            Mean.append(sum / k)
        for i in range(row_end - 2):
            for j in range(ClassLenth):
                Data[i][j] = Data[i][j] / Mean[j]
        return Data,np.array(Lable)
    
    # Func = 1 获取N个随机分类中心
    # Func = 0 以样本矩阵主特征值所在列对应的特征作为一维轴,将数值由大到小排序,进行N等分得到N+1个中心点
    def C_Center(Data, Lable, N, Func):
        Center_Data  = []
        Center_Lable = []
        Center_Position = []
        Lenth = np.shape(Data)[0]
        SufN  = np.shape(Data)[1]
        if Func:
            Ranlist = random.sample(range(0, Lenth), N)
            Center_Position = Ranlist
            for i in range(N):
                Center_Data.append(Data[Ranlist[i]].tolist())
                Center_Lable.append(Lable[Ranlist[i]].tolist())
        else:
            Data_Scale = np.zeros((Lenth, SufN))
            for i in range(SufN):
                SufN_Max = np.max(Data[:, i])
                SufN_Min = np.min(Data[:, i])
                SufN_Mean = np.mean(Data[:, i])
                for j in range(Lenth):
                    Data_Scale[j][i] = round((Data[j][i] - SufN_Mean) / (SufN_Max - SufN_Min) + 0.5, 1)
            EigValue, EigVector = np.linalg.eig(np.cov(np.transpose(Data_Scale)))
            Max_EigValue = sorted(range(len(EigValue)), key=lambda k: EigValue[k], reverse=True)
            Center = Data_Scale[:, Max_EigValue[0]]
            Max_CenterData = sorted(range(len(Center)), key=lambda k: Center[k], reverse=True)
            if N-1 == 0:
                Scale = 0
            else:
                Scale = len(Max_CenterData)/(N-1)
            Temp = 0
            for i in range(N):
                if i <1:
                    where = Max_CenterData[0]
                else:
                    where = Max_CenterData[int(Temp)-1]
                Center_Position.append(where)
                Center_Data.append(Data[where].tolist())
                Center_Lable.append(Lable[where])
                if i<N-1:
                    Temp = np.ceil(Temp+Scale)
                else:
                    Temp = Scale*(N-1)-1
        return Center_Data, Center_Lable, Center_Position
    
    #计算两点的欧氏距离
    def Eucldist(coords1, coords2):
        coords1 = np.array(coords1)
        coords2 = np.array(coords2)
        return np.sqrt(np.sum((coords1 - coords2)**2))
    
    #更新各个点到中心点的欧氏距离
    def CentDis(Center, Data, N):
        Long = np.shape(Data)[0]
        CenterDis = [[0 for i in range(N)] for i in range(Long)]
        for i in range(Long):
            for j in range(N):
                CenterDis[i][j] = Eucldist(Data[i],Center[j])
        return CenterDis
    
    #得到列表中最小值对应的序号
    def MinOlder(Data):
        Length = len(Data)
        if Length <= 1:
           return 0
        return sorted(range(Length), key=lambda k: Data[k], reverse=True)[Length - 1]
    #得到列表中随机序号
    def RandOlder(Data):
        Length = len(Data)
        if Length <= 1:
            return 0
        return random.randint(0,Length-1)
    
    #计算类样本点平均值
    def ClassMean(Data, ClassNum):
        Mean = [[0 for i in range(np.shape(Data[0])[1])] for i in range(ClassNum)]
        for i in range(ClassNum):
            if np.shape(Data[i])[0] == 0:
                Mean[i][0] = 0
                continue
            m, n = np.shape(Data[i])
            for j in range(n):
                sum = 0
                for k in range(m):
                    sum = sum + Data[i][k][j]
                Mean[i][j] = sum/m
        return Mean
    
    # 更新准则函数的值,看是否继续缩小
    def Je(ClassData,Center_Num,NewCenter):
        sum2 = 0
        for i in range(Center_Num):
            Class = ClassData[i]
            sum1 = 0
            for j in range(np.shape(Class)[0]):
                sum1 = sum1 + pow(np.array(Class[j])-np.array(NewCenter[i]),2)
            sum2 = sum2 + sum1
        return sum(sum2)
    
    # 计算每一点与其他类别中心的距离,如果比该点和原类别中心的距离短,
    # 则移动该点至新的类别
    def PointMoving(ClassData,Center_Num,Center):
        for i in range(Center_Num):
            for j in range(np.shape(ClassData[i])[0]):
                if j < np.shape(ClassData[i])[0]:
                    ClassOrder = [i for i in range(Center_Num)]
                    ClassOrder.remove(i)  # 得到除特征点所属类别之外的类别序号
                    Nk = np.shape(ClassData[i])[0]  # 原类别特征值个数
                    # 重新计算原类别代价函数
                    Pk = 0
                    if Nk - 1 == 0:
                        Pk = 0
                    else:
                        F = sum(pow(np.array(ClassData[i][j]) - np.array(Center[i]), 2))  # 计算二范数
                        Pk = Nk / (Nk - 1) * F
                    Pj = [i for i in range(Center_Num - 1)]
                    for k in range(Center_Num-1):
                        Nj = np.shape(ClassData[ClassOrder[k]])[0] #新类别特征值个数
                        F = sum(pow(np.array(ClassData[i][j]) - np.array(Center[ClassOrder[k]]), 2))  # 计算二范数
                        #重新计算新类别代价函数
                        Pj[k] = Nj/(Nj+1)*F
                    # 得到该特征点除原类别外,在移动该点后与其他最近的类别是哪个即Pj最小
                    PjMinNum = MinOlder(Pj)
                    MiniPj = ClassOrder[PjMinNum]
                    if Pj[PjMinNum] < Pk:
                        ClassData[MiniPj].append(ClassData[i][j])  # 添加该特征点至新类别
                        ClassData[i].remove(ClassData[i][j])  # 在原类别里删除该特征点
                    #print(i,j,"  ",np.shape(ClassData[0])[0],np.shape(ClassData[1])[0],np.shape(ClassData[2])[0],np.shape(ClassData[3])[0])
                    #print(Pk-Pj[PjMinNum])
        return ClassData
    
    def main():
        # 数据打开文件路径
        Tain_set = openpyxl.load_workbook(os.path.abspath('data.xlsx'))
        # 训练数据读取
        Tain_sheet = Tain_set["Sheet1"]
        # 1性别 2籍贯 3身高 4体重  5鞋码  6(50米成绩) 7肺活量     8喜欢颜色 9喜欢运动 10喜欢文学
        Data_Num = 200 # 提取 208 个人信息
        WhichClass = [3, 4, 6]
        Data, Lable = ReadInData(Tain_sheet, 1, WhichClass, Data_Num)
    
        X = []
        Y = []
        for k in range(20):
            print(k)
            ################################<C均值分类算法>####################################
            # 设聚类中心4个
            Center_Num = k+1
            # 设定不同类别的点池
            ClassData = [[] for i in range(Center_Num)]
            # 使用方法0,得到初始聚类中心
            Center_Data, Center_Lable, Center_Position = C_Center(Data, Lable, Center_Num,1)
            # 得到各点与中心点的距离
            Distance = CentDis(Center_Data, Data, Center_Num)
            # 得到每点所属类别
            #MinDistance = [RandOlder(Distance[i]) for i in range(Data_Num)] # 初始随机分类
            MinDistance = [MinOlder(Distance[i]) for i in range(Data_Num)]  # 初始最小距离分类
            # 将每个点分到所属的类里面
            for i in range(Data_Num):
                ClassData[MinDistance[i]].append(Data[i].tolist())
    
            if k < 1:
                sum2 = 0
                for i in range(Center_Num):
                    Class = ClassData[i]
                    sum1 = 0
                    for j in range(np.shape(Class)[0]):
                        sum1 = sum1 + pow(np.array(Class[j]) - np.array(Center_Data[i]), 2)
                    sum2 = sum2 + sum1
                X.append(1)
                Y.append(sum(sum2))
            else:
                # 类别特征点初始化
                NewClassData = ClassData
                # 初始化准则函数值
                OldJe = 3
                NewJe = 2
                RunTime = 0
                # 开始循环使准则函数Je最小
                while OldJe - NewJe > 0.0000001:
                    # for j in range(10):
                    # 得到新的类别中心
                    NewCenter = ClassMean(NewClassData, Center_Num)
                    # 更新准则函数值
                    if RunTime > 0:
                        OldJe = NewJe
                    NewJe = Je(NewClassData, Center_Num, NewCenter)
                    # 更新类的点
                    NewClassData = PointMoving(NewClassData, Center_Num, NewCenter)
                    RunTime = RunTime + 1  # 调制次数统计
                X.append(k)
                Y.append(NewJe)
        print(Y)
        fig = plt.figure()
        ax = fig.add_subplot(1, 1, 1)
        ax.plot(X, Y)
        ax.set_title("Je Trend Line")
        ax.set_xlabel("ClassNum - C")
        ax.set_ylabel("Je")
        plt.show()
    
    
    if __name__ == '__main__':
        main()
    展开全文
  • 聚类分析变量选择的原则是:在哪些变量组合的前提,使得类别内部的差异尽可能的小,即同质性高,类别间的差异尽可能的大,即同质性低,并且变量之间不能存在高度相关。常用的用户特征变量有:①人口学变量:如年龄、...
  • nbsp自然科学论文聚类分析和NMDS分析的基本步骤.doc4页本文档一共被下载:次,您可全文免费在线阅读后下载本文档。 下载提示1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站...
  • 聚类分析

    2020-03-27 13:57:43
    聚类分析简介 1.基本思想 聚类分析是将样本个体或指标变量按其具有的特性进行分类的一种统计分析方法。我们所研究的样品或指标(变量)之间存在着程度不同的相似性(亲疏关系),于是可根据一批样品的多个观测指标,...
  • 聚类分析原理及R语言实现过程

    千次阅读 2021-01-14 07:48:08
    聚类分析定义与作用:是把分类对象按照一定规则分成若干类,这些类不是事先设定的,而是根据数据的特征确定的。在同一类中这些对象在某种意义上趋向于彼此相似,而在不同类中对象趋向于彼此不相似。在经济、管理、...
  • 聚类分析是没有给定划分类别的情况下,根据样本相似度进行样本分组的一种方法,是一种非监督的学习算法。聚类的输入是一组未被标记的样本,聚类根据数据自身的距离或相似度划分为若干组,划分的原则是组内距离最小化...
  • SPSS聚类分析——一个案例演示聚类分析全过程

    万次阅读 多人点赞 2015-03-06 14:46:23
    SPSS聚类分析——一个案例演示聚类分析全过程 摘要: 案例数据源: 有20种12盎司啤酒成分和价格的数据,变量包括啤酒名称、热量、钠含量、酒精含量、价格。数据来自《SPSS for Windows 统计分析》 ...
  • KMeans算法( 聚类分析)

    万次阅读 热门讨论 2019-11-21 21:03:04
    1 聚类分析相关概念 1.1 聚类与分类 分类其实是从特定的数据中挖掘模式,作出判断的过程。比如Gmail邮箱里有垃圾邮件分类器,一开始的时候可能什么都不过滤,在日常使用过程中,我人工对于每一封邮件点选“垃圾...
  • 如何运用MATLAB实现K-MEANS聚类分析

    千次阅读 多人点赞 2020-05-12 10:46:18
    由于自己最近在学习聚类分析,也算是一个入门,相当于将自己这段时间的学习成果进行一个总结,分享给更多打算学习聚类分析或者需要用到聚类分析的同学们~ 在了解K-MEANS聚类分析之前,我们首先明确聚类的含义,聚类...
  • 分类: 已知当前所研究的问题的类别数目及各类特征,将一些未知类别的个体正确地归属...例如,在大学,同学之间根据兴趣爱好、性格、家乡等,自发地聚集成不同的圈子,这个过程就是聚类,一开始不知道类别数目及细节 多
  • 聚类分析 常用聚类方法如下表: 常用聚类算法如下表: K-Means聚类算法 K-Means算法是典型的基于距离的非层次聚类算法,在最小化误差函数的基础上将数据划分为预定的类数K,采用距离作为相似性的评价指标,即认为...
  • 我不说别的,我就从薪资分析给你们看一下:在开始我们今天的分享之前,先看一个实际业务分析场景中的例子:某零售公司在市面上主要有30款产品,这些产品的类别、销售量和销售额的差异很大,于是该公司的业务分析师想...
  • Kmeans聚类实例④——电商用户质量聚类分析(RFM)

    万次阅读 多人点赞 2019-06-15 18:59:38
    聚类通常分为以下步骤: ① 业务提出需求 ② 根据业务需求,找到核心的指标。有现成的模型的话(如RFM),可以直接按模型的指标,如果没有,先罗列出比较重要的指标 ③ 从数据库用SQL取出数据 ④ 对数据进行清洗,...
  • 2020-12-29层次聚类分析

    2021-01-05 19:22:00
    层次聚类分析 作者:小明 为啥做这个?我猜是模式识别的课程让我写的。 无私奉献啊哈哈哈哈 本文主要针对层次聚类算法做一个详解,并使用代码进行复述,可供大家理解一下什么是层次聚类分析算法哈! 算法定义: ...
  • import pandas as pd import numpy as np df = pd.read_excel(r'F:\数据分析项目\电商数据的RFM模型\RFM\PYTHON-RFM实战数据.xlsx') df.head(5) 总览数据: df.info() 数据共有28833行,9列,而且数据非常干净,...
  • Q型聚类分析

    万次阅读 2015-09-02 10:49:36
    Q型聚类聚类分析的一种,一般是对样本进行分类。 下面以销售员业绩表举例,对5个销售员进行分类: 销售员 v1(销售量) v2(回收款项) 1 1 0 2 1 1 3 3 2 4 4 3 5 2 5 代码: clc,clear; a=[1,...
  • sklearn文本聚类分析

    千次阅读 2020-05-10 19:04:15
    面对如今的大数据时代,各种各样的信息令人眼花缭乱,你根本不知道哪些信息是自己所需要的,而一个个看又会浪费很多时间,更不用说对一大堆信息进行分类或总结了。对于聚类处理,这里使用 birch...
  • 几种常见的聚类分析

    千次阅读 2018-10-17 17:36:00
    聚类分析 指将对象的集合分组为由类似的对象组成的多个类的分析过程,目的是在相似的基础上收集数据来分类。 聚类算法分为: 1)划分聚类:K-means聚类、K-中心点聚类、CLARANS算法 2)层次聚类 :DIANA算法、BIRCH...
  • 数据挖掘的本质是“计算机根据已有的数据做出决策”,其对社会的价值不必多言,相关的应用已经有很多,包括垃圾邮件拦截、客户价值分析等。 尽管数据挖掘实现过程的细节千差万别,但是从思路来说,主要包括两个...
  • 来源:数据STUDIO大量数据中具有"相似"特征的数据点或样本划分为一个类别。聚类分析提供了样本集在非监督模式下的类别划分。基本思想物以类聚、人以群分常用于数据探索或挖掘前期没有先验经验做...
  • Python数模笔记-Sklearn(1)样本聚类分析 1、分类的分类 分类的分类?没错,分类也有不同的种类,而且在数学建模、机器学习领域常常被混淆。 首先我们谈谈有监督学习(Supervised learning)和无监督学习...
  • 聚类方法 适用场景 代表算法 优点 缺陷 延伸 层次聚类 小样本数据 - 可以形成类相似度层次图谱,便于直观的确定类之间的划分。 该方法可以得到较理想的分类 难以处理大量...
  • #z-score标准 调用k-means算法,进行聚类分析 kmodel = KMeans(n_clusters=5, n_jobs=4) #n_jobs是并行数,一般等于CPU数较好 kmodel.fit(data) #训练模型 #注意:n_clusters=5,“5”需要人为提前输入。具体输入值...
  • 使用ucinet和netdraw做文献计量的可视化分析 阅读文献的时候经常看到针对文本做数据的可视化的文章,作为没有一点基础的小白,如何实现简单的文献计量处理呢?以下是我的学习心得。 ...欢迎使用Markdown编辑器 ...
  • 文末领取【19份咨询类公司项目案例分析】01概念聚类分析是按照个体的特征将他们分类,让同一个类别内的个体之间具有较高的相似度,不同类别之间具有较大的差异性。聚类分析属于无监督学习。聚类对象可以分为Q型聚类...
  • 聚类分析层次聚类及k-means算法

    千次阅读 2017-06-25 15:28:53
    1、测试案例: 2、原理分析: 3、源代码示例: 4、运行结果:

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,442
精华内容 976
关键字:

聚类分析excel步骤