无监督学习:
【机器学习】使用scikitLearn对数据进行聚类:Kmeans聚类算法及聚类效果评估
【机器学习】使用scikitLearn对数据进行聚类:高斯聚类GaussianMixture
【机器学习】使用scikitLearn对数据进行聚类:7种异常和新颖性检测方式

1.图像分割
使用聚类方法,将色值聚成8类,并将每个色点赋值成聚类中心的颜色:

from matplotlib.image import imread
#读取图片
image = imread(os.path.join(images_path, filename))
#将图片拉直
X = image.reshape(-1, 3)
kmeans = KMeans(n_clusters=8, random_state=42).fit(X)
#将每个实例色点替换成聚类中心
segmented_img = kmeans.cluster_centers_[kmeans.labels_]
#重新塑回图形宽高
segmented_img = segmented_img.reshape(image.shape)
segmented_imgs = []

2.聚类做参数的预处理

from sklearn.pipeline import Pipeline
#当使用pipeline的时候,自动调用前序处理的transform方法,这里调用transform后,将原始数据转化为到#各个聚类中心的距离,以提高最终分类的准确率
pipeline = Pipeline([("kmeans", KMeans(n_clusters=50, random_state=42)),("log_reg", LogisticRegression(multi_class="ovr", solver="lbfgs", max_iter=5000, random_state=42)),
])
pipeline.fit(X_train, y_train)

3.半监督学习Semi-Supervised:标签传播
当大量数据集中只有少部分带标签的类时,使用标签传播的方法,可以节约人力标注,其步骤为:
(1)使用聚类聚成n类,形成n个中心点。
(2)找出最接近每个中心点的实例,进行人为标注。

kmeans = KMeans(n_clusters=k, random_state=42)
X_digits_dist = kmeans.fit_transform(X_train)
#取出距离聚类中心最接近的实例,并进行人工标记的工作:
representative_digit_idx = np.argmin(X_digits_dist, axis=0)
X_representative_digits = X_train[representative_digit_idx]
#人工辨认并赋值模型:
y_representative_digits = np.array([0, 1, 3, 2, 7, 6, 4, 6, 9, 5,1, 2, 9, 5, 2, 7, 8, 1, 8, 6,3, 2, 5, 4, 5, 4, 0, 3, 2, 6,1, 7, 7, 9, 1, 8, 6, 5, 4, 8,5, 3, 3, 6, 7, 9, 7, 8, 4, 9])

(3)其它实例按照接近中心点的程度,进行标签扩散操作。

(4)由于远离中心的实例,可能含有噪声,并且特征不明显,所以将标签扩散至所有实例的方法,未必能很好的提升准确率,故选择一定的比例,将标签扩散至接近中心的实例。

#指定取最近的75%的数据点的值
percentile_closest = 75
#transform后的索引取值,可以理解为一种定式,找出每个类相对于其自身聚类中心的聚类
X_cluster_dist = X_digits_dist[np.arange(len(X_train)), kmeans.labels_]
for i in range(k):#是否在当前指定的第i个聚类里面in_cluster = (kmeans.labels_ == i)#拿出其距离cluster_dist = X_cluster_dist[in_cluster]#从小到大拿出前percentile_closest的数据点处的值(分位数)cutoff_distance = np.percentile(cluster_dist, percentile_closest)above_cutoff = (X_cluster_dist > cutoff_distance)#远距离的点聚类重置为-1X_cluster_dist[in_cluster & above_cutoff] = -1
#找出需要传播的点
partially_propagated = (X_cluster_dist != -1)
X_train_partially_propagated = X_train[partially_propagated]
y_train_partially_propagated = y_train_propagated[partially_propagated]
#使用ovr处理多分类问题
log_reg = LogisticRegression(multi_class="ovr", solver="lbfgs", max_iter=5000, random_state=42)
log_reg.fit(X_train_partially_propagated, y_train_partially_propagated)

