最专业网站建设开发公众号注册平台

当前位置: 首页 > news >正文

最专业网站建设开发,公众号注册平台,wordpress 字母标签云,优化seo方法聚类算法
聚类算法和降维算法那都属于无监督算法。KMeans 是以一个值为中心, 然后所有其他点到该点距离最小值的累积和。 kmeans KMeans(n_clusters3) # n_clusters 分类数量 kmeans.fit(data.iloc[:,1:]) # 无监督#xff0c;只需要给数据X就可以 DBSCAN 算法是…聚类算法
聚类算法和降维算法那都属于无监督算法。KMeans 是以一个值为中心, 然后所有其他点到该点距离最小值的累积和。 kmeans KMeans(n_clusters3) # n_clusters 分类数量 kmeans.fit(data.iloc[:,1:]) # 无监督只需要给数据X就可以 DBSCAN 算法是以某点为起始点, 如果到该点距离的附近点的数量达到一定数量就可以进入该集合, 类似传销。 dbscan DBSCAN(eps 0.2,min_samples3) dbscan.fit(X) agg 算法是先找距离最近的点, 再根据距离的远近进行不断聚合。 agg AgglomerativeClustering(n_clusters6,linkageward) # 最近的距离作为标准 agg.fit(X) 一  聚类算法介绍 1.1、聚类作用 知识发现 发现事物之间的潜在关系异常值检测特征提取 数据压缩的例子1.2、有监督与无监督学习 有监督 给定训练集 X 和 标签Y选择模型学习目标函数的最优化, 训练fit生成模型本质上是一组参数、方程根据生成的一组参数进行预测分类等任务无监督 拿到的数据只有X 没有标签只能根据X的相似程度做一些事情。 Clustering 聚类对于大量未标注的数据集按照内在相似性来分为多个类别簇 目标类别内相似度大类别间相似小。也可以用来改变数据的维度可以将聚类结果作为一个维度添加到训练数据中。降维算法数据特征变少 1.3、数据间的相似度 每一条数据都可以理解为多维空间中的一个点。可以根据点和点之间的距离来评价数据间的相似度近朱者赤近墨者黑 数据间的距离类型: P 1 曼哈顿距离:   在二维空间中可以看出这种距离是计算两点之间的直角边距离相当于城市中出租汽车沿城市街道拐直角前进而不能走两点连接间的最短距离。P 2 欧氏距离就是两点之间的直线距离以下简称欧氏距离 P 无穷切比雪夫距离 哪个维度差值最大就是哪个差值作为距离。 1.4、余弦距离 将数据看做空间中的点的时候评价远近可以用欧氏距离或者余弦距离。 计算过程如下 将数据映射为高维空间中的点向量计算向量间的余弦值取值范围[-1,1] 越趋近于1代表越相似越趋近于-1代表方向相反0代表正交余弦相似度可以评价文章的相似度从而实现对文章进行分类。二  Kmeans 2.1、聚类原理 将N个样本映射到K个簇中每个簇至少有一个样本 基本思路 先给定K个划分迭代样本与簇的隶属关系每次都比前一次好一些迭代若干次就能得到比较好的结果 2.2、Kmeans算法原理 算法步骤 选择K个初始的簇中心逐个计算每个样本到簇中心的距离将样本归属到距离最小的那个簇中心的簇中每个簇内部计算平均值更新簇中心开始迭代2.3、KMeans优缺点 优点 简单效果不错缺点 对异常值敏感对初始值敏感对某些分布聚类效果不好 2.4、Kmeans损失函数 其中 μ 是簇的均值向量或者说是质心。其中 代表每个样本点到均值点的距离其实也是范数。 2.5、Kmeans初步使用 import numpy as np import matplotlib.pyplot as plt from sklearn.cluster import KMeans import pandas as pd# 需要将亚洲国家队分成三个类别

只有历年的统计数据没有目标值类别等级

data pd.read_csv(./AsiaFootball.txt)# 执行多次分类结果会有所不同 kmeans KMeans(n_clusters3) # n_clusters 分类数量

无监督只需要给数据X就可以

kmeans.fit(data.iloc[:,1:]) y_ kmeans.predict(data.iloc[:,1:])# 聚类算法预测、划分的类别 c data[国家].values for i in range(3):cond y_ i#索引条件print(类别是%d的国家有%(i),c[cond]) 2.6、Kmeans聚类算法K值选择 针对某个样本的轮廓系数s为 a某个样本与其所在簇内其他样本的平均距离b某个样本与其他簇样本的平均距离 聚类总的轮廓系数SC为所有样本的 的均值称为聚类结果的轮廓系数是该聚类是否合理、有效的度量。 import numpy as np from sklearn import datasets from sklearn.cluster import KMeans import matplotlib.pyplot as plt

