无监督学习-主成分分析和聚类分析

聚类分析(cluster analysis)是将一组研究对象分为相对同质的群组(clusters)的统计分析技术,即将观测对象的群体按照相似性和相异性进行不同群组的划分,划分后每个群组内部各对象相似度很高,而不同群组之间的对象彼此相异度很高。

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

  • 有监督学习 --->> 回归、分类    /   无监督学习  --->>聚类
  • 回归 -->>产生连续结果,可用于预测
  • 分类 -->>产生连续结果,可用于预测
  • 聚类 -->>产生一组集合,可用于降维

一、PCA主成分分析

 

二、PCA主成分的python实现方法

通过sklearn的PCA类实现,from sklearn.decomposition import PCA

pca = PCA(n_components=1) # n_components参数表示最终维度

pca.fit(data) #创建模型

data_pca = pca.transform(data) #降维,创建模型和降维可通过一步实现fit_transform

data_inverse = pca.inverse_transform(data_pca) #根据降维结果反算原始数据

1.二维数据降维

rng = np.random.RandomState(8)
data = np.dot(rng.rand(2,2),rng.randn(2,200)).T  #矩阵相乘
df = pd.DataFrame({'X1':data[:,0],'X2':data[:,1]})
print(df.shape)
print(df.head())
plt.scatter(df['X1'],df['X2'],alpha = 0.8,marker = '.')
plt.axis('equal')  #坐标轴每个单位表示的刻度相同
# (200, 2)
#          X1        X2
# 0 -1.174787 -1.404131
# 1 -1.374449 -1.294660
# 2 -2.316007 -2.166109
# 3  0.947847  1.460480
# 4  1.762375  1.640622

from sklearn.decomposition import PCA
pca = PCA(n_components=1) # n_components参数表示最终维度
pca.fit(df)
print(pca.explained_variance_)
print(pca.components_)
# print(pca.n_components) #返回保留的成分个数
# print(pca.explained_variance_ratio_) 
# 结果降为几个维度,就有几个特征值;原始数据有几个维度,就有几个特征向量
# explained_variance_:特征值
# components_:返回具有最大方差的成分,即特征向量# 这里是shape(200,2)降为shape(200,1),只有1个特征值,对应2个特征向量
# 降维后主成分 A1 = 0.7788006 * X1 + 0.62727158 * X2
# 成分的结果值 = 2.80 * (-0.77*x1 -0.62 * x2) #通过这个来筛选它的主成分

df_pca = pca.transform(df)  # 数据转换,将原始二维数据转换为降维后的一维数据
df_inverse = pca.inverse_transform(df_pca)  # 数据转换,将降维后的一维数据转换成原始的二维数据
print('original shape:',df.shape)
print('transformed shape:',df_pca.shape)
print(df.head(10))
print(df_pca[:10])
print(df_inverse[:10])

plt.scatter(df['X1'],df['X2'], alpha = 0.8, marker = '.') #原始数据散点;
plt.scatter(x_inverse[:,0],x_inverse[:,1], alpha = 0.8, marker = '.',color = 'r') #转换之后的散点,红色的就是最后的特征数据
plt.axis('equal')

2.多维数据降维

 多维数据降维,使用自带的图像数据进行测试。

from sklearn.datasets import load_digits
digits = load_digits()
print(type(digits))
print(digits.data[:2])
print('数据长度为:%i条' % len(digits['data']))
print('数据形状为:',digits.data.shape) #总共1797条数据,每条数据有64个变量
print('字段:',digits.keys())
print('分类(数值):',digits.target)
print('分类(名称):',digits.target_names)

 

将上述数据由64维降为2维,降维后的2个维度肯定都是主成分。

pca = PCA(n_components=2)  #降为2维
projected = pca.fit_transform(digits.data)  #相当于先fit构建模型,再transform进行转换
projected[:2]
print('original shape:',digits.data.shape)
print('transformed shape:',projected.shape)
print('特征值',pca.explained_variance_)  #2个特征值
print('特征向量',pca.components_.shape) #2个成分,每个成分都有64个特征向量# original shape: (1797, 64)
# transformed shape: (1797, 2)
# 特征值 [179.0069301  163.71774688]
# 特征向量 (2, 64)
plt.scatter(projected[:,0],projected[:,1],s = 10,c = digits.target, cmap='Reds',edgecolor = 'none',alpha = 0.5)
plt.colorbar()

 

将上述数据降为10维,并求主要成分。

pca = PCA(n_components=10)  #降为10维
projected = pca.fit_transform(digits.data)  #相当于先fit构建模型,再transform进行转换
projected[:2]
print('original shape:',digits.data.shape)
print('transformed shape:',projected.shape)
print(pca.explained_variance_)  # 输出特征值 ;10个特征值
print(pca.components_.shape)  # 输出特征向量形状

s = pca.explained_variance_
c_s = pd.DataFrame({'x':s,'x_cumsum':s.cumsum()/s.sum()})
print(c_s)
c_s['x_cumsum'].plot(style = '--ko', figsize = (10,4))
plt.axhline(0.85,color='r',linestyle="--",alpha=0.8)  
plt.text(6,c_s['x_cumsum'].iloc[6]-0.1,'第7个成分累计贡献率超过85%',color = 'r')
plt.grid()

   

 

三、K-means聚类的python实现方法

K-means聚类是最常用的机器学习聚类算法,且为典型的基于距离的聚类算法。主要步骤为:

kmeans = KMeans(n_clusters=4) #创建模型

kmeans.fit(x) #导入数据

y_kmeans = kmeans.predict(x) #预测每个数据属于哪个类

centroids = kmeans.cluster_centers_ #每个类的中心点

 先使用sklearn自带的生成器生成数据

from sklearn.datasets.samples_generator import make_blobs  # make_blobs聚类数据生成器
x,y_true = make_blobs(n_samples=300,centers=4,cluster_std=0.5,random_state=0)
print(x[:5])
print(y_true[:5])# n_samples 生成的样本总数
# centers 类别数
# cluster_std 每个类别的方差,如果多类数据不同方差可设置为[std1,std2,...stdn]
# random_state 随机数种子
# x 生成的数据,y 数据对应的类别
# n_features 每个样本的特征数

plt.scatter(x[:,0],x[:,1],s=10,alpha=0.8)

   

通过sklearn的KMeans进行聚类分析

from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=4)  #创建模型
kmeans.fit(x)  #导入数据
y_kmeans = kmeans.predict(x)  #预测每个数据属于哪个类
centroids = kmeans.cluster_centers_ #每个类的中心点
plt.scatter(x[:,0],x[:,1],s=30,c=y_kmeans,cmap = 'Dark2',alpha=0.5,marker='x')
plt.scatter(centroids[:,0],centroids[:,1],s=70,c=[0,1,2,3],cmap = 'Dark2',marker='o')
plt.title('K-means 300 points')
plt.xlabel('value1')
plt.ylabel('value2')

 

转载于:https://www.cnblogs.com/Forever77/p/11386031.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/391594.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

struts实现分页_在TensorFlow中实现点Struts

struts实现分页If you want to get started on 3D Object Detection and more specifically on Point Pillars, I have a series of posts written on it just for that purpose. Here’s the link. Also, going through the Point Pillars paper directly will be really help…

MySQL-InnoDB索引实现

联合索引提高查询效率的原理 MySQL会为InnoDB的每个表建立聚簇索引,如果表有索引会建立二级索引。聚簇索引以主键建立索引,如果没有主键以表中的唯一键建立,唯一键也没会以隐式的创建一个自增的列来建立。聚簇索引和二级索引都是一个b树&…

钉钉设置jira机器人_这是当您机器学习JIRA票证时发生的事情

钉钉设置jira机器人For software developers, one of the most-debated and maybe even most-hated questions is “…and how long will it take?”. I’ve experienced those discussions myself, which oftentimes lacked precise information on the requirements. What I…

vscode 标准库位置_如何在VSCode中使用标准

vscode 标准库位置I use Visual Studio Code as my text editor. When I write JavaScript, I follow JavaScript Standard Style.Theres an easy way to integrate Standard in VS Code—with the vscode-standardjs plugin. I made a video for this some time ago if youre …

IBM量子计算新突破:成功构建50个量子比特原型机

本文来自AI新媒体量子位(QbitAI)IBM去年开始以云计算服务的形式提供量子计算能力。当时,IBM发布了包含5个量子比特的计算机。在短短18个月之后,IBM周五宣布,将发布包含20个量子比特的计算机。 IBM还宣布,该…

小程序点击地图气泡获取气泡_气泡上的气泡

小程序点击地图气泡获取气泡Combining two colors that are two steps apart on the Color Wheel creates a Diad Color Harmony. This Color Harmony is one of the lesser used ones. I decided to cover it here to add variety to your options for colorizing visualizati…

