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

十大旅游网站排名代理网址ag80hncom

十大旅游网站排名,代理网址ag80hncom,免费小说网站怎么做,昌江区网站建设机器学习——聚类算法一 文章目录 前言一、基于numpy实现聚类二、K-Means聚类2.1. 原理2.2. 代码实现2.3. 局限性 三、层次聚类3.1. 原理3.2. 代码实现 四、DBSCAN算法4.1. 原理4.2. 代码实现 五、区别与相同点1. 区别#xff1a;2. 相同点#xff1a; 总结 前言 在机器学习… 机器学习——聚类算法一 文章目录 前言一、基于numpy实现聚类二、K-Means聚类2.1. 原理2.2. 代码实现2.3. 局限性 三、层次聚类3.1. 原理3.2. 代码实现 四、DBSCAN算法4.1. 原理4.2. 代码实现 五、区别与相同点1. 区别2. 相同点 总结 前言 在机器学习中有多种聚类算法可以用于将数据集中的样本按照相似性进行分组。本文将介绍一些常见的聚类算法 K-Means聚类层次聚类DBSCAN算法 一、基于numpy实现聚类 import matplotlib.pyplot as plt import numpy as np import pandas as pd from numpy.linalg import norm import random np.random.seed(42) data np.random.randn(100,2) #生成一个包含100个样本点的随机数据集每个样本有2个特征 df pd.DataFrame(data data,columns[x1,x2])x1_min, x1_max, x2_min, x2_max df.x1.min(), df.x1.max() ,df.x2.min(), df.x2.max()# 初始化两个质心 centroid_1 np.array([random.uniform(x1_min, x1_max), random.uniform(x2_min, x2_max)]) centroid_2 np.array([random.uniform(x1_min, x1_max), random.uniform(x2_min, x2_max)])data df.values #设置迭代次数为10 for i in range(10):clusters []for point in data:centroid_1_dist norm(centroid_1- point) #计算两点之间的距离centroid_2_dist norm(centroid_2- point)cluster 1if centroid_1_dist centroid_2_dist:cluster 2clusters.append(cluster)df[cluster] clusters#更换质心即迭代聚类点 centroid_1 [round(df[df.cluster 1].x1.mean(),3), round(df[df.cluster 1].x2.mean(),3)] centroid_2 [round(df[df.cluster 2].x1.mean(),3), round(df[df.cluster 2].x2.mean(),3)]plt.scatter(x1, x2, cdf[cluster]) plt.scatter(centroid_1,centroid_2, markerx, colorred) plt.show() 二、K-Means聚类 2.1. 原理 K-means 是一种迭代算法它将数据集按照距离划分为 K 个簇其中K是用户预先指定的簇的数量每个簇代表一个聚类聚类后同一类数据尽可能聚集到一起不同类数据分离。实现步骤如下 随机初始化K个质心每个质心代表一个簇将每个样本点分配到距离其最近的质心所代表的簇。如此就形成了K个簇更新每个簇的质心即计算每个簇中样本点的平均值重复步骤2和步骤3直到质心的位置不再改变或达到预定的迭代次数。 2.2. 代码实现 导入数据集以鸢尾花iris数据集为例 from sklearn.datasets import load_iris import pandas as pd# 加载数据集 iris load_iris()#查看数据集信息 print(iris.keys()) dict_keys([data, target, frame, target_names, DESCR, feature_names, filename, data_module])#获取特征数据 data iris[data]# 获取标签数据 target iris[target] print(pd.Series(target).unique()) [0 1 2]#查看分类名 print(iris[target_names]) [setosa versicolor virginica]#整合到数据框 import pandas as pd df pd.DataFrame(data iris[data],columns iris[feature_names]) print(df.head())sepal length (cm) sepal width (cm) petal length (cm) petal width (cm) 0 5.1 3.5 1.4 0.2 1 4.9 3.0 1.4 0.2 2 4.7 3.2 1.3 0.2 3 4.6 3.1 1.5 0.2 4 5.0 3.6 1.4 0.2确定初始化质点K的取值 肘部法则选择聚类数目 该方法适用于K值相对较小的情况随着聚类数目的增加聚类误差也称为SSESum of Squared Errors会逐渐减小。然而当聚类数目达到一定阈值后聚类误差的减小速度会变缓形成一个类似手肘的曲线。这个手肘点对应的聚类数目就是肘部法则选择的合适聚类数目。 from sklearn.cluster import KMeans import matplotlib.pyplot as plt sse [] # 设置聚类数目的范围 k_range range(1, 10) # 计算每个聚类数目对应的 SSE for k in k_range:kmeans KMeans(n_clustersk,random_state 42)kmeans.fit(df)sse.append(kmeans.inertia_)# 绘制聚类数目与 SSE 之间的曲线图 plt.style.use(ggplot) plt.plot(k_range, sse,r-o) plt.xlabel(Number of K) plt.ylabel(SSE) plt.title(Elbow Method) plt.show() 从图中可看出当K3时该曲线变得比较平缓则该点为肘部点。即最佳的聚类数目为K3 从sklean中调用k-Means算法模型 from sklearn.cluster import KMeans kmeans KMeans(n_clusters3,max_iter 400,random_state42) kmeans.fit(df) print(kmeans.cluster_centers_) y_kmeans kmeans.labels_ df[y_kmeans] y_kmeans可视化聚类结果 绘制平面图 plt.scatter(df[sepal length (cm)], df[sepal width (cm)], cdf[y_kmeans], cmapviridis) # 绘制聚类中心 plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], cred, markerx, s100) plt.xlabel(Sepal Length) plt.ylabel(Sepal Width) plt.title(K-Means Clustering) handles, labels sc.legend_elements() plt.legend(handles, labels) plt.show() 绘制三维图 # 创建3D图形对象 fig plt.figure(figsize(8, 6)) ax fig.add_subplot(111, projection3d) # 绘制散点图 sc ax.scatter(df[sepal length (cm)], df[sepal width (cm)], df[petal length (cm)], cdf[y_kmeans], cmapviridis)# 绘制聚类中心 ax.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], kmeans.cluster_centers_[:, 2], cred, markerx, s100)ax.set_xlabel(Sepal Length) ax.set_ylabel(Sepal Width) ax.set_zlabel(Petal Length) ax.set_title(K-Means Clustering)# 添加图例 handles, labels sc.legend_elements() ax.legend(handles, labels)plt.show() 2.3. 局限性 k-Means算法通过距离来度量样本之间的相似性因此对于非凸形状的聚类算法可能无法正确地将样本划分到正确的聚类中。 k-Means算法对噪声和离群点敏感。这些异常值可能会影响到聚类结果使得聚类变得不准确 需要事先指定聚类的数量k而且对结果敏感。如果选择的聚类数量不合适会导致聚类结果不准确或不理想。 比如这种情况 三、层次聚类 3.1. 原理 层次聚类Agglomerative clustering)算法是一种基于树状结构的聚类方法分为凝聚型和分裂型层次聚类。 分裂型层次聚类从整个数据集作为一个簇开始然后逐步将簇分裂为更小的簇直到达到预定的簇的数量或达到某个停止准则。 凝聚型层次聚类将数据集中的样本逐步合并为越来越大的簇。 即从N个簇开始每个样本为一个簇在每个步骤中合并两个最相似的簇直到达到某个停止准则。 如图所示从上下往下上 优点是可以直观地展示数据点之间的相似性关系并且不一定要预先指定聚类簇的数量。 层次聚类的缺点是计算复杂度较高且对数据的噪声和异常值比较敏感。 3.2. 代码实现 参数 linkage: 用于指定链接算法。 “ward” 单链接即两个簇的样本对之间距离的min “complete”: 全链接即两个簇的样本对之间距离的max “average” 均链接即两个簇的样本对之间距离的mean 参数 affinity : 用于计算距离。 “euclidean”使用欧几里德距离来计算数据点之间的距离这是默认的距离度量方法。 “manhattan”使用曼哈顿距离来计算数据点之间的距离它是两个点在所有维度上绝对值之和的总和。 “cosine”使用余弦相似度来计算数据点之间的距离。 from sklearn.cluster import AgglomerativeClustering cluster AgglomerativeClustering() print(cluster.fit_predict(df))cluster AgglomerativeClustering(n_clusters 3 ,linkage complete,affinitymanhattan) cluster.fit(df) df[cluster] cluster.labels_ print(cluster.labels_)# 创建3D图形对象 fig plt.figure(figsize(8, 6)) ax fig.add_subplot(111, projection3d) plt.style.use(ggplot)for i in range(len(df[cluster])):if df[cluster][i] 0:ax.scatter(df[sepal length (cm)][i], df[sepal width (cm)][i], df[petal length (cm)][i],c red)elif df[cluster][i] 1:ax.scatter(df[sepal length (cm)][i], df[sepal width (cm)][i], df[petal length (cm)][i],c blue)else:ax.scatter(df[sepal length (cm)][i], df[sepal width (cm)][i], df[petal length (cm)][i],c yellow)ax.set_xlabel(Sepal Length) ax.set_ylabel(Sepal Width) ax.set_zlabel(Petal Length) ax.set_title(Clustering) plt.show() 四、DBSCAN算法 4.1. 原理 DBSCAN是一种基于密度的聚类算法它能够发现任意形状的聚类簇并且能够识别出噪声点它将样本划分为核心点、边界点和噪声点。算法的步骤如下 随机选择一个未访问的样本点。根据设置的距离半径eps称在这一范围的区域为该样本实例的邻域 如果该样本点的邻域内样本数大于设定的阈值min_samples则将其标记为核心点并将其邻域内的样本点加入到同一个簇中。 如果该样本点的邻域内样本数小于设定的阈值则将其标记为边界点。 重复以上步骤直到所有样本点都被访问。 最后任何不是核心点且邻域中没有实例样本的样本点都将被标记为噪声点 4.2. 代码实现 from sklearn.cluster import DBSCAN cluster DBSCAN(eps 0.6 , min_samples 10) cluster.fit(df) df[cluster] cluster.labels_ print(df)#-1代表噪声点 print(df[cluster].value_counts())1 880 49 -1 13 Name: cluster, dtype: int64sc plt.scatter(df[sepal length (cm)],df[sepal width (cm)],c df[cluster]) plt.title(DBSCAN Clustering) handles, labels sc.legend_elements() plt.legend(handles, labels) plt.show()from sklearn.cluster import DBSCAN from sklearn.datasets import make_moons# 生成随机数据 X, y make_moons(n_samples200, noise0.05) print(X)dbscan DBSCAN(eps0.3, min_samples5) dbscan.fit(X)# 获取聚类标签 labels dbscan.labels_#因为设置的noise很小故没有噪声点 print(pd.Series(labels).value_counts()) 0 100 1 100 dtype: int64# 绘制聚类结果 plt.scatter(X[:, 0], X[:, 1], clabels) plt.title(DBSCAN Clustering) handles, labels sc.legend_elements() plt.legend(handles, labels) plt.show() 五、区别与相同点 1. 区别 K-means是一种划分聚类算法它将数据集划分为固定数量的簇一定要预先指定簇的数量而层次聚类不一定要指定簇的数量和DBSCAN算法需要指定邻域半径和最小样本数它们可以自动确定簇的数量。 K-means和层次聚类算法都假设簇具有相同的形状和大小而DBSCAN算法可以发现任意形状和大小的簇。 K-means和层次聚类算法都对异常值敏感而DBSCAN算法对异常值不敏感。可去掉噪声点 2. 相同点 K-means、层次聚类和DBSCAN算法都是无监督学习算法中的聚类算法它们不依赖于标签信息。 这些算法都使用距离或相似性度量来度量样本之间的相似性或距离。 总结 本文从最开始的自己实现聚类到后面的三个机器学习中聚类算法 K-Means 、层次聚类、DBSCAN聚类的学习再到后面对这三个算法的比较与总结。加深了对聚类原理的了解。 我住长江头君住长江尾日日思君不见君 –2023-8-31 筑基篇
http://www.hkea.cn/news/14287132/

