目录
1. 无监督学习
(1)经典案例
任务:对以下6张图片,按照自己喜欢的方式分成两组。
由于没有给出特定标签,所有我们有多种分类方法,如根据站着或坐着、全身或半身、蓝眼球或不是蓝眼球等等进行分类。
在前两节也讲到线性回归和逻辑回归问题,他们有正确的数据做标签,属于监督式学习,接下来我们详细讲解无监督式学习。
(2)定义、特点、和主要应用
无监督学习是机器学习的一种方法,没有给事先标记过的训练示例,自动对输入的数据进行分类或分群。
- 算法不受监督信息(偏见)的约束,可能考虑到新的信息;
- 不需要标签数据,极大程度扩大数据样本。
主要应用:聚类分析、关联规则、维度缩减(后面都要依次介绍)。
(3)与监督式学习的区别
监督学习,图中数据已打好了标签,有y。
无监督学习,数据无标签,无y
2. 聚类分析
聚类分析又称为群分析,根据对象某些属性的相似度,将其自动化分为不同的类别。接下来介绍几种常见的聚类算法。
(1)KMeans聚类
以空间中K个中心点进行聚类,对最靠近他们的对象归类,是聚类算法中最为基础但也最为重要的算法。
算法流程:
- 选择聚类个数
- 确定聚类中心
- 根据聚类中心聚类确定各个点所属类别
- 根据各个类别数据更新聚类中心
- 重复以上步骤直到收敛
特点:
- 重复过程直到收敛,实现简单,收敛快
- 需要指定类别数量
以上公式不理解的话,给大家看个图就清楚了。
(2)Meanshift(均值漂移聚类)
我们知道KMeans算法首先要给出聚类类别K,但很多时候我们自己也不知道要分成几类,这就需要用到另一种算法。
定义:
一种基于密度梯度上升的聚类算法。(沿着密度上升方向寻找聚类中心点)
特点:
- 自动发现类别数量,不需要人工选择
- 需要选择区域半径
(3)KNN(K近邻分类)
注意:KNN是监督学习,为了让大家更好的理解,放在这与KMeans算法进行比较。
给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的K个实例,这K个实例的多数属于某个类,就把该输入实例分类到这个类中。
举例:
- K=3,绿色圆点的最近的3个邻居是2个红色小三角形和一个蓝色小正方形,判定绿色的待分类点属于红色的三角形一类。
- K=5,绿色圆点的最近的5个邻居是2个红色三角形和3个蓝色的正方形,判定绿色的待分类点属于蓝色的正方形一类。
3. 代码实现
(1)KMeans聚类
针对上图分类给出核心代码:
#模型训练
from sklearn.cluster import KMeans
KM = KMeans(n_clusters=3,random_state=0)
KM.fit(X)
#获取模型确定的中心点
centers = KM.cluster_centers_
#准确率计算
from sklearn.metrics import accuracy_score
accuracy = accuracy_score(y,y_predict)
由于在分类之后并不知道结果它是属于哪一类(可能类别发生了错误),如图,所以对预测结果矫正。
#结果矫正
y_cal = []
for i in y_predict:
if i == 0:
y_cal.append(2)
elif i == 1:
y_cal.append(1)
else:
y_cal.append(0)
print(y_predict,y_cal)
其实上述例子已经给出了正确标签,所以我们知道类别发生了错误,从而有目的的进行结果矫正。但有人认为我们是无监督学习,本该没有标签的,怎么会发现类别错误的?其实在实际生活当中,一些带标签的数据也可以通过无监督学习算法进行分类,比如有无穷的数据,90%是正样本,其他是负样本,此时就可以根据无监督学习算法进行分类后的数量多少判断谁是正样本,谁是负样本,这比采用监督学习更加迅速、有效。
(2)Meanshift(均值漂移聚类)
#自动计算带宽(区域半径)
from sklearn.cluster import MeanShift,estimate_bandwidth
bw = estimate_bandwidth(X,n_samples=500)
#模型建立与训练
ms = MeanShift(bandwidth=bw)
ms.fit(X)
#结果矫正原理同KMeans
#模型评估
from sklearn.metrics import accuracy_score
accuracy = accuracy_score(y,y_predict)
(3)KNN(K近邻分类)
#模型训练
from sklearn.neighbors import KNeighborsClassifier
KNN = KNeighborsClassifier(n_neighbors=3)
KNN.fit(X,y)
#模型评估
from sklearn.metrics import accuracy_score
accuracy = accuracy_score(y,y_predict)
4. 总结
KMeans、Meanshift:无监督学习;训练数据:KMeans需要确定类别个数、Meanshift需要确定区域半径。
KNN:监督学习;训练数据:X\y