数据降维并使用K-Means法聚类

我对随机选择的30个国家和2017年所有国家的数据进行了主成分分析,并将多维的包括总分排名(排名或许要删除再计算->已删除)及12大指标的数据降维为二维数据,随后使用K-Means法进行聚类分析后得出分类以及散点图图像。

#读取csv文件并整理数据 
def readcsvYear(path):
    namesYear = ['Year','Rank','Total','SA','FE','GG','EC','UD','HF','SL','PS','HR','DP','RD','EX']
    data = pd.read_csv(path,header=None,names=namesYear)
    del data['Rank']
    return data
data2017path = 'datasets/problemE/fsi2017.csv'
data2017 = readcsvYear(data2017path)
#主成分分析 数据降维度
from sklearn.decomposition import PCA
def getPCAData(data,comp):
    pcaClf = PCA(n_components=comp, whiten=True)
    pcaClf.fit(data)
    data_PCA = pcaClf.transform(data) # 用来降低维度
    return data_PCA

def modiData(data):
    x1 = []
    x2=[]
    for i in range(0,len(data+1)):
        x1.append(data[i][0])
        x2.append(data[i][1])
    x1=np.array(x1)
    x2=np.array(x2)
    #重塑数据
    X=np.array(list(zip(x1,x2))).reshape(len(x1),2)
    return X
#绘制样式
def drawKmodel(XData,t):
    plt.figure(figsize=(10,10))
    colors = ['g','r','y','b']
    markers = ['o','s','d','h']
    kmeans_model = KMeans(n_clusters=t).fit(XData)
    for i,l in enumerate(kmeans_model.labels_):
        plt.plot(XData[i][0],XData[i][1],color=colors[l],marker=markers[l],ls='None')
        plt.title('%s Countries K-Means'%(len(XData)))
data2017PCA = getPCAData(data2017,2)
data2017X = modiData(data2017PCA)
drawKmodel(data2017X,4)
178Kmeansnorank.png
178KmeansBig.png
178Kmeans.png
kmeans-first-k3.png

由散点图发现:

  • 各国可根据脆弱等级划分为4类
  • 随机筛选的30个国家分类整体过度平缓(修改语言),但有3个国家区分度明显
  • Rank列数据对散点图影响

http://vinking934296.iteye.com/blog/2356846
下一步:

  • 分类畸变程度分析
  • 聚类效果评估
  • 增加气候指数数据 查看变化
  • 标注国家

目前为止涉及方法有:

  • 时间序列预测法
  • 层次分析法(AHP)
  • 主成分分析(PCA)- 数据降维
  • K-Means硬聚类算法

你可能感兴趣的:(数据降维并使用K-Means法聚类)