K-means的python实现(备注详细)

在这里插入代码片#-*- coding: utf-8 -*-
import numpy as np
from scipy import io as spio
from matplotlib import pyplot as plt
from sklearn.cluster import KMeans


def kMenas():
    #下载数据
    #已经改为绝对路径
    data = spio.loadmat("/Users/macbook/Desktop/MachineLearning_Python-master/K-Means/data.mat")
    #准备数据一般都用X大写表示,源于f(x)=y
    '''在读取的.mat的数据中,全部数据就叫做X
    '''
    X = data['X']   
    model = KMeans(n_clusters=5).fit(X) # n_clusters指定3类,拟合数据
    centroids = model.cluster_centers_  # 聚类中心
    #scatte中的x[:,0]是shape数组方法
    #x=reshape((2,2))两行两列
    #x=reshape((2,2,2))三维数组 2 2 2 
    #shape方法可以输出矩阵的维度,shape[0]和shape[1]分别代表行和列的长度,
    
    #我们不知道z的shape属性是多少,但是想让z变成只有一列,行数不知道多少,通过`z.reshape(-1,1)`,
    # Numpy自动计算出有12行,新的数组shape属性为(16, 1),与原来的(4, 4)配套。
    plt.xlim(-1,10)
    plt.ylim(-1,6)
    plt.scatter(X[:,0], X[:,1],color="gray")     # 原数据的散点图
    #scatter中[:,0] :前表示行,右表示列 
    #A=B(2,:)   取B的第二行
    #C=B(:,2)   取B的第二列
    plt.plot(centroids[:,0],centroids[:,1],'g*',markersize=10)  # 聚类中心
    #r* r^h
    plt.show()

if __name__ == "__main__":
    kMenas()

你可能感兴趣的:(K-means,机器学习,python,基础知识,数据,可视化)