zoukankan      html  css  js  c++  java
  • 【学习笔记】非监督学习-k-means

    无监督学习,顾名思义,就是不受监督的学习,一种自由的学习方式。该学习方式不需要先验知识进行指导,而是不断地自我认知,自我巩固,最后进行自我归纳,在机器学习中,无监督学习可以被简单理解为不为训练集提供对应的类别标识(label),其与有监督学习的对比如下: 有监督学习(Supervised Learning)。

    在有监督学习中,我们把对样本进行分类的过程称之为分类(Classification),而在无监督学习中,我们将物体被划分到不同集合的过程称之为聚类(Clustering)。

    k-means

    K-means通常被称为劳埃德算法,这在数据聚类中是最经典的,也是相对容易理解的模型。算法执行的过程分为4个阶段。

    • 1、随机设置K个特征空间内的点作为初始的聚类中心
    • 2、对于其他每个点计算到K个中心的距离,从中选出距离最近的⼀个点作为⾃⼰的标记
    • 3、接着对着标记的聚类中心之后,重新计算出每个聚类的新中心点(平均值)
    • 4、如果计算得出的新中心点与原中心点一样,那么结束,否则重新进行第二步过程

    k-means API

    sklearn.cluster.KMeans(n_clusters=8,init='k-means++')

    • k-means聚类
    • n_clusters:开始的聚类中心数量
    • init:初始化方法,默认为'k-means ++'
    • labels_:默认标记的类型,可以和真实值比较(不是值比较)

    k-means对Instacart Market用户聚类

    import pandas as pd
    from sklearn.decomposition import PCA
    from sklearn.cluster import KMeans
    import matplotlib.pyplot as plt
    
    products = pd.read_csv('data/instacart-market-basket-analysis/products.csv')
    order_products__prior = pd.read_csv('data/instacart-market-basket-analysis/order_products__prior.csv', nrows=3000000)
    orders = pd.read_csv('data/instacart-market-basket-analysis/orders.csv', nrows=3000000)
    aisles = pd.read_csv('data/instacart-market-basket-analysis/aisles.csv')
    
    # merge the four 
    _mg = pd.merge(order_products__prior, products, on=['product_id', 'product_id'])
    _mg = pd.merge(_mg, orders, on=['order_id', 'order_id'])
    mt = pd.merge(_mg, aisles, on=['aisle_id', 'aisle_id'])
    
    cross = pd.crosstab(mt['user_id'], mt['aisle'])
    
    # 降纬
    pca = PCA(n_components=0.9)
    data = pca.fit_transform(cross)
    
    # 把样本数量减少
    x = data[:1000]
    
    km = KMeans(n_clusters=4)
    km.fit(x)
    predict = km.predict(x)
    
    plt.figure(figsize=(20, 8))
    colored = ['orange', 'green', 'blue', 'red']
    colr = [colored[i] for i in predict]
    
    plt.scatter(x[:, 1], x[:, 20], color=colr)
    plt.xlabel("2")
    plt.ylabel("10")
    
    plt.show()
    

    运行结果:

    Kmeans性能评估指标

    Kmeans性能评估指标API

    sklearn.metrics.silhouette_score(X, labels)

    • 计算所有样本的平均轮廓系数
    • X:特征值
    • labels:被聚类标记的目标值

    计算上例中的轮廓系数:

    # 轮廓系数
    silhouette_score(x, predict)
    

    输出结果:

    0.32277181074848377
    

    Kmeans总结

    特点分析:采用迭代式算法,直观易懂并且非常实用

    缺点:容易收敛到局部最优解(多次聚类)
    需要预先设定簇的数量(k-means++解决)

  • 相关阅读:
    bootstrap只有遮罩层没有对话框的解决方法
    从陈坤微信号说起:微信公众平台开发者的江湖
    微信5.0绑定银行卡教程
    web.xml
    java 泛型
    Struts2
    Hibernate
    SQL Joins
    case when
    log4j
  • 原文地址:https://www.cnblogs.com/zhangfengxian/p/10617319.html
Copyright © 2011-2022 走看看