PopTheBubble —测量媒体偏差的产品创意

产品管理 (Product Management) A couple of months ago, I decided to try something new. The MVP Lab by Mozilla is an 8-week incubator for pre-startup teams to explore product concepts and, over the 8 weeks of the program, ship a minimum viable product that p…

linux-Centos7安装nginx

首先配置linux环境,我这里是刚刚装好linux,所以一次性安装了一系列我需要到的环境; yum install pcre pcre-devel zlib zlib-devel openssl openssl-devel gd gd-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel e…

elasticsearch,elasticsearch-service安装

在Windows上安装Elasticsearch.zip 1 安装条件 安装需具备java 8或更高版本;官方的Oracle发行版,只需安装JDKElasticsearch的ZIP安装包——安装包地址 2 如何安装 Elasticsearch 傻瓜式的点下一步即可, java 注意环境变量配置 3 如何判断安装…

图表可视化seaborn风格和调色盘

seaborn是基于matplotlib的python数据可视化库,提供更高层次的API封装,包括一些高级图表可视化等工具。 使用seaborn需要先安装改模块pip3 install seaborn 。 一、风格style 包括set() / set_style() / axes_style() / despine() / set_context() 创建正…

面向Tableau开发人员的Python简要介绍(第3部分)

用PYTHON探索数据 (EXPLORING DATA WITH PYTHON) One of Tableau’s biggest advantages is how it lets you swim around in your data. You don’t always need a fine-tuned dashboard to find meaningful insights, so even someone with quite a basic understanding of T…

7、芯片发展

第一台继电器式计算机由康德拉.楚泽制造(1910-1995),这台机器使用了二进制数,但早期版本中使用的是机械存储器而非继电器,使用老式35毫米电影胶片进行穿孔编程。 同一时期,哈佛大学研究生霍华德.艾肯 要寻找…

seaborn分布数据可视化:直方图|密度图|散点图

系统自带的数据表格(存放在github上https://github.com/mwaskom/seaborn-data),使用时通过sns.load_dataset(表名称)即可,结果为一个DataFrame。 print(sns.get_dataset_names()) #获取所有数据表名称 # [anscombe, attention, …

pymc3使用_使用PyMC3了解飞机事故趋势

pymc3使用Visually exploring historic airline accidents, applying frequentist interpretations and validating changing trends with PyMC3.使用PyMC3直观地浏览历史性航空事故,应用常识性解释并验证变化趋势。 前言 (Preface) On the 7th of August this yea…

爬虫结果数据完整性校验

数据完整性分为三个方面: 1、域完整性(列) 限制输入数据的类型,及范围,或者格式,如性别字段必须是“男”或者“女”,不允许其他数据插入,成绩字段只能是0-100的整型数据,…

go map数据结构

map数据结构 key-value的数据结构,又叫字典或关联数组 声明:var map1 map[keytype]valuetype var a map[string]string var a map[string]int var a map[int]string var a map[string]map[string]string备注:声明是不会分配内存的&#xff0c…

吴恩达神经网络1-2-2_图神经网络进行药物发现-第2部分

吴恩达神经网络1-2-2预测毒性 (Predicting Toxicity) 相关资料 (Related Material) Jupyter Notebook for the article Jupyter Notebook的文章 Drug Discovery with Graph Neural Networks — part 1 图神经网络进行药物发现-第1部分 Introduction to Cheminformatics 化学信息…

Android热修复之 - 阿里开源的热补丁

1.1 基本介绍     我们先去github上面了解它https://github.com/alibaba/AndFix 这里就有一个概念那就AndFix.apatch补丁用来修复方法,接下来我们看看到底是怎么实现的。1.2 生成apatch包      假如我们收到了用户上传的崩溃信息,我们改完需要修复…

seaborn分类数据可视:散点图|箱型图|小提琴图|lv图|柱状图|折线图

一、散点图stripplot( ) 与swarmplot() 1.分类散点图stripplot( ) 用法stripplot(xNone, yNone, hueNone, dataNone, orderNone, hue_orderNone,jitterTrue, dodgeFalse, orientNone, colorNone, paletteNone,size5, edgecolor"gray", linewi…

数据图表可视化_数据可视化十大最有用的图表

数据图表可视化分析师每天使用的最佳数据可视化图表列表。 (List of best data visualization charts that Analysts use on a daily basis.) Presenting information or data in a visual format is one of the most effective ways. Researchers have proved that the human …