无监督学习——k均值

这篇具有很好参考价值的文章主要介绍了无监督学习——k均值。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


无监督学习重要的应用有两类:聚类、降维。

聚类:

  • k均值

  • 基于密度的聚类

  • 最大期望聚类

降维:

  • 潜语义分析(LSA)

  • 主成分分析(PCA)

  • 奇异值分解(SVD

这里主要说下k均值方法

聚类

k均值

k值是指,聚的类的个数

无监督学习——k均值

(a)原始数据

(b)随机取两个初始点(质心点)(一般是在已有的数据中选择)

(c)基于KNN近邻思想,跟谁近分到谁的那一类

(d)更新质心点(根据两类的均值)

(e)再来一轮划分

(f)更新质心点…迭代完成

  • k均值(k-means)是聚类算法中最为简单、高效的,属于无监督学习算法
  • 核心思想:由用户指定k个初始质心(initial centroids),以作为聚类的类别(cluster),重复迭代直至算法收敛
  • 基本算法流程
    • 选取k个初始质心(作为初始cluster)
    • repet:
      • 对每个样本点,计算得到距其最近的质心,将其类别标记为该质心所对应的cluster
      • 重新计算k个cluster对应的质心
    • until质心不在发生变化,或迭代达到上限

代码实现

1. 引入依赖
import numpy as np
import matplotlib.pyplot as plt

# 从sklearn中直接生成聚类数据
# from sklearn.datasets.samples_generator import make_blobs # 新版本更改
from sklearn.datasets import make_blobs
2. 数据加载
# n_sanmples表示样本点的个数,centers表示中心点的个数
x, y = make_blobs( n_samples=100, centers=6, random_state=1234, cluster_std=0.6 )
# x是100个数据点的坐标,y表示类别(y暂时没用)
plt.figure(figsize=(6,6)) # 看起来舒服点
plt.scatter(x[:,0], x[:,1], c=y) # c表示color,y取不同值有不同的颜色
plt.show()

无监督学习——k均值

3. 算法实现
# 引入scipy中的距离函数,默认欧式距离
from scipy.spatial.distance import cdist

class K_Means(object):
    # 初始化,参数 n_clusters(K)、迭代次数 max_iter、初始质心 centroids
    def __init__(self, n_clusters=6, max_iter=300, centroids=[]):
        self.n_clusters = n_clusters
        self.max_iter = max_iter
        self.centroids = np.array( centroids, dtype=np.float ) # 转化为numpy中的矩阵
        
    # 训练模型方法,k-means聚类过程,传入原始数据
    def fit(self, data):
        # 假如没有指定初始质心,就随机选取data中的点作为初始质心
        if( self.centroids.shape == (0,) ):
            # 从data中随机生成0到data行数的6个整数,作为索引值
            self.centroids = data[ np.random.randint( 0, data.shape[0], self.n_clusters ) ,: ]
            
        # 开始迭代
        for i in range(self.max_iter):
            # 1. 计算距离矩阵,得到的是一个100*6的矩阵,每一行代表一个样本点距离所有质心的距离
            distances = cdist(data, self.centroids)
            
            # 2. 对距离按有近到远排序,选取最近的质心点的类别,作为当前点的分类
            c_ind = np.argmin( distances, axis=1 )
            
            # 3. 对每一类数据进行均值计算,更新质心点坐标
            for i in range(self.n_clusters):
                # 排除掉没有出现在c_ind里的类别
                if i in c_ind:
                    # 选出所有类别是i的点,取data里面坐标的均值,更新第i个质心
                    self.centroids[i] = np.mean( data[c_ind==i], axis=0 )
    
    # 实现预测方法
    def predict(self, samples):
        # 跟上面一样,先计算距离矩阵,然后选取距离最近的那个质心的类别
        distances = cdist(samples, self.centroids)
        c_ind = np.argmin( distances, axis=1 )
        
        return c_ind
4. 测试
# 定义一个绘制子图函数
def plotKMeans(x, y, centroids, subplot, title):
    # 分配子图,121表示1行2列的子图中的第一个
    plt.subplot(subplot)
    plt.scatter(x[:,0], x[:,1], c='r')
    # 画出质心点
    plt.scatter(centroids[:,0], centroids[:,1], c=np.array(range(6)), s=100)
    plt.title(title)

kmeans = K_Means(max_iter=300, centroids=np.array([[2,1],[2,2],[2,3],[2,4],[2,5],[2,6]]))

plt.figure(figsize=(16, 6))
plotKMeans( x, y, kmeans.centroids, 121, 'Initial State' )

# 开始聚类
kmeans.fit(x)

plotKMeans( x, y, kmeans.centroids, 122, 'Final State' )

# 预测新数据点的类别
x_new = np.array([[0,0],[10,7]])
y_pred = kmeans.predict(x_new)

print(kmeans.centroids)
print(y_pred)

plt.scatter(x_new[:,0], x_new[:,1], s=100, c='black')

输出:

[[ 5.76444812 -4.67941789]
 [-2.89174024 -0.22808556]
 [-5.89115978  2.33887408]
 [-4.53406813  6.11523454]
 [-1.15698106  5.63230377]
 [ 9.20551979  7.56124841]]
[1 5]

无监督学习——k均值文章来源地址https://www.toymoban.com/news/detail-462003.html

到了这里,关于无监督学习——k均值的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 深度学习中有监督,无监督, 自监督学习

    有监督学习的特点,是数据集通常带有人工标签的数据集。 监督学习提供了一组输入输出对,这样我们就可以学习一个将输入映射到正确输出的中间系统。 监督学习的一个简单示例是根据图像数据集及其相应类别(我们将其称为标签)确定图像的类别(即,狗/猫等)。 对于

    2024年02月09日
    浏览(37)
  • 有监督学习、无监督学习

    1.1定义 在监督学习中,模型使用标记数据集进行训练,其中模型学习每种类型的数据。训练过程完成后,模型会根据测试数据(训练集的子集)进行测试,然后预测输出。 . . 1.2.监督学习的步骤 首先确定训练数据集的类型 收集/收集标记的训练数据(一般可能需要手动标记)

    2024年02月14日
    浏览(20)
  • 机器学习、监督学习、无监督学习基本概念

    - 机器学习 机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。 机器学习有下面几种定义: (

    2024年02月12日
    浏览(60)
  • 机器学习---监督学习和非监督学习

    根据训练期间接受的监督数量和监督类型,可以将机器学习分为以下四种类型:监督学习、非监督学习、半监督学习和强化学习。  在监督学习中,提供给算法的包含所需解决方案的训练数据,成为标签或标记。  简单地说,就是监督学习是包含自变量和因变量(有Y),同时

    2024年02月14日
    浏览(42)
  • 监督学习和无监督学习

    监督学习和无监督学习是机器学习领域中两种不同的学习范式,它们之间的区别在于数据的标签或标记的可用性以及学习任务的性质。 监督学习(Supervised Learning): 监督学习是一种利用带有标签(标记)的数据进行训练的机器学习方法。 在监督学习中,训练数据包含输入样

    2024年02月09日
    浏览(59)
  • 均值与概率论:数学关系与实际应用

    均值与概率论是数学和统计学中的基本概念,它们在各个领域的应用非常广泛。均值是用来描述一个数据集的中心趋势的一个量度,常用于对数据进行整理和分析。概率论则是一门数学学科,研究事件发生的可能性和相关概率。这两个概念在实际应用中是密切相关的,因为在

    2024年04月16日
    浏览(37)
  • Matlab实现 遗传算法 无向图结点分成两类使得两类间边数最少 数学建模作业

    输入:一个图的邻接矩阵G,n1,n2 (举例n1=16,n2=1) 输出:节点的分类id(第一类为0,第二类为1,0的个数为n1个, 1的个数为n2个) 目标:使得两类之间的边数最少 算法:遗传算法 目录 步骤1:初始化种群,种群个数,随机生成初始种群 步骤2:交叉算子 步骤3:突变算子 步骤

    2024年02月11日
    浏览(73)
  • 【零基础学机器学习 3】机器学习类型简介:监督学习 - 无监督学习 - 强化学习

    👨‍💻 作者简介:程序员半夏 , 一名全栈程序员,擅长使用各种编程语言和框架,如JavaScript、React、Node.js、Java、Python、Django、MySQL等.专注于大前端与后端的硬核干货分享,同时是一个随缘更新的UP主. 你可以在各个平台找到我! 🏆 本文收录于专栏: 零基础学机器学习 🔥 专栏

    2024年02月06日
    浏览(42)
  • 计算机视觉的监督学习与无监督学习

    什么是监督学习? 监督学习是一种机器学习算法,它从一组已标记的 合成数据生成器中生成的训练数据中学习。这意味着数据科学家已经用正确的标签(例如,“猫”或“狗”)标记了训练集中的每个数据点,以便算法可以学习如何预测不可预见数据的结果并准确识别新图

    2024年02月06日
    浏览(42)
  • 大数据法律监督模型优势特色及应用场景

    大数据法律监督平台是基于监督数据整合管理平台、监督模型构建平台、内置模型库以及法律监督线索管理平台打造的一套服务于检察机关法律监督工作的专业化系统。通过数据采集、融合、挖掘、建模、展现等一系列能力,辅助检察官从纷繁复杂的数据中,开展多维度分析

    2024年02月14日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包