机器学习——03K均值算法

Posted lcj170

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了机器学习——03K均值算法相关的知识,希望对你有一定的参考价值。

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

技术图片

 

                                                图1 统计表格

技术图片

 

                                     图2 第一轮实际情况

技术图片

 

                               图3 第二轮实际情况

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

ps:之前人工智能老师教过这个算法,所以代码基本一样。

源代码:   

# 导入数据集
from sklearn.datasets import load_iris
import numpy as np

data = load_iris().data
n = len(data)  # 计算样本总数
m = data.shape[1]  # 样本属性个数
k = 3      #选取类中心个数
dist = np.zeros([n, k + 1])   #初始化距离矩阵,最后一列存放每个样本的类别

center = data[:k, :]
center_new = np.zeros([k, m])
while True:

    for i in range(n):
        for j in range(k):
            dist[i, j] = np.sqrt(sum((data[i, :] - center[j, :]) ** 2))

        dist[i, k] = np.argmin(dist[i, :k])

    for i in range(k):
        index = dist[:, k] == i  #
        center_new[i, :] = data[index, :].mean(axis=0)

    if np.all((center == center_new)):
        break
    else:
        center = center_new
print("150个样本的归类
", dist[:, k])

 技术图片

                                          图4 聚类结果

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

源代码:

from sklearn.datasets import load_iris
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt

iris=load_iris()
data=iris.data[:,1]
x=data.reshape(-1,1)   #扁平化

y=KMeans(n_clusters=3)   # 引入构建KMeans模型,质心数为3
y.fit(x)  #训练模型,计算k均值聚类

y_pre=y.predict(x)  #根据训练的模型来预测,即计算聚类中心并预测每个样本的聚类索引

plt.scatter(x[:,0],x[:,0],c=y_pre,s=50,cmap=‘rainbow‘)
plt.show()

 技术图片

 

 

 

                                                              图 5  代码及散点图

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

源代码:

from sklearn.datasets import load_iris
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt

iris=load_iris()
x=iris.data
y=KMeans(n_clusters=3) # 引入构建KMeans模型,质心数为3
y.fit(x) #训练模型,计算k均值聚类
y_pre=y.predict(x) #根据训练的模型来预测,即计算聚类中心并预测每个样本的聚类索引
print("预测结果: ", y_pre)
plt.scatter(x[:,2],x[:,3],c=y_pre,s=100,cmap=‘rainbow‘,alpha=0.5)
plt.show()

  技术图片

                                          图6 预测的结果及其散点图

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

答:k均值聚类是最著名的划分聚类算法,由于简洁和效率使得他成为所有聚类算法中最广泛使用的。给定一个数据点集合和需要的聚类数目k,k由用户指定,k均值算法根据某个距离函数反复把数据分入k个聚类中。生活中可以用来分类,根据某个特征对事物进行分类,例如根据往年数据分析中国足球队属于几流水平,根据往年的种子质量来预测今年的种子质量,数据分类等。

以上是关于机器学习——03K均值算法的主要内容,如果未能解决你的问题,请参考以下文章

机器学习--K均值聚类算法原理方法及代码实现

机器学习实战--k-均值聚类

ng机器学习视频笔记 ——K-均值算法理论

机器学习——模型树

关于机器学习中C均值算法的相关介绍

03K个数或第k个数算法