相关文章:

  • 武进常州做网站南城微信网站建设
  • 特色美食网站建设注册公司流程和费用大概多少钱
  • 做网站销售工资怎么样怎么制作二维码并自己编辑内容
  • 合肥 企业网站设计公司上海建筑设计院有哪些
  • 汕头网站建设模块php网站开发系统
  • 外贸家具网站首页设计网站策划书怎么做的美观
  • 软件外包行业分析湖南正规竞价优化公司
  • 上海做网站公司做企业网站 签合同要注意什么
  • 企业网站文章后台添加优购物官方网站app
  • 注册公司登录什么网站汇米网站建设
  • 网站后台更新文档室内设计行业现状及发展前景
  • 企业网站备案需要哪些资料wordpress导入产品
  • 企业网站的建设与实现用手机能创建网站吗
  • 外汇做单记录做单专业网站有哪些川畅科技搜搜 网站设计
  • 门户网站设计技巧备案多个网站
  • 长春网站改版会网站开发 不会软件
  • 网站备案撤销怎么办最好的网站优化公司
  • 中国建设银行官方网站企业html教程w3school
  • 网站粘性什么网站后台程序好用
  • 有哪些炫酷的官方网站网页微信版文件传输
  • 招商加盟网站模板html国内做的好的电商网站有哪些方面
  • 后缀为net的网站有哪些做网站涉及个人隐私
  • 在线手机网站建设wordpress post 插件
  • 怎么查有做网站的公司有哪些网站建设图片
  • 中国电力建设企业协会网站微信运营
  • 网站开发 例子建设网站要钱吗
  • 机械网站建设中心请问聊城做网站
  • 营销机构代码怎么填排名seo软件
  • 电子商务网站建设参考文献2018网站建设中模板代码
  • 品牌网站建设帮你大蝌蚪wordpress图片资源主题