机器学习之聚类学习笔记-利用python的sklearn实现

学习来源
sklearn中文文档
在这里插入图片描述
聚类算法练习
python代码实现K-means算法
Python数模笔记-Sklearn(2)聚类分析
均值偏移聚类

K-means聚类算法

该算法可分为三个步骤。第一步是选择初始质心,最基本的方法是从 X 数据集中选择 k 个样本。初始化完成后,K-means 由接下来两个步骤之间的循环组成。 第一步将每个样本分配到其最近的质心。第二步通过取分配给每个先前质心的所有样本的平均值来创建新的质心。计算旧的和新的质心之间的差异,并且算法重复这些最后的两个步骤,直到该值小于阈值。换句话说,算法重复这个步骤,直到质心不再显著移动。

from sklearn.cluster import KMeans  # 导入 sklearn.cluster.KMeans 类
import numpy as np

X = np.array([[1, 2], [1, 4], [1, 0], [10, 2], [10, 4], [10, 0]])
kmCluster = KMeans(n_clusters=2).fit(X)  # 建立模型并进行聚类,设定 K=2
print(kmCluster.cluster_centers_)  # 返回每个聚类中心的坐标
# [[10., 2.], [ 1., 2.]]  # print 显示聚类中心坐标
print(kmCluster.labels_)  # 返回样本集的分类结果
# [1, 1, 1, 0, 0, 0]  # print 显示分类结果
print(kmCluster.predict([[0, 0], [12, 3]]))  # 根据模型聚类结果进行预测判断
# [1, 0]  # print显示判断结果:样本属于哪个类别

[[10.  2.]
 [ 1.  2.]]
[1 1 1 0 0 0]
[1 0]

改进

from sklearn.cluster import MiniBatchKMeans  # 导入 MiniBatchKMeans 类
import numpy as np

X = np.array([[1, 2], [1, 4], [1, 0], [4, 2], [4, 0], [4, 4],
              [4, 5], [0, 1], [2, 2], [3, 2], [5, 5], [1, -1]])
# fit on the whole data
mbkmCluster = MiniBatchKMeans(n_clusters=2, batch_size=6, max_iter=10).fit(X)
print(mbkmCluster.cluster_centers_)  # 返回每个聚类中心的坐标
# [[3.96,2.41], [1.12,1.39]] # print 显示内容
print(mbkmCluster.labels_)  # 返回样本集的分类结果
# [1 1 1 0 0 0 0 1 1 0 0 1]  # print 显示内容
print(mbkmCluster.predict([[0, 0], [4, 5]]))  # 根据模型聚类结果进行预测判断
# [1, 0]  # 显示判断结果:样本属于哪个类别

[[1.8115942  0.84057971]
 [3.47058824 3.88235294]]
[0 1 0 1 0 1 1 0 0 0 1 0]
[0 1]

示例1

import sys
sys.path.append('/home/aistudio/external-libraries')
from numpy import *


def loadDataSet(fileName):  # general function to parse tab -delimited floats
    dataMat = []  # assume last column is target value
    fr = open(fileName)
    for line in fr.readlines():
        curLine = line.strip().split('\t')
        fltLine = list(map(float, curLine))  # map all elements to float()
        dataMat.append(fltLine)
    return dataMat


def distEclud(vecA, vecB):
    return sqrt(sum(power(vecA - vecB, 2)))  # la.norm(vecA-vecB)


def randCent(dataSet, k):
    n = shape(dataSet)[1]
    centroids = mat(zeros((k, n)))  # create centroid mat
    for j in range(n):  # create random cluster centers, within bounds of each dimension
        minJ = min(dataSet[:, j])
        rangeJ = float(max(dataSet[:, j]) - minJ)
        centroids[:, j] = mat(minJ + rangeJ * random.rand(k, 1))
    return centroids


def kMeans(dataSet, k, distMeas=distEclud, createCent=randCent):
    m = shape(dataSet)[0]
    clusterAssment = mat(zeros((m, 2)))  # create mat to assign data points
    # to a centroid, also holds SE of each point
    centroids = createCent(</
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

勤奋努力的野指针

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值