密度聚类:密度聚类将高密度连续区域视为一个集群。
指定一个实例领域中包含的其它实例点的数目k,如果某个实例邻域数目大于k,则为核心实例;核心实例标记一个集群,如果该核心实例领域中有其它核心实例,则集群得到延伸。如果一个实例的邻域中没有实例,则该实例被标记为异常。

from sklearn.cluster import DBSCAN
#0.05为邻域大小
dbscan = DBSCAN(eps=0.05, min_samples=5)
dbscan.fit(X)
#查看聚类情况
dbscan.labels_
#查看核心实例情况
dbscan.components_
#得到核心实例的索引,当索引返回-1时,为异常值,
#其标记了哪些实例是核心实例
dbscan.core_sample_indices_

DBSCAN只有fit_predict方法,他无法独立预测新实例,需要和其它分类算法相配合。

from sklearn.neighbors import KNeighborsClassifier
#其原理是,训练集中50个最近的实例投票决定新实例的类别
knn = KNeighborsClassifier(n_neighbors=50)
#在聚类后转化为有标签的分类算法
knn.fit(dbscan.components_, dbscan.labels_[dbscan.core_sample_indices_])
X_new = np.array([[-0.5, 0], [0, 0.5], [1, -0.1], [2, 1]])
knn.predict(X_new)

问题在于,knn分类给每个实例一个类,没有像dbscan一样的异常标签,其解决方法是:

#得到新实例离自己最近实例的距离和该邻居在数据集中的的索引号(每个点的邻居的索引)
y_dist, y_pred_idx = knn.kneighbors(X_new, n_neighbors=1)
#不考虑距离的情况下,最近的距离应该同其一个类别,先取核心实例标签(训练时用核心点进行训练),再取所有预测结果
y_pred = dbscan.labels_[dbscan.core_sample_indices_][y_pred_idx]
#考虑距离时,点中和其它点距离大于0.2的点其预测类别标记为异常:
y_pred[y_dist > 0.2] = -1
y_pred.ravel()

密度聚类的特点是其对类别的形状不敏感,在距离阈值eps较小时,时间复杂度O(mlogm)。

