• 机器学习三 —— K均值算法


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

    这里选了40张牌,随机抽取三张牌并以其各自点数作为类中心,第一次是 2   6    9

     

    每次的分类依据就是点数离那个中心近,近就分类到该分类下。第一次分完类,在计算各分类的中心值(该类所有数字求均值),重新得出三个类中心,第二次分类如下

     再重复上面的计算步骤,直到类中心不再变动。具体结果如下表所示:

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

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

    iris = load_iris()
    pl = iris.data[:,2]
    n = len(pl) #样本个数
    k = 3 #中心个数
    dist = np.zeros([n,k+1]) #初始化一个矩阵
    center = np.zeros([k])
    center = pl[:k]
    centerNew = np.zeros([k])

    while(True):
    for i in range(n):
    for j in range(k):
    dist[i,j] = np.sqrt((pl[i]-center[j])**2) #计算距离
    dist[i,k] = np.argmin(dist[i,:k])

    #计算新的中心
    for i in range(k):
    index = dist[:, k] == i
    if sum(pl[index]) == 0:
    centerNew[i] = center[i]
    else:
    centerNew[i] = np.mean(pl[index])

    #如果前后两次中心相等则跳出,否则继续
    if np.all((center == centerNew)):
    break
    else:
    for i in range(k):
    center[i] = centerNew[i]

    plt.rcParams['font.sans-serif']=['SimHei']
    plt.scatter(pl,pl,c=dist[:,k],s=60, cmap='rainbow')
    plt.xlabel("鸢尾花花瓣长度")
    plt.ylabel("鸢尾花花瓣长度")
    plt.show()

      结果出来后不是很理想,后续再去寻找问题改进,结果如下:

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

    import matplotlib.pyplot as plt
    from sklearn.cluster import KMeans
    from sklearn.datasets import load_iris
    
    iris = load_iris()
    pl = iris.data[:,2]
    x = pl.reshape(-1,1)
    est = KMeans(n_clusters=3)
    est.fit(x)
    
    y_kmeans = est.predict(x)
    plt.scatter(x[:,0],x[:,0],c=y_kmeans,s=50, cmap='rainbow');
    plt.show()
    

      

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

    irisData = iris.data
    KMeans_model = KMeans(n_clusters=3)
    KMeans_model.fit(irisData)
    pre = KMeans_model.predict(irisData)
    plt.scatter(irisData[:,2],irisData[:,3],c=pre, s=50, cmap='rainbow')
    plt.show()
    

      

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

    k均值算法是一种无监督的分类算法,主要通过大量的特征数据,来做类别的区分,如上面的题,KMeans算法可以用来区分鸢尾花的种类,在现实生活中,也可以对人的体重身高等数据来划分不同身体状况的人群,高矮胖瘦等,也可以通过文学作品的篇幅来分类短篇、长篇作品。

  • 相关阅读:
    旅行喵 React Native 技术实践
    微信、QQ这类IM App怎么做——谈谈Websocket
    IOS热更新-JSPatch实现原理+Patch现场恢复
    jquery 插件开发及extend
    JS Nice – JavaScript 代码美化和格式化工具
    ExtJS与jQuery的一点细节上的对比
    JQuery实现图片的预加载与延时加载
    十个实用但IE不支持的CSS属性
    如何通过预加载器提升网页加载速度
    遭遇Asp.Net长文件名下载的问题和解决办法
  • 原文地址:https://www.cnblogs.com/xiaoAP/p/12704464.html
Copyright © 2020-2023  润新知