我们可以怎样最有用地对其进行归纳和分组?我们可以怎样以一种压缩格式有效地表征数据?这都是无监督学习的目标,之所以称之为无监督,是因为这是从无标签的数据开始学习的。
我们先来看一下一个K-means的聚类效果图
# 取500个用户进行测试 cust = data[:500] km = KMeans(n_clusters=4) km.fit(cust) pre = km.predict(cust)
注:对于每个点i 为已聚类数据中的样本 ,b_i 为i 到其它族群的所有样本的距离最小值,a_i 为i 到本身簇的距离平均值。最终计算出所有的样本点的轮廓系数平均值
如果b_i>>a_i:趋近于1效果越好, b_i<<a_i:趋近于-1,效果不好。轮廓系数的值是介于 [-1,1] ,越趋近于1代表内聚度和分离度都相对较优。
silhouette_score(cust, pre)
注意:聚类一般做在分类之前
import pandas as pd from sklearn.cluster import KMeans from sklearn.decomposition import PCA # 1、获取数据集 # ·商品信息- products.csv: # Fields:product_id, product_name, aisle_id, department_id # ·订单与商品信息- order_products__prior.csv: # Fields:order_id, product_id, add_to_cart_order, reordered # ·用户的订单信息- orders.csv: # Fields:order_id, user_id,eval_set, order_number,order_dow, order_hour_of_day, days_since_prior_order # ·商品所属具体物品类别- aisles.csv: # Fields:aisle_id, aisle from sklearn.metrics import silhouette_score products = pd.read_csv("../instacart/products.csv") order_products = pd.read_csv("../instacart/order_products__prior.csv") orders = pd.read_csv("../instacart/orders.csv") aisles = pd.read_csv("../instacart/aisles.csv") # 2、合并表,将user_id和aisle放在一张表上 # 1)合并orders和order_products on=order_id tab1:order_id, product_id, user_id tab1 = pd.merge(orders, order_products, on=["order_id", "order_id"]) # 2)合并tab1和products on=product_id tab2:aisle_id tab2 = pd.merge(tab1, products, on=["product_id", "product_id"]) # 3)合并tab2和aisles on=aisle_id tab3:user_id, aisle tab3 = pd.merge(tab2, aisles, on=["aisle_id", "aisle_id"]) # 3、交叉表处理,把user_id和aisle进行分组 table = pd.crosstab(tab3["user_id"], tab3["aisle"]) # 4、主成分分析的方法进行降维 # 1)实例化一个转换器类PCA transfer = PCA(n_components=0.95) # 2)fit_transform data = transfer.fit_transform(table) print(data.shape) # 取500个用户进行测试 # 如果b_i>>a_i:趋近于1效果越好, b_i<<a_i:趋近于-1,效果不好。轮廓系数的值是介于 [-1,1] ,越趋近于1代表内聚度和分离度都相对较优。 cust = data[:500] km = KMeans(n_clusters=4) km.fit(cust) pre = km.predict(cust) print(silhouette_score(cust, pre))
返回结果:
(206209, 44) 0.466014214896049
答案: 正规方程和梯度下降
答案: 过拟合就是训练误差很小,但是测试误差很大
原因有: 样本偏差, 模型过于复杂
答案: 分类问题的评估方法是准确率, 精确率和召回率
回归问题的评估方法是均方差
聚类问题的评估方法是轮廓系数