Python 机器学习 Note 1
03 Jul 2017 |
Python
无监督学习
利用无标签的数据学习数据的分布或数据与数据之间的关系被称作无监督学习。
无监督学习最常应用的场景是聚类(clustering)和降维(DimensionReduction)。
聚类
聚类(clustering),就是根据数据的“相似性”将数据分为多类的过程。
评估两个不同样本之间的“相似性” ,通常使用的方法就是计算两个样本之间的“距离”。使用不同的方法计算样本间的距离会关系到聚类结果的好坏。
距离
欧式距离
欧氏距离是最常用的一种距离度量方法,源于欧式空间中两点的距离。
曼哈顿距离
曼哈顿距离也称作“城市街区距离”,类似于在城市之中驾车行驶,从一个十字路口到另外一个十字楼口的距离。
马氏距离
马氏距离表示数据的协方差距离,是一种尺度无关的度量方式。也就是说马氏距离会先将样本点的各个属性标准化,再计算样本间的距离。
夹角余弦
余弦相似度用向量空间中两个向量夹角的余弦值作为衡量两个样本差异的大小。余弦值越接近1,说明两个向量夹角越接近0度,表明两个向量越相似。
Sklearn (scikit-learn)
sklearn 库提供的聚类算法函数包含在 sklearn.cluster 这个模块中。如: K-Means, 近邻传播算法 , DBSCAN 等。
K-means方法
k-means算法以k为参数,把n个对象分成k个簇,使簇内具有较高的相似度,而簇间的相似度较低。
处理过程如下:
- 随机选择k个点作为初始的聚类中心;
- 对于剩下的点,根据其与聚类中心的距离,将其归入最近的簇
- 对每个簇,计算所有点的均值作为新的聚类中心
- 重复2、3直到聚类中心不再发生改变
使用方法 :
参数
- nclusters:用于指定聚类中心的个数。
- label:聚类后各数据所属的标签
- axis: 按行求和
- fitpredict():计算簇中心以及为簇分配序号
补充
计算两条数据相似性时,Sklearn 的K-Means默认用的是欧式距离。
实例
DBSCAN 密度聚类
DBSCAN算法是一种基于密度的聚类算法:
- 聚类的时候不需要预先指定簇的个数
- 最终的簇的个数不定
DBSCAN算法将数据点分为三类:
- 核心点 :在半径Eps内含有超过MinPts数目的点
- 边界点 :在半径Eps内点的数量小于MinPts,但是落在核心点的邻域内
- 噪音点 :既不是核心点也不是边界点的点
算法流程
- 将所有点标记为核心点、边界点或噪声点;
- 删除噪声点;
- 为距离在Eps之内的所有核心点之间赋予一条边;
- 每组连通的核心点形成一个簇;
- 将每个边界点指派到一个与之关联的核心点的簇中(哪一个核心点的半径范围之内)。
使用
参数
- eps:两个样本被看作邻居节点的最大距离
- minsamples: 簇的样本数
- metric:距离计算方式
实例
参考资料:中国大学mooc
对康威的生命游戏很感兴趣,想试下用Python实现。很巧在实验楼上看到了这个项目。