机器学习之k均值算法(K-means)聚类

简介

聚类:一种无监督学习,是先不知道类别,自动将相似的对象归到同一簇中
根据欧式距离选择较近的几个点判断类别
欧式距离计算公式

其中K是事先给定的,这个K值的选定是非常难以估计的,事先并不知道给定的数据集应该分为多少个类别才算合适(ISODATA算法通过类的自动合并和分裂,得到较为合理的类型数目K)
K-Means算法需要用初始随机种子点,这个随机种子点很重要,不同的随机种子点会得到完全不同的效果(K-Means++算法可以用来解决这个问题,可以有效的选择初始点)

K-Means步骤

  • 从数据中选择k个对象作为初始聚类中心
  • 计算每个聚类对象到中心的距离来划分类
  • 重新计算每个聚类中心点
  • 计算标准测度函数,直到达到最大迭代次数,则停止,否则继续操作
  • 确定最优的聚类中心

常见错误

  • 中心数量不正确n_cluster
  • 数据偏差,造成分类错误
  • 样本方差不一致cluster_std
  • 样本数量不一致

半监督学习,用小的数据训练,来预测较大的数据

应用实例

import sklearn.datasets as dataset
from sklearn.cluster import KMeans
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

x_train,target = dataset.make_blobs(n_samples=200,centers=3)

kmn = KMeans(n_clusters=3)
kmn.fit(x_train)
y_new = kmn.predict(x_train)

centers = kmn.cluster_centers_


plt.figure(figsize=(16,9))
plt.subplot(221)
plt.scatter(x_train[:,0],x_train[:,1],c=y_new) #预测分类
plt.scatter(centers[:,0],centers[:,1],c='r',s=100,alpha=0.6)
plt.subplot(222)
plt.scatter(x_train[:,0],x_train[:,1],c=target)
plt.savefig('k.png')

猜你喜欢

转载自www.cnblogs.com/focusTech/p/12340069.html