• 董泱泱
    了解作者
  • Python
    开发工具
  • 2KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 5
    下载次数
  • 2018-05-07 23:36
    上传日期
用聚类算法kmeans实现iris聚类,kmeans是机器学习算法的一种。
iris -kmeans.zip
  • iris_all.csv
    4.7KB
  • IrisCluster.py
    3KB
内容介绍
#coding: utf-8 ''' 用stlearn库中KMeans算法对iris数据集进行聚类操作 数据预处理:normalize ''' from collections import Counter import numpy as np import pandas as pd from sklearn.cluster import KMeans from sklearn import preprocessing from sklearn.decomposition import PCA import matplotlib.pyplot as plt from sklearn import metrics ######################################################################################### # 第一步 参数设置 #数据文件路径 filePath='iris_all.csv' #簇的个数 k=3 #初始点选取方式 initType='random' #最大迭代次数 max_iter=300 #最小平方误差 min_sse=0.0001 ######################################################################################### # 第二步 数据预处理 irisDF=pd.read_csv(filePath) #print irisDF['id'] #真实数据标签 label=list(irisDF['id']) #print label irisDDF=irisDF.drop(['species','id'],axis=1) #print irisDDF #数据预处理-正则化 #irisDDFL=preprocessing.normalize(irisDDF) #数据预处理-标准化 #irisDDFL=preprocessing.scale(irisDDF) #print irisDDFL ######################################################################################### # 第三步 聚类 #kmeans聚类 n_clusters=3 irisKmeans=KMeans(n_clusters=k,init=initType,max_iter=max_iter,tol=min_sse) predicted=irisKmeans.fit_predict(irisDDF) ######################################################################################### # 第四步 聚类评估 #转化结果和标记成列表 label_true=irisDF['id'].tolist() label_pred=predicted.tolist() counter=Counter(label_pred) print 'labels_stastics:',counter print irisKmeans.labels_ # 计算可调整兰德指数 print '调整兰德指数:', metrics.adjusted_rand_score(label_pred, label_true) # 计算调整的互信息评分 print '归一化互信息评分:', metrics.normalized_mutual_info_score(irisKmeans.labels_, label_true) # 计算所有样本的轮廓系数 #print '所有样本的轮廓系数:\n',metrics.silhouette_samples(irisDDF,irisKmeans.labels_,metric='euclidean') #计算所有样本的轮廓系数的平均值 print '所有样本的轮廓系数的平均值:', metrics.silhouette_score(irisDDF,irisKmeans.labels_,metric='euclidean') ######################################################################################### # 第五步 图形输出 降维 # 降维 pca = PCA(n_components=2) newData = pca.fit_transform(irisDDF) # 设定每个点的颜色和形状 lableD = [] for i in range(0, 150): if i < 50: lableD.append('o') elif i >= 50 and i < 100: lableD.append('p') else: lableD.append('s') for i in range(0, 150): if label_pred[i] == 0: lableD[i] = lableD[i] + ('r') elif label_pred[i] == 1: lableD[i] = lableD[i] + ('y') else: lableD[i] = lableD[i] + ('k') # print lableD for i in range(0, 150): plt.plot(newData[i][0], newData[i][1], lableD[i]) plt.show()
评论
    相关推荐