K均值算法

1. 机器学习的步骤

数据,模型选择,训练,测试,预测

2. 安装机器学习库sklearn

pip list 查看版本

python -m pip install --upgrade pip

pip install -U scikit-learn

 

pip uninstall sklearn

pip uninstall numpy

pip uninstall scipy

pip install scipy

pip install numpy

pip install sklearn

 https://scikit-learn.org/stable/install.html

 

2. 导入sklearn的数据集

from sklearn.datasets import load_iris

iris = load_iris()

iris.keys()

X = iris.data # 获得其特征向量

y = iris.target # 获得样本标签

iris.feature_names # 特征名称

 

3.K均值算法

K-means是一个反复迭代的过程,算法分为四个步骤:

  (x,k,y)

1) 选取数据空间中的K个对象作为初始中心,每个对象代表一个聚类中心;

  def initcenter(x, k): kc

2) 对于样本中的数据对象,根据它们与这些聚类中心的欧氏距离,按距离最近的准则将它们分到距离它们最近的聚类中心(最相似)所对应的类;

  def nearest(kc, x[i]): j

  def xclassify(x, y, kc):y[i]=j

3) 更新聚类中心:将每个类别中所有对象所对应的均值作为该类别的聚类中心,计算目标函数的值;

  def kcmean(x, y, kc, k):

4) 判断聚类中心和目标函数的值是否发生改变,若不变,则输出结果,若改变,则返回2)。

  while flag:

      y = xclassify(x, y, kc)

      kc, flag = kcmean(x, y, kc, k)

4. 作业:

1). 扑克牌手动演练k均值聚类过程:>30张牌,3类

 

 

2). *自主编写K-means算法 ,以鸢尾花花瓣长度数据做聚类,并用散点图显示。(加分题)

from numpy import *
import matplotlib.pyplot as plt
import numpy as np
from sklearn.datasets import load_iris

data= load_iris()
iris_l = data.data[:,1:2]

y= len(iris_l)#150
m = iris_l.shape[1]#1
k = 3
dist = np.zeros([y,k+1])

#center
def initcent(x, k):
center = x[:k, :]
return center

#oushijuli
def nearest(x, center):
a=[]
for j in range(k):
a.append(abs(x-center[j,:]))
# print(a)
return a

#julei
def xclassify(x,dist, center):
for i in range(x.shape[0]):
dist[i,:k]=nearest(x[i,:],center)
dist[i, k] = np.argmin(dist[i,:k])
return dist

def kcmean(x, dist, center, k):
centerNew = np.zeros([k,m])
for c in range(k):
q = np.where(dist[:,k] == c)
n = np.mean(x[q])
if centerNew[c] != n:
centerNew[c] = n
return np.array(centerNew)

center = initcent(iris_l,k)
while True:
xclas = xclassify(iris_l, dist, center)
centerNew=kcmean(iris_l, xclas, center, k)
if all(center == centerNew):
break
else:
center = centerNew

a = iris_l.flatten()
plt.scatter(a, a, c=array(xclas[:,k]), s=50, cmap='rainbow', marker='p', alpha=0.5)
plt.show()

 

 

3). 用sklearn.cluster.KMeans,鸢尾花花瓣长度数据做聚类,并用散点图显示.

 

 

4). 鸢尾花完整数据做聚类并用散点图显示.

 

 

5).想想k均值算法中以用来做什么?

 K均值就是以一个作为标签,然后把其他相近的分为一类。

posted @ 2020-04-16 20:40  Wu。  阅读(439)  评论(0编辑  收藏  举报