机器学习算法-kmeans 聚类算法一

1.1 k-means算法的步骤

假设k=3,要分3个群体

  1. 随机在数据当中抽取3个样本,当作三个类别的中心点(k1,k2,k3)
  2. 计算其余的点分别到这3个中心点的距离,每一个样本有3个距离(a,b,c),从中选出距离最近的一个点作为自己的标记形成3个族群。
  3. 分别计算这3个族群的平均值,把3个平均值与之前的3个旧中心点进行比较

如果相同,结束聚类,算法收敛。

如果不相同:把这3个平均值当做新的中心点,从第二步开始重新开始。

1.2 k-means算法的评估标准

 

外部距离最大化,内部距离最小化。

 

1、计算蓝1到自身类别的点距离的平均值a_i

2、计算蓝1分别到红色类别,绿色类别所有的点的距离,求出平均值

b1, b2,取其中最⼩的值当做b_i

轮廓系数的范围为:[-1 1]

简单案例:

# -*- coding: utf-8 -*-

# @File    : k-means2.py
# @Date    :  2020-02-18 11:25
# @Author  : admin
import pandas as pd
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt

def programmer_4():
    inputfile = '../data/zscoreddata.xls'
    k = 5
    data = pd.read_excel(inputfile)
    kmodel = KMeans(n_clusters=k, n_jobs=4)
    kmodel.fit(data)
    r1 = pd.Series(kmodel.labels_).value_counts()  # 统计各个类别的数目
    r2 = pd.DataFrame(kmodel.cluster_centers_)  # 找出聚类中心
    r = pd.concat([r2, r1], axis=1)  # 横向连接(axis=0是纵向),得到聚类中心对应的类别下的数目
    r.columns = list(data.columns) + [u'类别个数']  # 重命名表头
    print(r)
    #matlib 显示
    import matplotlib.pyplot as plt
    plt.figure(figsize=(5,5));
    colored = ["orange", "green", "blue","red","yellow"];
    colr = [colored[i] for i in kmodel.labels_];
    plt.scatter(data.values[:, 0], data.values[:, 1], color=colr);
    plt.show()
programmer_4();

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值