在这里插入代码片#-*- 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()