前言:粗略研究完神经网络基础——BP、CNN、RNN、LSTM网络后自己算是松懈了很多,好长的时间都没有坚持再更新博客了。“腐败”生活了这么久,还是要找到自己一点乐趣吧,于是想了一想,决定把《机器学习》的算法研究过得都重新梳理一遍,于是就从无监督学习——聚类开始了
-----------------------------------------------------------------------------—----------------------------------------
-----------------------------------------------------------------------------—----------------------------------------
主要包括:K-means、DBSCAN、Density Peaks聚类(局部密度聚类)、层次聚类、谱聚类。
若按照聚类的方式可划分成三类:第一类是类似于K-means、DBSCAN、Density Peaks聚类(局部密度聚类)的依据密度的聚类方式;
第二种是类似于层次聚类的依据树状结构的聚类方式;
第三种是类似于谱聚类的依据图谱结构的聚类方式。
-----------------------------------------------------------------------------—----------------------------------------
-----------------------------------------------------------------------------—----------------------------------------
-----------------------------------------------------------------------------—----------------------------------------
举个栗子:我们有五个样本点a(0,2)、b(0,0)、c(1.5,0)、d(5,0)、e(5,2),选取前两个样本点a(0,2)、b(0,0)作为初始聚类中心点A、B,开始聚类:
由于K-means 算法对初选的K值是敏感的,计算平均误差就是为了K值的选取,请看下图:
平均误差会随K值的选取而改变,随着K值增大,平均误差会逐渐降低;极限情况下是每个样本点是都是一个类,这时的平均误差E=0,当然这种聚类没有研究的价值。
那么哪个K值是最佳选取的值呢——肘部法则,就是选取斜率变化较大的拐点处定为K值点,这只是一种简单的选取规则,方便简单而且实用。
# -*- coding:utf-8 -*-
# -*- author:zzZ_CMing
# -*- 2018/04/10;14:44
# -*- python3.5
import numpy as np
import matplotlib.pyplot as plt
import sklearn.datasets as ds
import matplotlib.colors
from sklearn.cluster import KMeans
# 随机生成数据
points_number = 3000
centers = 20
data,laber=ds.make_blobs(points_number,centers=centers,random_state=0)
# 创建Figure
fig = plt.figure()
# 用来正常显示中文标签
matplotlib.rcParams['font.sans-serif'] = [u'SimHei']
# 用来正常显示负号
matplotlib.rcParams['axes.unicode_minus'] = False
# 原始点的分布
ax1 = fig.add_subplot(211)
plt.scatter(data[:,0],data[:,1],c=laber)
plt.title(u'原始数据分布')
plt.sca(ax1)
# K-means聚类后
N = 5
model = KMeans(n_clusters = N,init = 'k-means++')
y_pre = model.fit_predict(data)
ax2 = fig.add_subplot(212)
plt.scatter(data[:,0],data[:,1],c=y_pre)
plt.title(u'K-Means聚类')
plt.sca(ax2)
plt.show()
效果展示:
-----------------------------------------------------------------------------—----------------------------------------
-----------------------------------------------------------------------------—----------------------------------------
【监督学习】1:KNN算法实现手写数字识别的三种方法
-----------------------------------------------------------------------------—----------------------------------------
【无监督学习】1:K-means算法原理介绍,以及代码实现
【无监督学习】2:DBSCAN算法原理介绍,以及代码实现
【无监督学习】3:Density Peaks聚类算法(局部密度聚类)
-----------------------------------------------------------------------------—----------------------------------------
【深度学习】1:感知器原理,以及多层感知器解决异或问题
【深度学习】2:BP神经网络的原理,以及异或问题的解决
【深度学习】3:BP神经网络识别MNIST数据集
【深度学习】4:BP神经网络+sklearn实现数字识别
【深度学习】5:CNN卷积神经网络原理、MNIST数据集识别
【深度学习】8:CNN卷积神经网络识别sklearn数据集(附源码)
【深度学习】6:RNN递归神经网络原理、MNIST数据集识别
【深度学习】7:Hopfield神经网络(DHNN)原理介绍
-----------------------------------------------------------------------------—----------------------------------------
TensorFlow框架简单介绍
-----------------------------------------------------------------------------—----------------------------------------