聚类轮廓系数对聚类的评价指标对应数学公式

from sklearn.metrics import silhouette_score# 创建数据

假数据数据X划分成3类

X,y datasets.make_blobs(centers3) plt.scatter(X[:,0],X[:,1],c y)# 指定不同的k寻找最佳聚类类别数目

可以画图一目了然数据简单属性只有两个所以可以画图

属性多无法可视化评价指标

轮廓系数

plt.rcParams[font.sans-serif] KaiTi plt.rcParams[font.size] 18 plt.rcParams[axes.unicode_minus] False score [] for i in range(2,7):kmeans KMeans(nclustersi)kmeans.fit(X)y kmeans.predict(X)# 预测类别 标签

plt.scatter(X[:,0],X[:,1],c y_)score.append(silhouettescore(X,y))

print(当聚类类别是6的时候评价指标轮廓系数 ,silhouettescore(X,y))

plt.plot(range(2,7),score) plt.xlabel(K值) plt.ylabel(轮廓系数,c red)

结论当k值是3的时候轮廓系数最大这个时候说明划分效果最好2.7、Kmeans图像压缩

import matplotlib.pyplot as plt # plt 用于显示图片 from sklearn.cluster import KMeans import numpy as np plt.figure(figsize(8,4))# 加载图片显示原图 pixel plt.imread(11-bird.png) plt.subplot(1,2,1) plt.imshow(pixel)# 聚类运算压缩图片 pixel pixel.reshape((128*128 , 3)) kmeans KMeans(n_clusters8).fit(pixel)# 聚类结果合成新图片 newPixel kmeans.clustercenters[kmeans.labels_].reshape(128,128,3) plt.subplot(1,2,2) plt.imshow(newPixel)3、DBSCAN 3.1、算法介绍 DBSCANDensity-Based Spatial Clustering of Applications with Noise是一种基于密度的空间聚类算法。该算法将具有足够密度的区域划分为簇并在具有噪声的空间数据库中发现任意形状的簇它将簇定义为密度相连的点的最大集合。 基于密度这点有什么好处呢我们知道Kmeans聚类算法只能处理球形的簇也就是一个聚成实心的团这是因为算法本身计算平均距离的局限。但往往现实中还会有各种形状这个时候那些传统的聚类算法显然就悲剧了。于是就思考样本密度大的成一类呗。这就是DBSCAN聚类算法 . 3.2、DBSCAN参数解析 参数一 epsDBSCAN算法参数即我们的eps邻域的距离阈值和样本距离超过eps的样本点不在eps邻域内。默认值是0.5一般需要通过在多组值里面选择一个合适的阈值。eps过大则更多的点会落在核心对象的eps邻域此时我们的类别数可能会减少 本来不应该是一类的样本也会被划为一类。反之则类别数可能会增大本来是一类的样本却被划分开。参数二 min_samplesDBSCAN算法参数即样本点要成为核心对象所需要的eps 邻域的样本数阈值。默认值是5。参数与三 metrics距离度量参数, 一般使用的欧氏距离。 3.3、DBSCAN使用示例 import numpy as np from sklearn import datasets from sklearn.cluster import KMeans,DBSCAN import matplotlib.pyplot as plt# y中是两类0,1 X,y datasets.make_circles(n_samples1000,noise0.05,factor 0.5)

创建一个大圆包含小圆的样本集

centers [(1.5,1.5)] 元组代表着中心点的坐标值

y1一类0 2

