文章目录

  • 聚类分析介绍
  • K-Means聚类

聚类分析介绍

关键词:没有先验知识亲密程度相似性个体自动分类

K-Means聚类

  K均值聚类是一种动态聚类法,为了改进之前的算法在样品个数很大时内存和时间都消耗极大的缺点;即一种动态聚类法,先粗略分一下类,然后按照某种最优原则进行修正,直到分类比较合理为止;

思想:
  先假定样本可分为C类,选定C个初始聚类中心,然后根据最小距离原则将每个样本分配到某一类中,之后不断迭代计算各类的聚类中心,并依据新的聚类中心调整聚类情况,直到迭代收敛 or 聚类中心不再改变;

如何确定簇数 K ?

拐点法
  在不同的 K 值下计算簇内距离差平方和,然后通过可视化的方法找到拐点所对应的 K 值,重点关注斜率的变化,当斜率由大突然变小时,并且之后斜率变化缓慢,则认为突然变化的点就是目标点 K,因为之后随着 K 的增大聚类效果不会有大的变化;

这里随机生成三组二维正态分布数据,然后模拟数据,使用拐点法

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeansmean = np.array([[-2, -2], [2, 2], [6, 6]])
cov = np.array([[[0.3, 0], [0, 0.3]], [[0.4, 0], [0, 0.4]], [[0.5, 0], [0, 0.5]]])
x0 = []
y0 = []
for i in range(3):x, y = np.random.multivariate_normal(mean[i], cov[i], 1000).Tx0 = np.hstack([x0, x])y0 = np.hstack([y0, y])
plt.rc('font', size=16)
plt.rc('font', family='SimHei')
plt.rc('axes', unicode_minus=False)
plt.subplot(121)
plt.scatter(x0, y0, marker='.')  # 画模拟数据散点图
X = np.vstack([x0, y0]).T
np.save("Pzdata11_1.npy", X)  # 保存数据供下面使用
TSSE = []
K = 10
for k in range(1, K + 1):SSE = []md = KMeans(n_clusters=k)md.fit(X)labels = md.labels_centers = md.cluster_centers_for label in set(labels):SSE.append(np.sum((X[labels == label, :] - centers[label, :]) ** 2))TSSE.append(np.sum(SSE))
plt.subplot(122)
plt.style.use('ggplot')
plt.plot(range(1, K + 1), TSSE, 'b*-')
plt.xlabel('簇的个数')
plt.ylabel('簇内离差平方和之和')
plt.show()

结果如图:

很明显拐点即K=3的时候;

案例:

步骤:

  • 判断要不要标准化,像这个案例,量纲在同一级,可以不用标准化;
  • 选择 K 值,可以认为判断,也可以用前面说的 拐点法 选择;
# 程序文件Pex11_14.py
import numpy as np;
import pandas as pd
from sklearn.cluster import KMeans
import matplotlib.pyplot as plta = pd.read_csv("iris.csv")
b = a.iloc[:, :-1]
md = KMeans(3)
md.fit(b)  # 构建模型并求解模型
labels = md.labels_
centers = md.cluster_centers_
b['cluster'] = labels  # 数据框b添加一个列变量cluster
c = b.cluster.value_counts()  # 各类频数统计
plt.rc('font', family='SimHei')
plt.rc('font', size=16)
str1 = ['^r', '.k', '*b']
plt.subplot(121)
for i in range(len(centers)):plt.plot(b['Petal_Length'][labels == i], b['Petal_Width'][labels == i], str1[i], markersize=3, label=str(i))plt.legend()plt.xlabel("(a)KMeans聚类结果")
plt.subplot(122)
str2 = ['setosa', 'versicolour', 'virginica']
ind = np.hstack([np.zeros(50), np.ones(50), 2 * np.ones(50)])
for i in range(3):plt.plot(b['Petal_Length'][ind == i], b['Petal_Width'][ind == i],str1[i], markersize=3, label=str2[i])plt.legend(loc='lower right')plt.xlabel("(b)原数据的类别")
plt.show()


可以发现 K-Means 的准确率还是挺高的,就那么十来个点有问题,大概错误率不到10%;

