大师兄的数据分析学习笔记(二十四):回归树与提升树
大师兄的数据分析学习笔记(二十六):聚类(二)
一、监督学习和无监督学习
- 分类和回归都属于监督学习,监督学习的特点是有标注。
- 所谓标注也就是数据的特征,不管是分类还是回归都是通过标注进行区分数据。
- 而无监督学习没有标注,所以无监督学习的目的就是给数据加上标注。
- 进行标注的原则是,加过标注后的数据应该尽可能相似,而不同标注内的数据应该尽可能不同。
- 由于目的不同,方法不同,标注数据的方式也不同,所以会有多种算法用于实现标注。
- 在无监督学习中,常用的两种方法是聚类和关联规则。
二、关于聚类
- 聚类是将集合分成类似的对象组成的多个类的过程。
- 在聚类中,常用四种算法:
- 基于切割的K-means聚类算法。
- 基于层次的聚类算法。
- 基于密度的DBSCAN聚类算法。
- 基于图的Split聚类算法。
三、K-means算法
- K-means算法的思路是:所有类都有一个中心,属于一个类的点到它的中心的距离比其它类离中心更新。
- 这样就会牵扯到两个问题:
- 如何定义中心:取数据各维度的均值。
- 如何衡量距离:欧式距离方法
- K指确定分类的数目,means指不断取均值,算法:
从n个样本中随机选取k个作为初始化的质心;
对每个样本测量其到每个质心的距离,并把它归到最近的质心的类;
重新计算已经得到的各个类的质心;
- 迭代2-3直到新的质心与原质心相等或小于指定阈值。
- K-means算法的问题:
- 初始质心位置可能会影响最终聚类的结果。
解决:多次尝试,取最稳定的结果。- 个别离群值会影响整理聚类的效果。
解決:将取质心换成取中点(转换为K-Medoids算法)- 必须要指定K
解决:借鉴其它衡量因子辅助(如轮廓系数)
>>>import numpy as np
>>>import matplotlib.pyplot as plt
>>>from sklearn.datasets import make_circles,make_blobs,make_moons
>>>from sklearn.cluster import KMeans
>>>n_samples = 1000
>>>circles = make_circles(n_samples=n_samples,factor=0.5,noise=0.05)
>>>moons = make_moons(n_samples=n_samples,noise=0.05)
>>>blobs = make_blobs(n_samples=n_samples,random_state=8)
>>>random_data = np.random.rand(n_samples,2),None
>>>colours = "bgrcmyk"
>>>data = [circles,moons,blobs,random_data]
>>>models = [("None",None),("Kmeans",KMeans(n_clusters=3))]
>>>fig = plt.figure()
>>>for inx,clt in enumerate(models):
>>> clt_name,clt_entity = clt
>>> for i,dataset in enumerate(data):
>>> X,Y = dataset
>>> if not clt_entity:
>>> clt_res = [0 for item in range(len(X))]
>>> else:
>>> clt_entity.fit(X)
>>> clt_res = clt_entity.labels_.astype(int)
>>> fig.add_subplot(len(models),len(data),inx*len(data)+i+1)
>>> plt.title(clt_name)
>>> [plt.scatter(X[p,0],X[p,1],color=colours[clt_res[p]]) for p in range(len(X))]
>>>plt.show()