X1,y1 datasets.make_blobs(n_samples500,n_features2,centers[(1.5,1.5)],clusterstd0.2)# 将circle和散点进行了数据合并 X np.concatenate([X,X1]) y np.concatenate([y,y1 2]) plt.scatter(X[:,0],X[:,1],c y)# 根据距离划分‘势力范围’ kmeans KMeans(3) kmeans.fit(X) y kmeans.labels_ plt.scatter(X[:,0],X[:,1],c y_)# 使用DBSCAN算法可以较好的区分 dbscan DBSCAN(eps 0.2,minsamples3) dbscan.fit(X) y dbscan.labels_ plt.scatter(X[:,0],X[:,1],c y_) 4、分层聚类 4.1、算法介绍 分层聚类输出层次结构这种结构比平面聚类返回的非结构化聚类集更具信息性。 分层聚类法hierarchical cluster method一译“系统聚类法”。聚类分析的一种方法。其做法是开始时把每个样品作为一类然后把最靠近的样品即距离最小的群品首先聚为小类再将已聚合的小类按其类间距离再合并不断继续下去最后把一切子类都聚合到一个大类。 4.2、算法原理 层次聚类 (Hierarchical Clustering) 是聚类算法的一种通过计算不同类别数据点间的相似度来创建一棵有层次的嵌套聚类树。在聚类树中不同类别的原始数据点是树的最低层树的顶层是一个聚类的根节点。创建聚类树有自下而上合并和自上而下分裂两种方法。 我们着重看一下自底向上的合并算法 Single Linkage:  方法是将两个组合数据点中距离最近的两个数据点间的距离作为这两个组合数据点的距离。这种方法容易受到极端值的影响。两个很相似的组合数据点可能由于其中的某个极端的数据点距离较近而组合在一起。Complete Linkage:  complete Linkage的计算方法与Single Linkage相反将两个组合数据点中距离最远的两个数据点间的距离作为这两个组合数据点的距离。Complete Linkage的问题也与Single Linkage相反两个不相似的组合数据点可能由于其中的极端值距离较远而无法组合在一起。Average Linkage:  Average Linkage的计算方法是计算两个组合数据点中的每个数据点与其他所有数据点的距离。将所有距离的均值作为两个组合数据点间的距离。这种方法计算量比较大但结果比前两种方法更合理。  我们使用Average Linkage计算组合数据点间的距离。下面是计算组合数据点(A,F)到(B,C)的距离这里分别计算了(A,F)和(B,C)两两间距离的均值。 4.3、参数介绍 n_clusters:  划分类别数目linkage:  度量两个子类的相似度时所依据的距离 Single Linkage将两个数据点集中距离最近的两个数据点的距离作为两个点集的距离。Complete Linkage将两个点集中距离最远的两个数据点的距离作为这两个点集的距离。上述两种方法容易受到极端值的影响计算大样本集效率较高。Average Linkage计算两个点集中的每个数据点与其他所有数据点的距离。将所有距离的均值作为两个点集间的距离。这种方法计算量比较大不过这种度量方法更合理。Ward最小化簇内方差。connectivity:  连接性约束作用只有相邻的簇才能合并在一起进行聚类 4.4、算法案例 import numpy as np import matplotlib.pyplot as plt import mpl_toolkits.mplot3d.axes3d as p3 from sklearn.cluster import AgglomerativeClustering from sklearn.datasets import make_swiss_roll# 创建数据 X,y datasets.make_swiss_roll(n_samples1500,noise 0.05) fig plt.figure(figsize(12,9)) a3 fig.add_subplot(projection 3d) a3.scatter(X[:,0],X[:,1],X[:,2],c y) a3.view_init(10,-80)# Kmeans只负责分类随机性类别是数字几不固定 clf KMeans(nclusters6) clf.fit(X) y clf.labels_ fig plt.figure(figsize(12,9)) a3 plt.subplot(projection 3d) a3.scatter(X[:,0],X[:,1],X[:,2],c y_) a3.view_init(10,-80)# 分层聚类 agg AgglomerativeClustering(nclusters6,linkageward) # 最近的距离为标准 agg.fit(X) y agg.labels_ fig plt.figure(figsize(12,9)) a3 plt.subplot(projection 3d) a3.scatter(X[:,0],X[:,1],X[:,2],c y_) a3.view_init(10,-80)对于这种非欧几何的数据下可见如果没有设置连接性约束将会忽视其数据本身的结构强制在欧式空间下聚类于是很容易形成了上图这种跨越流形的不同褶皱。 5、分层聚类改进 连接性约束对局部结构进行约束 from sklearn.neighbors import kneighbors_graph# graph图形的意思

邻居数量变少认为条件宽松

conn kneighbors_graph(X,n_neighbors10) #采用邻居进行约束 agg AgglomerativeClustering(n_clusters6,connectivityconn,linkageward)

最近的距离作为标准

agg.fit(X) y_ agg.labels_ fig plt.figure(figsize(12,9)) a3 fig.addsubplot(projection 3d) a3.scatter(X[:,0],X[:,1],X[:,2],c y) a3.view_init(10,-80)