数学模型:3.非监督学习--聚类分析 和K-means聚类

1. 聚类分析

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

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

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

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

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

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

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

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

1.1 PCA主成分分析

1.2 PCA主成分的python实现方法

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

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

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

(1)二维数据降维

# 二维数据降维(二维降为一维只有1个特征值,2个特征向量)
# 构建模型,分析主成分

from sklearn.decomposition import PCA
# 加载主成分分析模块PCA

pca = PCA(n_components = 1)  # n_components = 1 → 降为1维
pca.fit(df)  # 构建模型
# sklearn.decomposition.PCA(n_components=None, copy=True, whiten=False)
# n_components:  PCA算法中所要保留的主成分个数n,也即保留下来的特征个数n
# copy: True或者False,默认为True → 表示是否在运行算法时,将原始训练数据复制一份
# fit(X,y=None) → 调用fit方法的对象本身。比如pca.fit(X),表示用X对pca这个对象进行训练
print(pca.explained_variance_) #特征值       [ 2.78300591]
print(pca.components_)#特征向量              [[ 0.7788006   0.62727158]]
print(pca.n_components) #主成分,成分的个数  1
#成分的结果值 = 2.78 * (0.77*x1 + 0.62 * x2)

# components_:返回具有最大方差的成分。
# explained_variance_ratio_:返回 所保留的n个成分各自的方差百分比。
# n_components_:返回所保留的成分个数n。

# 这里是shape(200,2)降为shape(200,1),只有1个特征值,对应2个特征向量
# 降维后主成分 A1 = 0.7788006 * X1 + 0.62727158 * X2

x_pca = pca.transform(df)
x_pca

x_pca = pca.transform(df)  # 数据转换
x_new = pca.inverse_transform(x_pca)  # 将降维后的数据转换成原始数据
print(‘original shape:‘,df.shape)
print(‘transformed shape:‘,x_pca.shape)
print(x_pca[:5])
print(‘-----‘)
# 主成分分析,生成新的向量x_pca
# fit_transform(X) → 用X来训练PCA模型,同时返回降维后的数据,这里x_pca就是降维后的数据
# inverse_transform() → 将降维后的数据转换成原始数据

plt.scatter(df[‘X1‘],df[‘X2‘], alpha = 0.8, marker = ‘.‘)
plt.scatter(x_new[:,0],x_new[:,1], alpha = 0.8, marker = ‘.‘,color = ‘r‘)
plt.axis(‘equal‘)
plt.grid()
# # 生成图表

(2)多维数据降维

# 多维数据降维
# 加载数据

from sklearn.datasets import load_digits
digits = load_digits()
print(digits .keys())
print(‘数据长度为:%i条‘ % len(digits[‘data‘]))
print(‘数据形状为:%i条‘,digits.data.shape) #总共1797条数据,每条数据有64个变量
print(digits.data[:2])
# 导入数据

# 多维数据降维
# 构建模型,分析主成分

pca = PCA(n_components = 2)  # 降为2纬
projected = pca.fit_transform(digits.data)
print(‘original shape:‘,digits.data.shape)
print(‘transformed shape:‘,projected.shape)
projected[:5]

print(pca.explained_variance_)  # 输出特征值
# print(pca.components_)  # 输出特征向量 ,64个特征向量  .shape是形状
#print(projected)  # 输出解析后数据
# 降维后,得到2个成分,每个成分有64个特征向量

plt.scatter(projected[:,0],projected[:,1],
           c = digits.target, edgecolor = ‘none‘,alpha = 0.5,
           cmap = ‘Reds‘,s = 5)
plt.axis(‘equal‘)
plt.grid()
plt.colorbar()
# 二维数据制图

# 多维数据降维
# 主成分筛选

pca = PCA(n_components = 10)  # 降为10纬
projected = pca.fit_transform(digits.data)
print(‘original shape:‘,digits.data.shape)
print(‘transformed shape:‘,projected.shape)
print(pca.explained_variance_)  # 输出特征值
print(pca.components_.shape)  # 输出特征向量形状
#print(projected)  # 输出解析后数据
# 降维后,得到10个成分,每个成分有64个特征向量

c_s = pd.DataFrame({‘b‘:pca.explained_variance_,
                   ‘b_sum‘:pca.explained_variance_.cumsum()/pca.explained_variance_.sum()})
print(c_s)
# 做贡献率累计求和
# 可以看到第7个成分时候,贡献率超过85% → 选取前7个成分作为主成分

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

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

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

# 创建数据

from sklearn.datasets.samples_generator import make_blobs
# make_blobs聚类数据生成器

x,y_true = make_blobs(n_samples = 300,   # 生成300条数据
                     centers = 4,        # 四类数据
                     cluster_std = 0.5,  # 方差一致,越小聚集越小,越大越分散
                     random_state = 0)
print(x[:5])
print(y_true[:5])
# n_samples → 待生成的样本的总数。
# n_features → 每个样本的特征数。
# centers → 类别数
# cluster_std → 每个类别的方差,如多类数据不同方差,可设置为[1.0,3.0](这里针对2类数据)
# random_state → 随机数种子
# x → 生成数据值, y → 生成数据对应的类别标签

plt.scatter(x[:,0],x[:,1],s = 10,alpha = 0.8)
plt.grid()
# 绘制图表

from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters = 4)
kmeans.fit(x)
y_kmeans = kmeans.predict(x)
centroids = kmeans.cluster_centers_
# 构建模型,并预测出样本的类别y_kmeans
# kmeans.cluster_centers_:得到不同簇的中心点

