使用kmeans聚类,kmeans聚类算法python实现鸢尾花数据集
K-Means是一种聚类算法,利用距离来判断数据点和聚类数据之间的相似性。下面这篇文章主要介绍如何使用python实现K-means聚类的相关信息。通过示例代码详细介绍,有需要的朋友可以参考一下。
00-1010先,先用代码!第二,接下来就是调库代码了!(sklearn)附件:k-means算法知识总结
目录
1.首先,导入所需的库和数据。
进口熊猫作为pd
将numpy作为np导入
随机导入
导入数学
将matplotlib.pyplot作为plt导入
#这两行代码解决了plt中文显示的问题。
PLT . RC params[ font . sans-serif ]=[ sim hei ]
PLT . RC params[ axes . unicode _ MINUS ]=False
Df=pd.read_excel(13情报学学生成绩。xlsx’)
数据=np .数组(df)
df.head(10)
我们先给大家展示一下数据集是什么样子的:
使用matplotlib简单地可视化初始数据:
#输入数据
x=数据。T[0]
y=数据。T[1]
Plt.scatter(x,y,s=50,c=r) #绘制散点图
Plt.xlabel(通常)#横轴标题
Plt.ylabel(期末)#纵坐标轴标题
plt.show()
2.接下来是kmeans的核心算法。
k=3
i=1
min1=data.min(轴=0)
max1=data.max(轴=0)
#在数据的最大值和最小值中随机生成k个初始聚类中心,保存为t。
centre=np.empty((k,2))
对于范围(k):内的I
centre[I][0]=random . randint(min 1[0],max1 [0]) #平时成绩
Centre [I] [1]=random.randint(最小1 [1],最大1 [1]) #最终等级
而i500:
#计算欧几里德距离
def欧几里德距离(列表,t):
return math . sqrt((List[0]-t[0])* * 2(List[1]-t[1])* * 2))
#从每个点到每个中心点的距离矩阵
dis=np.empty((len(data),k))
对于范围内的I(len(data)):
对于范围(k):内的j
dis[i][j]=欧几里德距离(数据[i],中心[j])
#初始化分类矩阵
分类=[]
对于范围(k):内的I
classify.append([])
#比较距离并分类
对于范围内的I(len(data)):
List=dis[i]。tolist()
index=List.index(dis[i].min())
分类[索引]。追加(一)
#构建一个新的中心点
new_centre=np.empty((k,2))
对于范围内的I(len(classify)):
new _ centre[I][0]=NP . sum(data[classify[I]][0])/len(classify[I])
new _ centre[I][1]=NP . sum(data[classify[I]][1])/len(classify[I])
#比较新的中心点是否与旧的中心点相同
if (new_centre==centre)。全部():
破裂
else:
中心=新中心
i=i 1
# print(迭代次数为:,I)
校长
t(聚类中心为:,new_centre)
print(分类情况为:,classify)
注意!!!这里的k是指分成k类,读者可以自行选取不同的k值做实验
3、可视化部分(将不用类用不同颜色区分开来~~)
mark = [or, ob, og, ok,sb, db, <b, pb] #红、蓝、绿、黑四种颜色的圆点#mark=[sb, db, <b, pb]
plt.figure(3)#创建图表1
for i in range(0,k):
x=[]
y=[]
for j in range(len(classify[i])):
x.append(data[classify[i][j]][0])
y.append(data[classify[i][j]][1])
plt.xlim(xmax=105,xmin=45)
plt.ylim(ymax=85,ymin=-5)
plt.plot(x,y,mark[i])
#plt.show()
一起来康康可视化结果8!!
二、接下来是调库代码!(sklearn)
import pandas as pdimport numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn import metrics
df = pd.read_excel(13信科学生成绩.xlsx)
data = np.array(df)
y_pred=KMeans(n_clusters=3,random_state=9).fit_predict(data)
plt.scatter(data[:,0],data[:,1],c=y_pred)
plt.show()
print(metrics.calinski_harabasz_score(data,y_pred))
可视化结果和手撸的结果略有差别,有可能是数据集的问题,也有可能是k值选取的问题,各位亲们不需要担心!!!
附:对k-means算法的认识
1.优点
(1)算法快速、简单。
(2)对大数据集有较高的效率并且是可伸缩性的。
(3)时间复杂度近于线性,而且适合挖掘大规模数据集。K-Means聚类算法的时间复杂度是O(nkt) ,其中n代表数据集中对象的数量,t代表着算法迭代的次数,k代表着簇的数目。
2.缺点
(1)聚类是一种无监督的学习方法,在 K-means 算法中 K 是事先给定的,K均值算法需要用户指定创建的簇数k,但这个 K 值的选定是非常难以估计的。
(2)在 K-means 算法中,首先需要根据初始聚类中心来确定一个初始划分,然后对初始划分进行优化。这个初始聚类中心的选择对聚类结果有较大的影响,一旦初始值选择的不好,可能无法得到有效的聚类结果,这也成为 K-means算法的一个主要问题。
(3)从 K-means 算法框架可以看出,该算法需要不断地进行样本分类调整,不断地计算调整后的新的聚类中心,因此当数据量非常大时,算法的时间开销是非常大的。所以需要对算法的时间复杂度进行分析、改进,提高算法应用范围,而这导致K均值算法在大数据集上收敛较慢。
总结
到此这篇关于如何利用python实现kmeans聚类的文章就介绍到这了,更多相关python实现kmeans聚类内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。