python-K-means聚类

论坛 期权论坛 期权     
数据分析与模型   2019-7-8 05:52   3085   0
一、K-means算法
    一种聚类算法,所谓聚类,即根据相似性原则,将具有较高相似度的数据对象划分至同一类簇,将具有较高相异度的数据对象划分至不同类簇。聚类过程为无监督过程,即待处理数据对象没有任何先验知识。
二、聚类步骤
    1、随机设置K个特征空间内的点作为初始的聚类中心
    2、对于其他的每个点计算到K个中心的距离,未知的点选择最近的一个聚类中心点作为标记类型
    3、接着对着标记的聚类中心点,重新计算每个聚类的新中心点(平均值)
    4、如果计算得出的新中心点与原中心点一样,那么结束,否则重新从第二步开始。
三、优缺点
    优点,采用迭代式算法,直观易懂且非常实用
    缺点,容易收敛到局部最优解
四、应用场景
    目标用户的群体分类、不同产品的价值组合、探测、发现孤立点、异常值。
下面使用K-means算法对客户进行分类,
  1. #!/usr/bin/env python
复制代码
  1. # coding: utf-8
复制代码
  1. [/code][code]# ## 导包
复制代码
  1. [/code][code]# In[25]:
复制代码
  1. [/code][code]
复制代码
  1. import pandas as pd
复制代码
  1. import numpy as np
复制代码
  1. #使用sklearn自带数据集
复制代码
  1. from sklearn.datasets import load_boston
复制代码
  1. #拆分数据集
复制代码
  1. from sklearn.model_selection import train_test_split
复制代码
  1. #标准化
复制代码
  1. from sklearn.preprocessing import StandardScaler
复制代码
  1. #正规方程 梯度下降 岭回归 逻辑回归
复制代码
  1. from sklearn.linear_model import LinearRegression,SGDRegressor,Ridge,LogisticRegression
复制代码
  1. #均方误差 混淆矩阵 AUC 轮廓系数
复制代码
  1. from sklearn.metrics import mean_squared_error,classification_report,roc_curve,roc_auc_score,silhouette_score
复制代码
  1. #模型的保存和加载
复制代码
  1. from sklearn.externals import joblib
复制代码
  1. #PCA降维
复制代码
  1. from sklearn.decomposition import PCA
复制代码
  1. #K-means聚类
复制代码
  1. from sklearn.cluster import KMeans
复制代码
  1. [/code][code]# ### K-means算法
复制代码
  1. [/code][code]# K-means算法
复制代码
  1. #     一种聚类算法,所谓聚类,即根据相似性原则,将具有较高相似度的数据对象划分至同一类簇,将具有较高相异度的数据对象划分至不同类簇。聚类过程为无监督过程,即待处理数据对象没有任何先验知识。
复制代码
  1. # 聚类步骤
复制代码
  1. #     1、随机设置K个特征空间内的点作为初始的聚类中心
复制代码
  1. #     2、对于其他的每个点计算到K个中心的距离,未知的点选择最近的一个聚类中心点作为标记类型
复制代码
  1. #     3、接着对着标记的聚类中心点,重新计算每个聚类的新中心点(平均值)
复制代码
  1. #     4、如果计算得出的新中心点与原中心点一样,那么结束,否则重新从第二步开始。
复制代码
  1. # 优缺点
复制代码
  1. #     优点,采用迭代式算法,直观易懂且非常实用
复制代码
  1. #     缺点,容易收敛到局部最优解
复制代码
  1. # 应用场景
复制代码
  1. #     目标用户的群体分类、不同产品的价值组合、探测、发现孤立点、异常值。
复制代码
  1. #
复制代码
  1. [/code][code]# #### 对instacart_market进行聚类
复制代码
  1. [/code][code]# ##### 获取数据
复制代码
  1. [/code][code]# In[2]:
复制代码
  1. [/code][code]
复制代码
  1. # 1、获取数据
复制代码
  1. order_products = pd.read_csv(r"C:\Users\Administrator\a_jy\heimaPy\hmpy_01\order_products__prior.csv")
复制代码
  1. [/code][code]
复制代码
  1. # In[3]:
复制代码
  1. [/code][code]
