呆板学习(七)

[复制链接]
发表于 2025-10-15 00:54:34 | 显示全部楼层 |阅读模式
一,监督学习和无监督学习聚类的数据集比力:

        监督学习: 数据集包罗输入的数据和与之对应的标签

        无监督学习: 数据集仅含有输入的数据,要求算法自己通过所给的数据集来确定决定界限 

二,聚类(Clustering):

         聚类,即通过给定的数据集,模子自己实行看看是否可以将其分组为集群
         聚类的实现:

                K-means(K均值算法):
                        一种无监督学习,将未标记的数据集分别为K个差别的聚集,其焦点目的是最小化簇内平方偏差和(即实现数据集到集群中央的隔断的最小化)              
                焦点步调:
                        将群会合心中央随机分配给簇,然后再重复将点分配给群会合心并移动群会合心,直到到达克制条件
                实现步调:
                        ①给群会合心赋点: 起首举行随机推测,确定集群的中央(如下图中的红蓝叉)
                        ②移动群会合心: 通过所给数据集盘算,每个数据更靠近红叉照旧蓝叉,通过比力来把数据分配给更近的群会合心(把数据分给群会合心)
                        ③重复上述①②使用,根据已有的数据到群会合心的隔断,分别算出均匀值,再根据均匀值来继承移动群会合心,重复使用知道找到最优的群会合心

                K-means的本钱函数:
           

                丧失函数表现图:


           K-means详细实现:
                随机天生集群中央,并分别盘算其丧失函数,不停循环(通常在50-1000次)来找到最小丧失函数,实现最优

        集群数量的选取:

        
        ①Elbow method:(图像法选择K)
                通过绘制以集群数量K为X轴,丧失函数J为Y轴的函数图像,来找到图像的”Elbow”,即函数图像降落最显着的点,负梯度最小的部分,即为最符合的集群数量。
        ②盘算法:(根据实际情况而选择K)
                实践中对集群数量的选择大多都是模棱两可的,可以根据实际情况以及自己盼望模子后期的体现来选择集群数量
  1. # -*- coding: gbk -*-  # 改为GBK编码声明(临时解决方案)
  2. # 导入必要的库
  3. import numpy as np
  4. import matplotlib.pyplot as plt
  5. from sklearn.datasets import make_blobs  # 用于生成演示数据集
  6. # 生成模拟数据
  7. X, y = make_blobs(
  8.     n_samples=300,  # 样本数量
  9.     centers=4,      # 聚类中心数量
  10.     cluster_std=0.6, # 簇的标准差(控制离散程度)
  11.     random_state=0   # 随机种子(确保结果可复现)
  12. )
  13. class KMeans:
  14.     """K-means聚类算法实现"""
  15.    
  16.     def __init__(self, k=4, max_iter=1000):
  17.         """初始化参数
  18.         Args:
  19.             k: 要形成的簇数(聚类中心数)
  20.             max_iter: 最大迭代次数
  21.         """
  22.         self.k = k
  23.         self.max_iter = max_iter
  24.    
  25.     def fit(self, X):
  26.         """训练方法:寻找数据的最佳聚类中心
  27.         
  28.         Args:
  29.             X: 输入数据矩阵,形状为(n_samples, n_features)
  30.         """
  31.         # 随机选择k个数据点作为初始聚类中心
  32.         self.centers = X[np.random.choice(len(X), self.k, replace=False)]
  33.         
  34.         # 开始迭代优化
  35.         for _ in range(self.max_iter):
  36.             # 步骤1:将每个样本分配到最近的聚类中心(E步)
  37.             labels = self._assign_clusters(X)
  38.             
  39.             # 步骤2:根据分配结果重新计算聚类中心(M步)
  40.             new_centers = self._compute_centers(X, labels)
  41.             
  42.             # 如果聚类中心不再变化,提前终止迭代
  43.             if np.allclose(self.centers, new_centers):
  44.                 break
  45.                
  46.             self.centers = new_centers  # 更新聚类中心
  47.         
  48.         return self
  49.    
  50.     def _assign_clusters(self, X):
  51.         """计算每个样本所属的最近聚类中心"""
  52.         # 计算每个样本到所有聚类中心的欧氏距离(未开平方以提升性能
  53.         distances = np.sum((X[:, np.newaxis] - self.centers) ** 2, axis=2)
  54.         # 返回最近中心的索引(即所属簇的标签)
  55.         return np.argmin(distances, axis=1)
  56.    
  57.     def _compute_centers(self, X, labels):
  58.         """根据当前分配结果重新计算聚类中心"""
  59.         new_centers = np.zeros((self.k, X.shape[1]))
  60.         for i in range(self.k):
  61.             # 获取属于当前簇的所有样本
  62.             cluster_samples = X[labels == i]
  63.             # 计算新的聚类中心(样本均值)
  64.             if len(cluster_samples) > 0:
  65.                 new_centers[i] = cluster_samples.mean(axis=0)
  66.             else:
  67.                 # 如果出现空簇,保持原中心(避免除零错误)
  68.                 new_centers[i] = self.centers[i]
  69.         return new_centers
  70.    
  71.     def predict(self, X):
  72.         """预测新样本的所属簇"""
  73.         return self._assign_clusters(X)
  74. # 实例化并训练模型
  75. model = KMeans(k=4)
  76. model.fit(X)
  77. # 获取预测结果
  78. labels = model.predict(X)
  79. # 可视化结果
  80. plt.figure(figsize=(8,6))
  81. # 绘制所有样本点,按聚类结果着色
  82. plt.scatter(
  83.     X[:, 0], X[:, 1],  # 使用前两个特征作为坐标
  84.     c=labels,           # 按预测标签着色
  85.     cmap='viridis',     # 颜色映射方案
  86.     s=50,              # 点的大小
  87.     edgecolor='k'      # 点边缘颜色
  88. )
  89. # 标注聚类中心
  90. plt.scatter(
  91.     model.centers[:, 0], model.centers[:, 1],
  92.     c='red',           # 中心点颜色
  93.     s=200,             # 点的大小
  94.     alpha=0.7,         # 透明度
  95.     marker='X',        # 标记形状
  96.     edgecolor='k',     # 边缘颜色
  97.     linewidth=2        # 边缘线宽
  98. )
  99. # 添加图表元素
  100. plt.title('K-means Clustering Result')
  101. plt.xlabel('Feature 1')
  102. plt.ylabel('Feature 2')
  103. plt.grid(True, linestyle='--', alpha=0.6)
  104. plt.show()