数学建模:评价模型——聚类分析 K-Means python实现相关推荐

  1. 数学建模——评价模型

    文章目录 一.模糊综合评价模型 1.基础知识 2.一级模糊综合评价 3.二级模糊综合评价 二.灰色关联分析模型 1.灰色关联分析原理 2.灰色关联分析步骤 三. Topsis(理想解法) 1.理想解法 ...

  2. 数学建模——支持向量机模型详解Python代码

    数学建模--支持向量机模型详解Python代码 from numpy import * import random import matplotlib.pyplot as plt import num ...

  3. 数学建模——线性规划模型详解Python代码

    数学建模--线性规划模型详解Python代码 标准形式为: min z=2X1+3X2+x s.t x1+4x2+2x3>=8 3x1+2x2>=6 x1,x2,x3>=0 上述线性 ...

  4. 数学建模常见模型总结

    数学建模常见模型总结 一.插值 当已有数据量不够,需要补充,且认定已有数据可信时,通常利用函数插值方法. 常用插值方法 拉格朗日插值 分段线性插值 Hermite 三次样条插值 克里金法 matlab ...

  5. 数学建模常用模型04:灰色关联分析法

    数学建模常用模型04:灰色关联分析法 灰色关联分析法 本文所用的资料参考来源:美赛资料网:美赛资料网 与灰色预测模型一样,比赛不能优先使用,灰色关联往往可以与层次分析结合使用.层次分析用在确定权重上面 ...

  6. 数学建模传染病模型_数学建模| 时间序列模型

    1 数学建模 时间序列模型 1.与实践有关系的一组数据,叫做时间序列: 2.得到时间序列的数据后,要构建模型,其中平稳时间序列的模型,是本节课重点介绍的: 3.y=at+季节性+周期性 一.     ...

  7. 数学建模常用模型(一):灰色预测法

    数学建模常用模型(一):灰色预测法 灰色预测法是一种用于处理少量数据.数据质量较差或者缺乏历史数据的预测方法.它适用于一些非线性.非平稳的系统,尤其在短期预测和趋势分析方面有着广泛的应用.灰色预测法作 ...

  8. 数学建模——多目标规划模型(智能优化算法NSGA-II)

    摘要 本篇笔记对数学建模中常见的多目标规划问题提供了解法:在建立传统的多目标规划的常用模型的基础上,使用智能优化算法对多目标规划问题进行求解,通过Pareto Front直观展现非劣解的分布情况,以解 ...

  9. 数学建模 聚类模型

    "物以类聚,人以群分",所谓的聚类,就是将样本划分为 由类似的对象组成的多个类的过程.聚类后,我们可以更加 准确的在每个类中单独使用统计模型进行估计.分析或预测: 也可以探究不同类 ...

  10. MATLAB数学建模-规划模型总结| MATLAB求解

    目录 1 线性规划问题(LP) 风格1 风格2 2 非线性规划 3 动态规划 A星算法 基于dijkstra的概率路线图 4 多目标规划 帕累托最优 支配(Dominace) 不可支配解集 帕累托最优 ...

最新文章

  1. 如何快速搭建智能人脸识别系统
  2. (三)spark集群DHCP IP变化后的处理
  3. tf.placeholder类似函数中的形参
  4. python生成器函数_【python】生成器和生成器函数
  5. k歌的录音伴奏合成技术如何实现_K歌神器,用唱吧麦克风攀登天籁高峰
  6. java 多线程系列基础篇(二)
  7. 在 TableLayoutPanel 控件中对齐和拉伸控件
  8. 关于 Linux 操作
  9. Spring容器扩展机制
  10. 阿里云搭建图片服务器,图片资源服务器搭建
  11. 如何通过Filter过滤敏感词汇
  12. 学习使用php简单读取pdf文件总页数的方法
  13. c语言实验上机报告,c语言上机实验报告_实验报告.doc
  14. supervise用法_supervise过去式和用法例句
  15. 链家网东莞二手房数据分析
  16. CM201-1广东移动盒子YS版(易视腾代工)TTL方式保留原系统 或不保留原系统方法
  17. java tiff 压缩_java – 多页Tiff压缩
  18. 小丑改造计划之动态规划
  19. 监控mysql删除记录_监控删除记录
  20. 2.前端笔记-JS-JS3种书写位置、注释、输入输出

热门文章

  1. 设计模式(二十三)—— 模板方法
  2. 根据href给当前导航添加样式
  3. 【leetcode】Permutations
  4. 搜狗输入法不能输入验证码,验证码错误怎么办?
  5. sql server 2012 镜像和出现的问题
  6. 为Web Service添加缓存
  7. del退役了/del 滚回来了
  8. CSS3实现垂直居中
  9. 20145231熊梓宏 《网络对抗》 实验四 恶意代码分析
  10. 水题 CodeForces 602C -Two Bases