【机器学习】使用scikitLearn对数据进行聚类:Kmeans聚类算法的应用及密度聚类DBSCAN相关推荐

  1. C语言实现聚类K-means cluster算法(附完整源码)

    聚类K-means cluster算法 实现聚类K-means cluster算法的完整源码(定义,实现,main函数测试) 实现聚类K-means cluster算法的完整源码(定义,实现,main ...

  2. 两种聚类方法——K均值聚类(K-means)算法和模糊C均值聚类(FCM)算法的简述与在MATLAB中的实现

    目录 1.K-means算法 1.1算法流程 1.2程序实现 1.3实验结果 原始数据集 聚类结果 2.FCM算法 2.1算法流程 2.2程序设计 FCM子函数 主函数 2.3实验结果 原始数据集 聚 ...

  3. [机器学习] 什么时候对数据标准化处理?哪些算法需要/不需要标准化?

    什么时候对数据中心化? 在聚类过程中,标准化显得尤为重要.这是因为聚类操作依赖于对类间距离和类内聚类之间的衡量.如果一个变量的衡量标准高于其他变量,那么我们使用的任何衡量标准都将受到该变量的过度影响. ...

  4. 【机器学习】使用scikitLearn对数据进行聚类:Kmeans聚类算法及聚类效果评估

    无监督学习: [机器学习]使用scikitLearn对数据进行聚类:Kmeans聚类算法的应用及密度聚类DBSCAN [机器学习]使用scikitLearn对数据进行聚类:高斯聚类GaussianMi ...

  5. 【机器学习】使用scikitLearn对数据进行聚类:7种异常和新颖性检测方式

    无监督学习: [机器学习]使用scikitLearn对数据进行聚类:Kmeans聚类算法及聚类效果评估 [机器学习]使用scikitLearn对数据进行聚类:Kmeans聚类算法的应用及密度聚类DBS ...

  6. 聚类算法_层次聚类_密度聚类(dbscan,meanshift)_划分聚类(Kmeans)详解

    注: 两整天的成果,谬误之处勿喷 1 聚类概述 样本 没有训练的样本 没有标注的样本 1.1 相似度度量 1.1.1 距离相似度度量 距离度量 dist(oi,oj)dist(o_{i},o_{j}) ...

  7. 【机器学习】python机器学习使用scikit-learn对模型进行评估:使用t分布及z分布评估模型误差的95%置信空间

    端到端机器学习导航: [机器学习]python借助pandas加载并显示csv数据文件,并绘制直方图 [机器学习]python使用matplotlib进行二维数据绘图并保存为png图片 [机器学习]p ...

  8. OpenCV k均值聚类kmeans clustering的实例(附完整代码)

    OpenCV k均值聚类kmeans clustering的实例 OpenCV k均值聚类kmeans clustering的实例 OpenCV k均值聚类kmeans clustering的实例 # ...

  9. 机器学习实战——密度聚类算法

    机器学习实战--密度聚类算法 1 密度聚类 2 sklearn中的实现 1 密度聚类 密度聚类假设聚类结构能够通过样本分布的密集程度确定,通常情形下,密度聚类算法从样本密度的角度来考察样本之间的可连接 ...

最新文章

  1. 耗时 2 年,用 8.5 万块乐高积木最牛复刻 Apple Park
  2. 纲:散户炒股存两大弱势 我自己不炒也不建议小散炒
  3. QML基础类型之matrix4x4
  4. 基于jsp+javabean+servlet的二手物品交易系统_基于Jsp+Servlet的商城系统
  5. HDU - 5451 Best Solver(循环群+矩阵快速幂)
  6. 从零开始学android编程_小白也能学得会!谷歌推出免费的Kotlin和Android开发课程...
  7. ASP.NET Core中使用IOC三部曲(一.使用ASP.NET Core自带的IOC容器)
  8. java多组List所有的排列组合
  9. RSA签名验签学习笔记
  10. 能力不错的大厂高 P,为什么过不了小厂的试用期?
  11. java笔记:熟练掌握线程技术---基础篇之解决资源共享的问题(中)--前篇
  12. 还在用Json-lib?面对疾风吧!
  13. 探秘Runtime - Runtime介绍
  14. android 获取已安装的应用大小,Android获得已安装应用大小
  15. 第五章、SQL 语言学习(基础篇)
  16. java宽度优先搜索之八数码,广度优先搜索解决八数码问题
  17. Win10 系统菜单和应用程序菜单显示字体模糊
  18. [转] 蝴蝶效应,青蛙现象,鳄鱼法则,鲇鱼效应,羊群效应,刺猬法则,手表定律,破窗理论,二八定律,木桶理论,马太效应,这些你都明白吗?...
  19. 鲸探发布点评:9月21日发售高分一号、七号卫星数字藏品
  20. 高性价比的“小985”院校推荐!认可度超高

热门文章

  1. [机器学习笔记] (四)决策树 Decision Tree
  2. 西南科技大学OJ题 above average 0706
  3. unity 渐变消失_【Unity】透明度渐变
  4. HashCode和HashMap
  5. Java+MySQL 基于springboot+vue的校园二手交易平台#毕业设计
  6. [LaTeX] 将参考文献的引用格式从编号改为 “作者,年份” 及可能出现的问题(Package natbib Error: Bibliography not compatible...)解决
  7. VectorCAST测试工具环境搭建
  8. PHP 跨域header处理
  9. linux用5块磁盘组rid5,raid10 五块硬盘/raid5(三块使用,两块备份)
  10. highcharts设置背景颜色,设置数据点单位,加大字体等