zoukankan      html  css  js  c++  java
  • 3.K均值算法

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

     

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

    代码:

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

    # 1.数据准备
    iris=load_iris()
    data=iris['data']
    # data = iris.data[:,0]
    # x = data.reshape(-1,1)
    m=data.shape[1] #样本的属性个数 4列
    n=len(data) #样本的个数 150行
    k=3 #类中心个数,即最终分类的类别数
    # 2.数据初始话
    dist=np.zeros([n,k+1]) #距离矩阵
    center=np.zeros([k,m]) #初始类中心
    new_center=np.zeros([k,m]) #新的类中心
    # 选中心
    center=data[:k,:] #选前3个样本作为初始类中心
    # number=0 #计数归类了多少次
    # 求距离
    while True:
    # new_center = np.zeros([k, m]) # 新的类中心
    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
    new_center[i,:]=np.mean(data[index,:])
    # 判定结束
    if (np.all(center==new_center)):
    break
    else:
    center=new_center
    # number = number + 1
    # print('聚类分析迭代次数:',number)
    print('最终聚类结果:',dist[:,k])

    截图:

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

    代码:

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

    iris = load_iris() #加载数据
    x = iris.data[:,1].reshape(-1,1) #实验数据,并将数据处理,变二维数组
    km_model = KMeans(n_clusters=3) #构建模型
    km_model.fit(x) #模型训练
    # km_model.fit(iris['data']) #模型训练
    y = km_model.predict(x) #模型预测
    print("查看聚类结果:",y)
    # km_model.labels_ #查看聚类结果

    #散点图
    plt.scatter(x[:,0],x[:,0],c=y,s=50,cmap='rainbow',marker='p',alpha=0.5);
    plt.show()

    截图:

     

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

    代码:

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

    iris = load_iris() #加载数据
    x = iris.data #实验数据
    km_model = KMeans(n_clusters=3) #构建模型
    km_model.fit(x) #模型训练
    # km_model.fit(iris['data']) #模型训练
    y = km_model.predict(x) #模型预测
    print("查看聚类结果:",y)
    # km_model.labels_ #查看聚类结果

    #散点图
    plt.scatter(x[:,2],x[:,3],c=y,s=50,cmap='rainbow',marker='p',alpha=0.5);
    plt.show()

    截图:

     

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

    现在可以用来商务决策、图像识别、数据识别,甚至一些交通事故事件的累积,事故产生原因的累计,然后数据的分析、预测,从而做到可以有效避免交通事故的发生。

  • 相关阅读:
    RDay2-Problem 2 B
    杭电 1862 EXCEL排序(sort+结构体)
    杭电 2803 The MAX(sort)
    杭电 5053 the Sum of Cube(求区间内的立方和)打表法
    杭电 2089 不要62
    杭电 4548 美素数(素数打表)
    杭电2098 分拆素数和
    杭电1722 Cake (分蛋糕)
    素数判定 (素数打表)
    最小公倍数
  • 原文地址:https://www.cnblogs.com/q1uj1e/p/12701394.html
Copyright © 2011-2022 走看看