一、K-means算法
一种聚类算法,所谓聚类,即根据相似性原则,将具有较高相似度的数据对象划分至同一类簇,将具有较高相异度的数据对象划分至不同类簇。聚类过程为无监督过程,即待处理数据对象没有任何先验知识。
二、聚类步骤
1、随机设置K个特征空间内的点作为初始的聚类中心
2、对于其他的每个点计算到K个中心的距离,未知的点选择最近的一个聚类中心点作为标记类型
3、接着对着标记的聚类中心点,重新计算每个聚类的新中心点(平均值)
4、如果计算得出的新中心点与原中心点一样,那么结束,否则重新从第二步开始。
三、优缺点
优点,采用迭代式算法,直观易懂且非常实用
缺点,容易收敛到局部最优解
四、应用场景
目标用户的群体分类、不同产品的价值组合、探测、发现孤立点、异常值。
下面使用K-means算法对客户进行分类,
- from sklearn.datasets import load_boston
复制代码- from sklearn.model_selection import train_test_split
复制代码- from sklearn.preprocessing import StandardScaler
复制代码- from sklearn.linear_model import LinearRegression,SGDRegressor,Ridge,LogisticRegression
复制代码- from sklearn.metrics import mean_squared_error,classification_report,roc_curve,roc_auc_score,silhouette_score
复制代码- from sklearn.externals import joblib
复制代码- from sklearn.decomposition import PCA
复制代码- from sklearn.cluster import KMeans
复制代码- [/code][code]# ### K-means算法
复制代码- # 一种聚类算法,所谓聚类,即根据相似性原则,将具有较高相似度的数据对象划分至同一类簇,将具有较高相异度的数据对象划分至不同类簇。聚类过程为无监督过程,即待处理数据对象没有任何先验知识。
复制代码- # 1、随机设置K个特征空间内的点作为初始的聚类中心
复制代码- # 2、对于其他的每个点计算到K个中心的距离,未知的点选择最近的一个聚类中心点作为标记类型
复制代码- # 3、接着对着标记的聚类中心点,重新计算每个聚类的新中心点(平均值)
复制代码- # 4、如果计算得出的新中心点与原中心点一样,那么结束,否则重新从第二步开始。
复制代码- # 目标用户的群体分类、不同产品的价值组合、探测、发现孤立点、异常值。
复制代码- [/code][code]# #### 对instacart_market进行聚类
复制代码- [/code][code]# ##### 获取数据
复制代码- order_products = pd.read_csv(r"C:\Users\Administrator\a_jy\heimaPy\hmpy_01\order_products__prior.csv")
复制代码- products = pd.read_csv(r"C:\Users\Administrator\a_jy\heimaPy\hmpy_01\products.csv")
复制代码- orders = pd.read_csv(r"C:\Users\Administrator\a_jy\heimaPy\hmpy_01\orders.csv")
复制代码- aisles = pd.read_csv(r"C:\Users\Administrator\a_jy\heimaPy\hmpy_01\aisles.csv")
复制代码- # order_products__prior.csv:订单与商品信息
复制代码- [/code][code]# 字段:order_id, product_id, add_to_cart_order, reordered
复制代码- # 字段:product_id, product_name, aisle_id, department_id
复制代码- # 字段:order_id,user_id,eval_set,order_number,….
复制代码- # 合并aisles和products aisle和product_id
复制代码- table1 = pd.merge(aisles,products,on=['aisle_id','aisle_id'])
复制代码- table2 = pd.merge(table1,order_products,on=['product_id','product_id'])
复制代码- table3 = pd.merge(table2,orders,on=['order_id','order_id'])
复制代码- table = pd.crosstab(table3['user_id'],table3['aisle'])
复制代码- transfer = PCA(n_components=0.95)
复制代码- data_new = transfer.fit_transform(data)
复制代码- y_predict = estimator.predict(data_new)
复制代码- # SCi = bi-ai/(max(ai,bi))
复制代码- # bi(到外部簇群的最小距离),ai(到内部中心点的距离)
复制代码- silhouette_score(data_new, y_predict)
复制代码 [code][/code]下面是在jupyter中的运行结果,
![]()
![]()
![]()
![]()
![]()
![]()
回归、模型评估、聚类的代码链接如下,
链接:
https://pan.baidu.com/s/11Gr7Bnwzi-bCv-g7cPFPqw
提取码:mgib
|
|