plt.scatter(x[:, 0], x[:, 1], c = y_kmeans, cmap = ‘Dark2‘, s = 50, alpha = 0.5, marker = ‘x‘)
plt.scatter(x[:,0],x[:,1],c = y_kmeans, cmap = ‘Dark2‘, s= 50,alpha = 0.5,marker=‘x‘)
plt.scatter(centroids[:,0],centroids[:,1],c = [0,1,2,3], cmap = ‘Dark2‘,s= 70,marker=‘o‘)
plt.title(‘K-means 300 points\n‘)
plt.xlabel(‘Value1‘)
plt.ylabel(‘Value2‘)
plt.grid()
# 绘制图表
centroids

原文地址:https://www.cnblogs.com/shengyang17/p/9655943.html

时间: 2024-11-08 20:55:54

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

k means聚类过程

k-means是一种非监督 (从下图0 当中我们可以看到训练数据并没有标签标注类别)的聚类算法 0.initial 1.select centroids randomly 2.assign points 3.update centroids 4.reassign points 5.update centroids 6.reassign points 7.iteration reference: https://www.naftaliharris.com/blog/visualizing-k-me

k-meas非监督聚类分析

实验名称: k-meas非监督聚类分析 一.实验目的和要求 目的: 加深对非监督学习的理解和认识 掌握聚类方法K-Means算法的设计方法 要求:     根据聚类数据,采用k-Means聚类方法画出聚类中心 二.实验环境.内容和方法 环境:windows 7,python2.6 ,Eclipse,Pydev 内容: 1)   非监督学习的理论基础 2)   动态聚类分析的思想和理论依据 3)   聚类算法的评价指标 三.实验基本原理 K-means算法是很典型的基于距离的聚类算法,采用距离作为

5.1_非监督学习之sckit-learn

非监督学习之k-means K-means通常被称为劳埃德算法,这在数据聚类中是最经典的,也是相对容易理解的模型.算法执行的过程分为4个阶段. 1.首先,随机设K个特征空间内的点作为初始的聚类中心. 2.然后,对于根据每个数据的特征向量,从K个聚类中心中寻找距离最近的一个,并且把该数据标记为这个聚类中心. 3.接着,在所有的数据都被标记过聚类中心之后,根据这些数据新分配的类簇,通过取分配给每个先前质心的所有样本的平均值来创建新的质心重,新对K个聚类中心做计算. 4.最后,计算旧和新质心之间的差异

第五章 非监督学习

0 写在前面 前两天多看了两章一直都没更新,今天写的时候发现有些忘了,刚好捡起来回顾一下,近来也没什么事,兴趣来了就在图书馆泡一天看看自己喜欢的.再次重复下,这是第一遍,加之基础不好,明年才有可能出去实习,现在主要看看大概的知识框架,后续还会回头细看.扯远啦,步入正题. 相比于监督学习,非监督学习的输入数据没有标签信息,需要通过算法模型来挖掘数据内在的结构和模式.非监督学习主要包括两大类学习方法:数据聚类和特征变量关联. 1 K均值聚类 分类问题属于监督学习范畴,而聚类则是非监督学习.K-mea

监督学习与非监督学习

1.监督学习 是有特征和标签的,即便是没有标签的,机器也是可以通过特征和标签之间的关系,判断出标签.监督学习是通过训练让机器自己找到特征和标签之间的联系,在以后面对只有特征而没有标签的数据时可以自己判别出标签.相当于给定数据,预测标签.常见的有监督学习算法:回归分析和统计分类. 2.非监督学习 由于训练数据中只有特征没有标签,所以就需要自己对数据进行聚类分析,然后就可以通过聚类的方式从数据中提取一个特殊的结构.输入的数据没有标记,也没有确定的结果,只有特征,没有标签.无监督学习的方法分为两大类:

监督学习、 非监督学习、 半监督学习

在机器学习(Machine learning)领域,主要有三类不同的学习方法: 监督学习(Supervised learning). 非监督学习(Unsupervised learning). 半监督学习(Semi-supervised learning), 监督学习:通过已有的一部分输入数据与输出数据之间的对应关系,生成一个函数,将输入映射到合适的输出,例如分类.非监督学习:直接对输入数据集进行建模,例如聚类. 半监督学习:综合利用有类标的数据和没有类标的数据,来生成合适的分类函数. 一.监督

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

前面,我们提到了监督学习,在机器学习中,与之对应的是非监督学习.无监督学习的问题是,在未加标签的数据中,试图找到隐藏的结构.因为提供给学习者的实例是未标记的,因此没有错误或报酬信号来评估潜在的解决方案.这区别于监督学习和强化学习无监督学习. 无监督学习是密切相关的统计数据密度估计的问题.然而无监督学习还包括寻求,总结和解释数据的主要特点等诸多技术.在无监督学习使用的许多方法是基于用于处理数据的数据挖掘方法. 我们来看两张图片: 从图中我们可以看到:非监督学习中没有任何的标签或者是有相同的标签或者

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

监督学习:简单来说就是给定一定的训练样本(这里一定要注意,样本是既有数据,也有数据对应的结果),利用这个样本进行训练得到一个模型(可以说是一个函数),然后利用这个模型,将所有的输入映射为相应的输出,之后对输出进行简单的判断从而达到了分类(或者说回归)的问题.简单做一个区分,分类就是离散的数据,回归就是连续的数据. 非监督学习:同样,给了样本,但是这个样本是只有数据,但是没有其对应的结果,要求直接对数据进行分析建模. 比如我们去参观一个画展,我们完全对艺术一无所知,但是欣赏完多幅作品之后,我们也能

Machine learning —Machine learning :分类和聚类,监督学习和非监督学习

印象笔记同步分享:Machine Learning-分类和聚类,监督学习和非监督学习