复制代码
  1. products = pd.read_csv(r"C:\Users\Administrator\a_jy\heimaPy\hmpy_01\products.csv")
复制代码
  1. [/code][code]
复制代码
  1. # In[4]:
复制代码
  1. [/code][code]
复制代码
  1. orders = pd.read_csv(r"C:\Users\Administrator\a_jy\heimaPy\hmpy_01\orders.csv")
复制代码
  1. [/code][code]
复制代码
  1. # In[5]:
复制代码
  1. [/code][code]
复制代码
  1. aisles = pd.read_csv(r"C:\Users\Administrator\a_jy\heimaPy\hmpy_01\aisles.csv")
复制代码
  1. [/code][code]
复制代码
  1. # In[6]:
复制代码
  1. [/code][code]
复制代码
  1. # 2、合并表
复制代码
  1. # order_products__prior.csv:订单与商品信息
复制代码
  1. [/code][code]# 字段:order_id, product_id, add_to_cart_order, reordered
复制代码
  1. # products.csv:商品信息
复制代码
  1. # 字段:product_id, product_name, aisle_id, department_id
复制代码
  1. # orders.csv:用户的订单信息
复制代码
  1. # 字段:order_id,user_id,eval_set,order_number,….
复制代码
  1. # aisles.csv:商品所属具体物品类别
复制代码
  1. # 字段:aisle_id, aisle
复制代码
  1. # 合并aisles和products aisle和product_id
复制代码
  1. table1 = pd.merge(aisles,products,on=['aisle_id','aisle_id'])
复制代码
  1. [/code][code]
复制代码
  1. # In[7]:
复制代码
  1. [/code][code]
复制代码
  1. table2 = pd.merge(table1,order_products,on=['product_id','product_id'])
复制代码
  1. [/code][code]
复制代码
  1. # In[8]:
复制代码
  1. [/code][code]
复制代码
  1. table3 = pd.merge(table2,orders,on=['order_id','order_id'])
复制代码
  1. [/code][code]
复制代码
  1. # In[9]:
复制代码
  1. [/code][code]
复制代码
  1. # 3、找到user_id和aisle之间的关系
复制代码
  1. table = pd.crosstab(table3['user_id'],table3['aisle'])
复制代码
  1. #为了运行效率,只处理前10000条数据
复制代码
  1. data = table[:10000]
复制代码
  1. # 4、PCA降维
复制代码
  1. # 1)实例化一个转换器类
复制代码
  1. transfer = PCA(n_components=0.95)
复制代码
  1. # 2)调用fit_transform
复制代码
  1. data_new = transfer.fit_transform(data)
复制代码
  1. #5、整理好的数据集
复制代码
  1. data_new
复制代码
  1. [/code][code]
复制代码
  1. # ##### 预估器流程
复制代码
  1. [/code][code]# In[11]:
复制代码
  1. [/code][code]
复制代码
  1. estimator = KMeans()
复制代码
  1. estimator.fit(data_new)
复制代码
  1. [/code][code]
复制代码
  1. # In[12]:
复制代码
  1. [/code][code]
复制代码
  1. y_predict = estimator.predict(data_new)
复制代码
  1. y_predict[:100]
复制代码
  1. [/code][code]
复制代码
  1. # ##### 模型评估
复制代码
  1. [/code][code]# 效果好的特点
复制代码
  1. #     高内聚,低耦合
复制代码
  1. #     外部距离最大化,内部距离最小化
复制代码
  1. # 用轮廓系数评估
复制代码
  1. #     SCi = bi-ai/(max(ai,bi))
复制代码
  1. #     接近1好,接近-1差。
复制代码
  1. #     bi(到外部簇群的最小距离),ai(到内部中心点的距离)
复制代码
  1. [/code][code]# In[14]:
复制代码
  1. [/code][code]
复制代码
  1. silhouette_score(data_new, y_predict)
复制代码
[code][/code]下面是在jupyter中的运行结果,












回归、模型评估、聚类的代码链接如下,
    链接:
    https://pan.baidu.com/s/11Gr7Bnwzi-bCv-g7cPFPqw
    提取码:mgib
   




分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:10
帖子:2
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP