您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > 机器学习聚类算法实现
1《人工智能与机器学习》实验报告年级__xxxx班____________专业___________xxxxx_________学号____________6315070301XX___________姓名_____________gllh________________日期___________2018-5-12__2实验五聚类算法实现一、实验目的1、了解常用聚类算法及其优缺点2、掌握k-means聚类算法对数据进行聚类分析的基本原理和划分方法3、利用k-means聚类算法对已知数据集进行聚类分析实验类型:验证性计划课间:4学时二、实验内容1、利用python的sklearn库函数对给定的数据集进行聚类分析2、分析k-means算法的实现流程3、根据算法描述编程实现,调试运行4、对所给数据集进行验证,得到分析结果三、实验步骤1、k-means算法原理2、k-means算法流程3、k-means算法实现4、对已知数据集进行分析四、实验结果分析1.利用python的sklearn库函数对给定的数据集进行聚类分析:其中数据集选取iris鸢尾花数据集importnumpyasnpfromsklearn.datasetsimportload_irisiris=load_iris()defdist(x,y):3returnsum(x*y)/(sum(x**2)*sum(y**2))**0.5defK_means(data=iris.data,k=3,ping=0,maxiter=100):n,m=data.shapecenters=data[:k,:]whilepingmaxiter:dis=np.zeros([n,k+1])foriinrange(n):forjinrange(k):dis[i,j]=dist(data[i,:],centers[j,:])dis[i,k]=dis[i,:k].argmax()centers_new=np.zeros([k,m])foriinrange(k):index=dis[:,k]==icenters_new[i,:]=np.mean(data[index,:],axis=0)ifnp.all(centers==centers_new):breakcenters=centers_newping+=1returndisif__name__=='__main__':res=K_means()print(res)(1)、首先求出样本之间的余弦相似度:sum(x*y)/(sum(x**2)*sum(y**2))**0.5(2)、设置k类别数为3,最大迭代次数为100K_means(data=iris.data,k=3,ping=0,maxiter=100):4(3)、设置样本个数、属性个数并初始化类中心n,m=data.shapecenters=data[:k,:](4)、求各样本至各类中心的距离foriinrange(n):forjinrange(k):dis[i,j]=dist(data[i,:],centers[j,:])dis[i,k]=dis[i,:k].argmax()(5)、求新类中心:各类样本均值作为新类中心foriinrange(k):index=dis[:,k]==icenters_new[i,:]=np.mean(data[index,:],axis=0)实验结果:52.使用自己的数据集进行聚类分析并进行可视化:#-*-coding:utf-8-*-importnumpyasnpimportpandasaspdfromsklearn.clusterimportBirchfromsklearn.clusterimportKMeansfrommatplotlibimportpyplotaspltfrommatplotlib.font_managerimportFontPropertiesdf=pd.read_csv(fa.csv,encoding=utf-8)X=df[['height','weight']].valuesclf=KMeans(n_clusters=2)y_pred=clf.fit_predict(X)print(clf)print(y_pred)x=[n[0]forninX]print(x)y=[n[1]forninX]print(y)plt.scatter(x,y,c=y_pred,marker='o')plt.title(K-meansBoy/Girl-height-weightData)plt.xlabel(Height/cm)plt.ylabel(Weight/kg)plt.legend([Position])plt.show()6本数据集使用男性女性身高体重数据集,k值为2,就是讲数据聚合为2类,看身高体重分布结果。7从此次实验看出,聚类数据集必须可以分类才能使用此算法,否则就会产生如下结果:此数据集为UCI香水数据,无法进行聚类分析8五、实验心得通过这次实验,使用K-means算法对数据集进行聚类分析,了解了算法的过程,首先选择K个点作为初始质心,之后进行重复并将每个点指派到最近的质心,形成K个簇后重新计算每个簇的质心直到簇不发生变化或达到最大迭代次数为止,首先我们要直到有多少种分类,选择K个初始质心,其中K是指定的参数,即所期望的簇的个数。这样做的前提是我们已经知道数据集中包含多少个簇,但很多情况下,我们并不知道数据的分布情况,实际上聚类就是我们发现数据分布的一种手段,之后质心的选取也非常重要,选择适当的初始质心是基本kmeans算法的关键,一般是随机的选取初始质心,通过这次实验,实现了调用sklearn进行数据集的聚类算法,对以后工作学习都有所帮助。六、注意事项1、距离函数的选择2、评价函数的计算3、噪声数据的处理4、数据集仍然可以选取分类算法所用数据集(手写体数字,雉尾花。。。或者自带的其他聚类数据集)
本文标题:机器学习聚类算法实现
链接地址:https://www.777doc.com/doc-5232145 .html