1. 聚类分析

聚类分析(cluster analysis)是一组将研究对象分为相对同质的群组(clusters)的统计分析技术 ---->>

将观测对象的群体按照相似性和相异性进行不同群组的划分,划分后每个群组内部各对象相似度很高,而不同群组之间的对象彼此相异度很高。

*** 回归、分类、聚类的区别 :

  有监督学习 --->> 回归,分类    /   无监督学习  --->>聚类

  回归 -->>产生连续结果,可用于预测

  分类 -->>产生连续结果,可用于预测

  聚类 -->>产生一组集合,可用于降维。

本文主要介绍PCA主成分,K-means聚类

1.1 PCA主成分分析

1.2 PCA主成分的python实现方法

PCA主成分分析的python实现方法

最广泛无监督算法 + 基础的降维算法
通过线性变换将原始数据变换为一组各维度线性无关的表示,用于提取数据的主要特征分量 → 高维数据的降维

二维数据降维 / 多维数据降维

(1)二维数据降维

  1. import numpy as np
  2. import pandas as pd
  3. import matplotlib.pyplot as plt
  4. % matplotlib inline
  1. # 二维数据降维
  2. # 数据创建
  3. rng = np.random.RandomState(8)
  4. data = np.dot(rng.rand(2,2),rng.randn(2,200)).T #矩阵相乘的方法
  5. df = pd.DataFrame({'X1':data[:,0],
  6. 'X2':data[:,1]})
  7. print(df.head())
  8. print(df.shape)
  9.  
  10. plt.scatter(df['X1'],df['X2'], alpha = 0.8, marker = '.')
  11. plt.axis('equal')
  12. plt.grid()
  13. # 生成图表

  1. # 二维数据降维(二维降为一维只有1个特征值,2个特征向量
  2. # 构建模型,分析主成分
  3.  
  4. from sklearn.decomposition import PCA
  5. # 加载主成分分析模块PCA
  6.  
  7. pca = PCA(n_components = 1) # n_components = 1 → 降为1维
  8. pca.fit(df) # 构建模型
  9. # sklearn.decomposition.PCA(n_components=None, copy=True, whiten=False)
  10. # n_components: PCA算法中所要保留的主成分个数n,也即保留下来的特征个数n
  11. # copy: True或者False,默认为True → 表示是否在运行算法时,将原始训练数据复制一份
  12. # fit(X,y=None) → 调用fit方法的对象本身。比如pca.fit(X),表示用X对pca这个对象进行训练
  13. print(pca.explained_variance_) #特征值 [ 2.78300591] -
  14. print(pca.components_)#特征向量 [[ 0.7788006 0.62727158]]
  15. print(pca.n_components) #主成分,成分的个数 1
  16. #成分的结果值 = 2.78 * (0.77*x1 + 0.62 * x2) #通过这个来筛选它的主成分。
  17.  
  18. # components_:返回具有最大方差的成分。
  19. # explained_variance_ratio_:返回 所保留的n个成分各自的方差百分比。
  20. # n_components_:返回所保留的成分个数n。
  21.  
  22. # 这里是shape(200,2)降为shape(200,1),只有1个特征值,对应2个特征向量
  23. # 降维后主成分 A1 = 0.7788006 * X1 + 0.62727158 * X2
  24.  
  25. x_pca = pca.transform(df) #得到主成分A1的值;
  26. x_pca
  27.  
  28. x_pca = pca.transform(df) # 数据转换
  29. x_new = pca.inverse_transform(x_pca) # 将降维后的数据转换成原始数据的格式(二维的格式)
  30. print('original shape:',df.shape)
  31. print('transformed shape:',x_pca.shape)
  32. print(x_pca[:5])
  33. print('-----')
  34. # 主成分分析,生成新的向量x_pca
  35. # fit_transform(X) → 用X来训练PCA模型,同时返回降维后的数据,这里x_pca就是降维后的数据
  36. # inverse_transform() → 将降维后的数据转换成原始数据

  1. plt.scatter(df['X1'],df['X2'], alpha = 0.8, marker = '.') #原始数据的散点,黑点;
  2. plt.scatter(x_new[:,0],x_new[:,1], alpha = 0.8, marker = '.',color = 'r') #转换之后的散点,红色的就是最后的特征数据
  3. plt.axis('equal')
  4. plt.grid()
  5. # # 生成图表

构建模型--输出维度--加载数据--特征向量、特征值--

(2)多维数据降维

  1. # 多维数据降维 加载数据,用的是图像的一个数据。
  2. from sklearn.datasets import load_digits
  3. digits = load_digits()
  4. print(digits .keys())
  5. print('数据长度为:%i条' % len(digits['data']))
  6. print('数据形状为:%i条',digits.data.shape) #总共1797条数据,每条数据有64个变量
  7. print(digits.data[:2])
  8. # 导入数据

  1. # 多维数据降维
  2. # 构建模型,分析主成分
  3.  
  4. pca = PCA(n_components = 2) # 降为2纬
  5. projected = pca.fit_transform(digits.data)
  6. print('original shape:',digits.data.shape) #降维前
  7. print('transformed shape:',projected.shape) #降维后的
  8. projected[:5]

  1. print(pca.explained_variance_) # 输出特征值 ;降了2个维度 ,所以它的特征值只显178.9和163.6,贡献率算的话这两个肯定都属于主成分。
  2. # print(pca.components_) # 输出特征向量 ,64个特征向量 .shape是形状 ; 2个维度要把其中的64个都给算出来
  3. #print(projected) # 输出解析后数据
  4. # 降维后,得到2个成分,每个成分有64个特征向量
  5.  
  6. plt.scatter(projected[:,0],projected[:,1],
  7. c = digits.target, edgecolor = 'none',alpha = 0.5,
  8. cmap = 'Reds',s = 5)
  9. plt.axis('equal')
  10. plt.grid()
  11. plt.colorbar()
  12. # 二维数据制图

  1. # 多维数据降维
  2. # 主成分筛选
  3.  
  4. pca = PCA(n_components = 10) # 降为10纬
  5. projected = pca.fit_transform(digits.data)
  6. print('original shape:',digits.data.shape)
  7. print('transformed shape:',projected.shape)
  8. print(pca.explained_variance_) # 输出特征值 ;10个特征值
  9. print(pca.components_.shape) # 输出特征向量形状
  10. #print(projected) # 输出解析后数据
  11. # 降维后,得到10个成分,每个成分有64个特征向量
  12.  
  13. c_s = pd.DataFrame({'b':pca.explained_variance_, #把所有特征值筛选出来看是否有主成分
  14. 'b_sum':pca.explained_variance_.cumsum()/pca.explained_variance_.sum()})
  15. print(c_s)
  16. # 做贡献率累计求和,再除以它的总和
  17. # 可以看到第7个成分时候,贡献率超过85% → 选取前7个成分作为主成分

  1. c_s['b_sum'].plot(style = '--ko', figsize = (10,4))
  2. plt.axhline(0.85,hold=None,color='r',linestyle="--",alpha=0.8)
  3. plt.text(6,c_s['b_sum'].iloc[6]-0.08,'第7个成分累计贡献率超过85%',color = 'r')
  4. plt.grid()

3. K-means聚类的python实现方法

最常用的机器学习聚类算法,且为典型的基于距离的聚类算法
K均值: 基于原型的、划分的距离技术,它试图发现用户指定个数(K)的簇
以欧式距离作为相似度测度

  1. # 创建数据
  2.  
  3. from sklearn.datasets.samples_generator import make_blobs
  4. # make_blobs聚类数据生成器
  5.  
  6. x,y_true = make_blobs(n_samples = 300, # 生成300条数据
  7. centers = 4, # 四类数据
  8. cluster_std = 0.5, # 方差一致,越小聚集越小,越大越分散;也可以分散地写 [0.2,0.2,0.3,0.5],
  9. random_state = 0)
  10. print(x[:5])
  11. print(y_true[:5])
  12. # n_samples → 待生成的样本的总数。
  13. # n_features → 每个样本的特征数。
  14. # centers → 类别数
  15. # cluster_std → 每个类别的方差,如多类数据不同方差,可设置为[1.0,3.0](这里针对2类数据)
  16. # random_state → 随机数种子
  17. # x → 生成数据值, y → 生成数据对应的类别标签
  18.  
  19. plt.scatter(x[:,0],x[:,1],s = 10,alpha = 0.8)
  20. plt.grid()
  21. # 绘制图表

  1. from sklearn.cluster import KMeans
  2. kmeans = KMeans(n_clusters =) #4个类别,这里写它一共有多少个簇;
  3. kmeans.fit(x) #加载构建数据
  4. y_kmeans = kmeans.predict(x) #生成聚类之后的一个类别值,分好类的数据标签
  5. centroids = kmeans.cluster_centers_ #生成4个类的中心点
  6. # 构建模型,并预测出样本的类别y_kmeans
  7. # kmeans.cluster_centers_:得到不同簇的中心点
  8.  
  9. plt.scatter(x[:, 0], x[:, 1], c = y_kmeans, cmap = 'Dark2', s = 50, alpha = 0.5, marker = 'x')
  10. plt.scatter(x[:,0],x[:,1],c = y_kmeans, cmap = 'Dark2', s= 50,alpha = 0.5,marker='x')
  11. plt.scatter(centroids[:,0],centroids[:,1],c = [0,1,2,3], cmap = 'Dark2',s= 70,marker='o')
  12. plt.title('K-means 300 points\n')
  13. plt.xlabel('Value1')
  14. plt.ylabel('Value2')
  15. plt.grid()
  16. # 绘制图表
  17. centroids

数学模型:3.非监督学习--聚类分析 和K-means聚类的更多相关文章

  1. 5-Spark高级数据分析-第五章 基于K均值聚类的网络流量异常检测

    据我们所知,有‘已知的已知’,有些事,我们知道我们知道:我们也知道,有 ‘已知的未知’,也就是说,有些事,我们现在知道我们不知道.但是,同样存在‘不知的不知’——有些事,我们不知道我们不知道. 上一章 ...

  2. k-meas非监督聚类分析

    实验名称: k-meas非监督聚类分析   一.实验目的和要求 目的: 加深对非监督学习的理解和认识 掌握聚类方法K-Means算法的设计方法   要求:     根据聚类数据,采用k-Means聚类 ...

  3. Standford机器学习 聚类算法(clustering)和非监督学习(unsupervised Learning)

    聚类算法是一类非监督学习算法,在有监督学习中,学习的目标是要在两类样本中找出他们的分界,训练数据是给定标签的,要么属于正类要么属于负类.而非监督学习,它的目的是在一个没有标签的数据集中找出这个数据集的 ...

  4. 5.1_非监督学习之sckit-learn

    非监督学习之k-means K-means通常被称为劳埃德算法,这在数据聚类中是最经典的,也是相对容易理解的模型.算法执行的过程分为4个阶段. 1.首先,随机设K个特征空间内的点作为初始的聚类中心. ...

  5. KNN 与 K - Means 算法比较

    KNN K-Means 1.分类算法 聚类算法 2.监督学习 非监督学习 3.数据类型:喂给它的数据集是带label的数据,已经是完全正确的数据 喂给它的数据集是无label的数据,是杂乱无章的,经过 ...

  6. Deep Learning论文笔记之(三)单层非监督学习网络分析

    Deep Learning论文笔记之(三)单层非监督学习网络分析 zouxy09@qq.com http://blog.csdn.net/zouxy09          自己平时看了一些论文,但老感 ...

  7. 如何区分监督学习(supervised learning)和非监督学习(unsupervised learning)

    监督学习:简单来说就是给定一定的训练样本(这里一定要注意,样本是既有数据,也有数据对应的结果),利用这个样本进行训练得到一个模型(可以说是一个函数),然后利用这个模型,将所有的输入映射为相应的输出,之 ...

  8. keras03 Aotuencoder 非监督学习 第一个自编码程序

    # keras# Autoencoder 自编码非监督学习# keras的函数Model结构 (非序列化Sequential)# 训练模型# mnist数据集# 聚类 https://www.bili ...

  9. Machine Learning——Unsupervised Learning(机器学习之非监督学习)

    前面,我们提到了监督学习,在机器学习中,与之对应的是非监督学习.无监督学习的问题是,在未加标签的数据中,试图找到隐藏的结构.因为提供给学习者的实例是未标记的,因此没有错误或报酬信号来评估潜在的解决方案 ...

随机推荐

  1. bootstrap栅格系统中同行div高度不一致的解决方法

    通过div底部的margin和padding实现,缺点:下边框无法完整显示,建议在无边框情况下使用 .row{ overflow: hidden; } [class*="col-" ...

  2. 体验go语言的风骚式编程

    最近想搞搞后台开发,话说注意力就转移到了公司用的golang.用Go做微服务比较方便,或许是因为golang强悍的语法吧,看到go的语法,自己已被深深的吸引.关于学习后台如何选择可以参考<做后台 ...

  3. Notepad++怎么增加整行删除快捷键?添加/取消区块注释?

    1.有网友说 Notepad++ 自带删除行功能,用快捷键 Ctrl+L 就可以删除一行.的确,这个快捷键是可以删除一行文本,但确切的说,Ctrl+L 并不是仅仅删除了一行文本,而是 剪切 了一行文本 ...

  4. Confluence 6 管理协同编辑 - 修改编辑模式

    编辑模式确定了你站点所有用户使用协同编辑的体验,这个是你对协同编辑进行启用和关闭的地方. 希望修改编辑模式: 进入  > 基本配置(General Configuration) > 协同编 ...

  5. Confluence 6 附件存储文件系统的分级

    从 Confluence 3.0 开始,附件的存储方式有了重大的改变和升级.如果你是从 Confluence 2.10 及其早期版本升级上来的,请参考 Upgrading Confluence 页面中 ...

  6. light1370 欧拉函数打表

    /* 给定n个数ai,要求欧拉函数值大于ai的最小的数bi 求sum{bi} */ #include<bits/stdc++.h> using namespace std; #define ...

  7. C/C++返回内部静态成员的陷阱(转)

    在我们用C/C++开发的过程中,总是有一个问题会给我们带来苦恼.这个问题就是函数内和函数外代码需要通过一块内存来交互(比如,函数返回字符串),这个问题困扰和很多开发人员.如果你的内存是在函数内栈上分配 ...

  8. 调试阶段 获取微信小程序openid

    wx.login({ success: function(res) { //首先获取用户code //res.code wx.request({ url: 'https://api.weixin.qq ...

  9. gitlab报错502及处理

    报错截图: 解决: 1.端口问题 如上面写的815端口,那配置文件的8080端口都改成815端口 之后重新载入配置文件,并开启 gitlab-ctl reconfigure gitlab-ctl st ...

  10. 步步为营102-Css样式加个版本

    背景:当系统发布后修改了css样式,由于浏览器有缓存,所以会造成css样式无效.可通过在css中添加版本号来解决 1 修改css引用 <link rel="stylesheet&quo ...