百变大魔王探花小明哥GBM分享 http://blog.sciencenet.cn/u/iggcas010 https://blog.csdn.net/SPESEG

博文

机器学习之K均值聚类附sklearn实战

已有 7566 次阅读 2018-6-12 21:53 |系统分类:科研笔记| 机器学习, k-means聚类, k均值聚类, sklearn

一、聚类:cluster 

聚类是一种无监督学习,将相似的对象归到同一个类(簇)中。聚类源于分类,但不等于分类,两者最大的区别在于聚类要划分的类是未知的,也就是没有数据标记,没有标记则不知道最佳结果(训练目标),无需训练数据,这是无监督学习的共性(第二次提到哈)。分类是确定数据类别的,训练数据是有标记的,这是监督学习啊。分类的结果是生成一个函数(或者模型),用于数据分类,而且待分类数据的类别必然是已知的几种类别。


二、k均值聚类:k-means cluster  

聚类方法中最简单的一种就是k-means聚类,这种方法是考试/面试中不可回避的,如果这个问题回答不正确,基本上可以确定PASS了。

 

由于聚类是根据数据之间的相似程度来确定归属一类,而相似度的计算方法并不唯一,如同测度一样,什么欧氏距离、闵可夫斯基距离、曼哈顿距离,一大堆任君选择。本文拟用欧氏距离来计算数据之间的相似度,对于非数值型数据(类别数据)可以采用数值型表示,并映射到二维空间。

 

关于这一点sklearn官方文档的定义是,各个群方差最小准则或者群的平方和最小。

http://scikit-learn.org/stable/modules/clustering.html#k-means

当然需要指定种群的个数,也就是要分多少类。对于数据集X中的数据,分为k个聚类

目标函数为:min

image.png

其中,k是选择的聚类的个数;C是聚类,共有k个;x是聚类中的点(sample);

u是聚类中心(均值、centroids),注意,u一般不是X中的数据。

由目标函数可知,要使V最小,那么必有每个聚类中的点到该聚类中心的距离之和为最小。


三、sklearn实战  

这个简单的目标函数实际求的过程中并不容易,之所以你觉得容易,那是因为有人替你负重前行,早就给你编好了函数(这是个类哈)—sklearn.cluster.KMeans,而你只需要简单的调用函数(创建对象)即可,真是无耻至极。

本宝宝本来想自己编写一个,无奈精力有限,老是犯困,没能实现。

想到《机器学习实战》这本书里面有造的轮子,结果发现是python2.7的版本,放在我的python3.6.5中根本不行,错误改了不少,最后一个实在不知道应该怎么改了,没见过这种用法,可能是个错误吧。网上找了下,也是这样的。真是懒人多。

clusterAssment[:,0].A==cent

于是我也偷懒无耻一把

直接看官方给的调用练习吧。造轮子太费劲了。

http://scikit-learn.org/stable/auto_examples/cluster/plot_kmeans_assumptions.html


修改第一个例子:

import numpy as np
import matplotlib.pyplot as plt
 
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
 
plt.figure()
 
n_samples = 1500
random_state = 170
X, y = make_blobs(n_samples=n_samples, random_state=random_state)
 
# correct number of clusters
estimator= KMeans(n_clusters=3, random_state=random_state)
y_pred =estimator.fit_predict(X)
xy=estimator.cluster_centers_
plt.scatter(X[:, 0], X[:, 1], c=y_pred)
plt.plot(xy[:,0],xy[:,1],'r^')
plt.title("Correct Number of Blobs")

图在这:

image.png

对其中的程序稍微修改,并画出了聚类中心,源文档没有这个,供参考。

 

四、下期预告:KNN

不要以为带NN的都是神经网络,就这个特殊,K-Nearest Neighborsk近邻,因为两者类似,易于混淆,所以放在一起,注意,KNN是分类方法,属于监督学习。




https://blog.sciencenet.cn/blog-1966190-1118655.html

上一篇:数据结构与算法之递归算法-附Python代码
下一篇:数据结构之栈和队列——附Python代码
收藏 IP: 159.226.117.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-4-26 17:27

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部