复制代码


三,非常检测(Anomaly Detection):

        非常检测,一种无需标签数据的非常检测方法。所输入的大多数数据都是正常的,若再输入非常的数据,则模子会根据非常数据和正常数据在特性空间中的分布差别来判断。

        实现:

                1.Density:
                        为特性X的概率创建模子,试图找出最佳特性值(如下图,最内里的椭圆内数据分布最为会合,概率最大,更恰当选做为特性;越往外特性X的概率越小,越不恰当成为特性)。创建模子后,加以验证集验证,设定阈值,若所猜测概率小于阈值,则判断为非常;反之则正常。

                2.正态分布:
                        焦点头脑与Density划一。基于正态分布的假设,通过所给数据集来盘算每个特性的均值和方差,绘制正态分布曲线。设定阈值,使用3σ原则,盘算新的数据的方差和均值,来判断其是否非常。比力快速,但是无法处置惩罚复杂分布。

                3.孤立丛林:
                        基于决定树布局的无监督非常检测。非常数据点通过决定树模子二分类后,非常数据由于在特性空间中分布希罕,可以通过更少的分割次数被孤立;还可以随机分别特性空间,通过随机选择特性和分别值构建二叉搜索树,非常值的路径长度更短。
        算法的创建:

              Density Estimation(密度估计):

                参数方法:假设数据服从正态分布,通过估计参数的均值,方差来构建概率密度函数。
                非参数方法:无需预设分布,直接从数据自己推断分布大概模式。

        非常点每每位于数据分布的低概率地域。在训练阶段,使用正常数据来构建概率密度函数;盘算新样本的密度值,其值越低非常大概性越高;决定阶段设定阈值,低于阈值的样本则判断为非常。(下图是通过构建多个正态分布,使用多个正态分布的加权和拟合数据来盘算样本的加权概率密度)
        但是该方法所得模子不敷稳固,易受极度值的影响而导致毛病。

        非常检测体系的评估:

                通过交织验证的方法来实现参数的调解。
                通过正常数据(可以少量非常)举行训练模子,验证集举行调解阈值,测试集评估。如果非常数据太少,可以思量去掉测试集,只要验证集。但如许无法评估。
        非常检测 VS 监督学习:

                数据量巨细: 非常检测恰当只有少量数据集(如0-20正面例子),但反面例子相对较多的情况;监督学习恰当数据集量富足大,正面例子和反面例子都富足。
                种类多少:  非常检测恰当数据集种类多的,未知的非常情况;而监督学习恰当已知非常的种类,种类较少的。(即非常检测是通过正常的训练集来判断非常,不正常的数据就算非常;而监督学习则是让模子知道非常数据长什么样,才气判断非常,以是监督学习非常的数据要多些)
        举个例子:
                非常检测 VS 监督学习在诈骗检测体系中的应用:
                非常检测是信托天上掉馅饼是小概率变乱,以是判断为诈骗;而监督学习则是见过诈骗的案例,来判断其为诈骗,若没见过,则难以判断。
        非常检测特性的选取:

                通过特性工程,并实时天生特性的正态分布曲线,通过其是否为尺度正太分布来实时调解特性。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表