聚类分析:kmeans实现对鸢尾花的分类

本文深入探讨了聚类算法的原理,特别是KMeans算法,包括其迭代过程和核心代码实现。同时,介绍了模型评估指标,如ARI系数和轮廓系数,用于量化聚类效果的好坏。此外,还提供了数据操作的基础知识,如设置和获取数据索引,以及确定数据列的唯一取值。
摘要由CSDN通过智能技术生成

聚类算法的原理

聚类

聚类指的是没有目标函数情况下对一组数据分类,根据聚类结果确定最后的分类种数。SVM支持向量机分类,决策树分类等学习算法都是根据目标值学习模型。所以这里需要多次迭代学习,可以理解为用历史数据作为模型训练的目标函数

kmeans 算法原理

假定一个划分的簇数n,任选k个样本作为簇中心
根据样本与簇的距离相似度划分样本
重新计算簇中心
不断重复这一过程直到每个簇中心点不再变化

核心代码

from sklearn.cluster import KMeans
kmeans = KMeans(n__clusters)#模型初始化
kmeans.fit(X)#模型学习

模型评估

ARI 系数(有分类标签的数据集)

adjusted rand index
metrics.adjusted_rand_score(y, kmeans.labels_)
取值范围【0,1】越大聚类效果越好


from sklearn import metrics
#将类名转换为整数值
data.loc[ data['class'] == 'Iris-setosa', 'class' ] = 0
data.loc[ data['class'] == 'Iris-versicolor', 'class' ] = 1
data.loc[ data['class'] == 'Iris-virginica', 'class' ] = 2
#y = data['class'].values.astype(int)
metrics.adjusted_rand_score(y, kmeans.labels_)

轮廓系数

考虑聚类结果的簇内凝聚度和簇间分离度
取值范围【-1,1】越大聚类效果越好

 metrics.silhouette_score( X, kmeans.labels_, metric='euclidean' )

基础补充

取数

data.iloc[:,0:1]#表示取第一列,第一列不从索引列算起
data[:5]#取前5行

索引设置

set_index(keys, drop=True, append=False, inplace=False, verify_integrity=False)
reset_index(level=None, drop=False, inplace=False, col_level=0, col_fill='')
data.set_index(keys=['sepal length'],inplace=True)#设置索引列
data.reset_index(inplace=True)#重置索引列 0-n

确定某一列的取值种数

data['class'].unique()
好的,下面是使用密度聚类和Kmeans聚类对鸢尾花数据进行聚类的Python代码: 首先,我们需要导入必要的库和鸢尾花数据集: ```python import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn.cluster import DBSCAN from sklearn.cluster import KMeans from sklearn.datasets import load_iris iris = load_iris() X = iris.data[:, :2] y = iris.target ``` 接下来,我们可以使用密度聚类来对数据进行聚类: ```python # 使用密度聚类 dbscan = DBSCAN(eps=0.5, min_samples=5) labels = dbscan.fit_predict(X) # 可视化结果 plt.scatter(X[:, 0], X[:, 1], c=labels) plt.title("DBSCAN Clustering") plt.show() ``` 上述代码,我们使用了`DBSCAN`函数来进行密度聚类。我们设置了`eps`为0.5,表示密度半径为0.5;`min_samples`为5,表示最小样本数为5。最后,我们将聚类结果可视化。 下面,我们可以使用Kmeans聚类来对数据进行聚类: ```python # 使用Kmeans聚类 kmeans = KMeans(n_clusters=3) labels = kmeans.fit_predict(X) # 可视化结果 plt.scatter(X[:, 0], X[:, 1], c=labels) plt.title("KMeans Clustering") plt.show() ``` 上述代码,我们使用了`KMeans`函数来进行Kmeans聚类。我们设置了`n_clusters`为3,表示要聚成3类。最后,我们将聚类结果可视化。 完整代码如下: ```python import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn.cluster import DBSCAN from sklearn.cluster import KMeans from sklearn.datasets import load_iris iris = load_iris() X = iris.data[:, :2] y = iris.target # 使用密度聚类 dbscan = DBSCAN(eps=0.5, min_samples=5) labels = dbscan.fit_predict(X) # 可视化结果 plt.scatter(X[:, 0], X[:, 1], c=labels) plt.title("DBSCAN Clustering") plt.show() # 使用Kmeans聚类 kmeans = KMeans(n_clusters=3) labels = kmeans.fit_predict(X) # 可视化结果 plt.scatter(X[:, 0], X[:, 1], c=labels) plt.title("KMeans Clustering") plt.show() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值