机器学习(七)

一,监督学习和无监督学习聚类的数据集比较:

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

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

二,聚类(Clustering):

         聚类,即通过给定的数据集,模型自己尝试看看是否可以将其分组为集群

         聚类的实现:

                K-means(K均值算法):

                        一种无监督学习,将未标记的数据集划分为K个不同的群集,其核心目标是最小化簇内平方误差和(即实现数据集到集群中心的距离的最小化)              

                核心步骤:

                        将群集中心中心随机分配给簇,然后再重复将点分配给群集中心并移动群集中心,直到达到停止条件

                实现步骤:

                        ①给群集中心赋点: 首先进行随机猜测,确定集群的中心(如下图中的红蓝叉)

                        ②移动群集中心: 通过所给数据集计算,每个数据更靠近红叉还是蓝叉,通过比较来把数据分配给更近的群集中心(把数据分给群集中心)

                        ③重复上述①②操作,根据已有的数据到群集中心的距离,分别算出平均值,再根据平均值来继续移动群集中心,重复操作知道找到最优的群集中心

                K-means的成本函数:

           

                损失函数示意图:

           K-means具体实现:

                随机生成集群中心,并分别计算其损失函数,不断循环(通常在50-1000次)来找到最小损失函数,实现最优

        集群数目的选取:

        

        ①Elbow method:(图像法选择K)

                通过绘制以集群数目K为X轴,损失函数J为Y轴的函数图像,来找到图像的”Elbow”,即函数图像下降最明显的点,负梯度最小的部分,即为最合适的集群数目。

        ②计算法:(根据实际情况而选择K)

                实践中对集群数目的选择大多都是模棱两可的,可以根据实际情况以及自己希望模型后期的表现来选择集群数目

# -*- coding: gbk -*-  # 改为GBK编码声明(临时解决方案)
# 导入必要的库
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs  # 用于生成演示数据集# 生成模拟数据
X, y = make_blobs(n_samples=300,  # 样本数量centers=4,      # 聚类中心数量cluster_std=0.6, # 簇的标准差(控制离散程度)random_state=0   # 随机种子(确保结果可复现)
)class KMeans:"""K-means聚类算法实现"""def __init__(self, k=4, max_iter=1000):"""初始化参数Args:k: 要形成的簇数(聚类中心数)max_iter: 最大迭代次数"""self.k = kself.max_iter = max_iterdef fit(self, X):"""训练方法:寻找数据的最佳聚类中心Args:X: 输入数据矩阵,形状为(n_samples, n_features)"""# 随机选择k个数据点作为初始聚类中心self.centers = X[np.random.choice(len(X), self.k, replace=False)]# 开始迭代优化for _ in range(self.max_iter):# 步骤1:将每个样本分配到最近的聚类中心(E步)labels = self._assign_clusters(X)# 步骤2:根据分配结果重新计算聚类中心(M步)new_centers = self._compute_centers(X, labels)# 如果聚类中心不再变化,提前终止迭代if np.allclose(self.centers, new_centers):breakself.centers = new_centers  # 更新聚类中心return selfdef _assign_clusters(self, X):"""计算每个样本所属的最近聚类中心"""# 计算每个样本到所有聚类中心的欧氏距离(未开平方以提升性能)distances = np.sum((X[:, np.newaxis] - self.centers) ** 2, axis=2)# 返回最近中心的索引(即所属簇的标签)return np.argmin(distances, axis=1)def _compute_centers(self, X, labels):"""根据当前分配结果重新计算聚类中心"""new_centers = np.zeros((self.k, X.shape[1]))for i in range(self.k):# 获取属于当前簇的所有样本cluster_samples = X[labels == i]# 计算新的聚类中心(样本均值)if len(cluster_samples) > 0:new_centers[i] = cluster_samples.mean(axis=0)else:# 如果出现空簇,保持原中心(避免除零错误)new_centers[i] = self.centers[i]return new_centersdef predict(self, X):"""预测新样本的所属簇"""return self._assign_clusters(X)# 实例化并训练模型
model = KMeans(k=4)
model.fit(X)# 获取预测结果
labels = model.predict(X)# 可视化结果
plt.figure(figsize=(8,6))# 绘制所有样本点,按聚类结果着色
plt.scatter(X[:, 0], X[:, 1],  # 使用前两个特征作为坐标c=labels,           # 按预测标签着色cmap='viridis',     # 颜色映射方案s=50,              # 点的大小edgecolor='k'      # 点边缘颜色
)# 标注聚类中心
plt.scatter(model.centers[:, 0], model.centers[:, 1],c='red',           # 中心点颜色s=200,             # 点的大小alpha=0.7,         # 透明度marker='X',        # 标记形状edgecolor='k',     # 边缘颜色linewidth=2        # 边缘线宽
)# 添加图表元素
plt.title('K-means Clustering Result')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.grid(True, linestyle='--', alpha=0.6)
plt.show()

三,异常检测(Anomaly Detection):

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

        实现:

                1.Density:

                        为特征X的概率建立模型,试图找出最佳特征值(如下图,最里面的椭圆内数据分布最为集中,概率最大,更适合选做为特征;越往外特征X的概率越小,越不适合成为特征)。建立模型后,加以验证集验证,设定阈值,若所预测概率小于阈值,则判定为异常;反之则正常。

                2.正态分布:

                        核心思想与Density一致。基于正态分布的假设,通过所给数据集来计算每个特征的均值和方差,绘制正态分布曲线。设定阈值,利用3σ原则,计算新的数据的方差和均值,来判断其是否异常。比较快速,但是无法处理复杂分布。

                3.孤立森林:

                        基于决策树结构的无监督异常检测。异常数据点通过决策树模型二分类后,异常数据由于在特征空间中分布稀疏,可以通过更少的分割次数被孤立;还可以随机划分特征空间,通过随机选择特征和划分值构建二叉搜索树,异常值的路径长度更短。

        算法的建立:
              Density Estimation(密度估计):

                参数方法:假设数据服从正态分布,通过估计参数的均值,方差来构建概率密度函数。

                非参数方法:无需预设分布,直接从数据本身推断分布或者模式。

        异常点往往位于数据分布的低概率区域。在训练阶段,利用正常数据来构建概率密度函数;计算新样本的密度值,其值越低异常可能性越高;决策阶段设定阈值,低于阈值的样本则判定为异常。(下图是通过构建多个正态分布,使用多个正态分布的加权和拟合数据来计算样本的加权概率密度)

        但是该方法所得模型不够稳定,易受极端值的影响而导致偏差。

        异常检测系统的评估:

                通过交叉验证的方法来实现参数的调整。

                通过正常数据(可以少量异常)进行训练模型,验证集进行调整阈值,测试集评估。如果异常数据太少,可以考虑去掉测试集,只要验证集。但这样无法评估。

        异常检测 VS 监督学习:

                数据量大小: 异常检测适合只有少量数据集(如0-20正面例子),但反面例子相对较多的情况;监督学习适合数据集量足够大,正面例子和反面例子都充足。

                种类多少:  异常检测适合数据集种类多的,未知的异常情况;而监督学习适合已知异常的种类,种类较少的。(即异常检测是通过正常的训练集来判断异常,不正常的数据就算异常;而监督学习则是让模型知道异常数据长什么样,才能判断异常,所以监督学习异常的数据要多些)

        举个例子:

                异常检测 VS 监督学习在诈骗检测系统中的应用:

                异常检测是相信天上掉馅饼是小概率事件,所以判断为诈骗;而监督学习则是见过诈骗的案例,来判断其为诈骗,若没见过,则难以判断。

        异常检测特征的选取:

                通过特征工程,并实时生成特征的正态分布曲线,通过其是否为标准正太分布来实时调整特征。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/33747.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

海鲜水产行业wordpress外贸主题

模板采用清新的海洋风格设计,完美契合水产和海鲜行业的特点,让您的网站在众多竞争者中脱颖而出。 高质量的图片展示区域,让您可以展示新鲜捕捞的海鲜产品,吸引客户的注意力。 多功能性,满足业务需求: 模…

调优案例一:堆空间扩容提升吞吐量实战记录

📝 调优案例一:堆空间扩容提升吞吐量实战记录 🔧 调优策略:堆空间扩容三部曲 # 原配置(30MB堆空间) export CATALINA_OPTS"$CATALINA_OPTS -Xms30m -Xmx30m"# 新配置(扩容至120MB&am…

【大模型系列】llama.cpp本地运行大模型

上一篇链接: 【大模型系列】使用ollama本地运行千问2.5模型 我们讲了ollama本地运行大模型,这里我们介绍另一种本地运行大模型的方法:llamacpp 软件下载 下载地址:https://github.com/ggml-org/llama.cpp/releases 下载cpu版本的llamacpp&a…

maven之自定义插件

写在前面 在使用maven肯定是离不开插件的,比如执行mvn clean或者时mvn compile其实运行的就是绑定的默认插件。虽然我们一般不需要来自定义插件,但是为了使用的过程中更加的清晰,来尝试自定义插件还是很有必要的,所以本文就一起来…

工程实践:如何使用SU17无人机来实现室内巡检任务

阿木实验室最近发布了科研开发者版本的无人机SU17,该无人机上集成了四目视觉,三维激光雷达,云台吊舱,高算力的机载计算机,是一个非常合适的平台用于室内外巡检场景。同时阿木实验室维护了多个和无人机相关的开源项目。…

【瞎折腾/Dify】使用docker离线部署Dify

文章目录 说在前面安装Docker(外网)获取Dify源码(外网)拉取docker镜像(外网)导出镜像(内网)导入镜像(内网)运行问题 说在前面 外网操作系统:windows内网操作系统:ubuntu外网docker desktop版本:4.29.0外网docker版本:version 26.0…

【Git】配置Git

配置Git 忽略特殊文件 在日常开发中,有些文件不想或不应该提交到远端,如保存数据库密码的配置文件。 在Git工作区的根目录下创建一个特殊的.gitignore文件,把要忽略的文件名填进去,Git就会自动忽略这些文件。 不需要从头写.gi…

mysql学习-常用sql语句

1、安装mysql参考网上链接,进入mysql数据库 mysql -u root -p 2、数据库操作 2.1、创建数据库 create database 数据库名 default character set utf8; 2.2、显示所有数据库 show databases; 2.3、选择数据库 use elementInfo; 2.4、删除数据库 drop database…

PostgreSQL16 的双向逻辑复制

一、配置 双向逻辑复制具体步骤 参考:PostgreSQL 16 双向逻辑复制与事务回环控制 - 墨天轮 1. 安装和准备环境 确保在所有参与复制的服务器上都安装了 PostgreSQL 16。主服务器:192.168.0.100从服务器:192.168.0.102 2. 配置 PostgreSQL 在每个服务…

FastAPI复杂查询终极指南:告别if-else的现代化过滤架构

title: FastAPI复杂查询终极指南:告别if-else的现代化过滤架构 date: 2025/3/14 updated: 2025/3/14 author: cmdragon excerpt: 本文系统讲解FastAPI中复杂查询条件的构建方法,涵盖参数验证、动态过滤、安全防护等18个核心技术点。通过引入策略模式、声明式编程等技术,彻…

C++前缀和

个人主页:[PingdiGuo_guo] 收录专栏:[C干货专栏] 大家好,今天我们来了解一下C的一个重要概念:前缀和 目录 1.什么是前缀和 2.前缀和的用法 1.前缀和的定义 2.预处理前缀和数组 3.查询区间和 4.数组中某个区间的和是否为特定…

机器学习基础

目录 泛化误差 偏差和方差 噪声 生成模型和判别模型 正态分布(Normal Distribution) 超参数选择 Grid Search 网格搜索 Random Search 随机搜索 Hyperopt Hyperas 参数估计方法对比 MLE 最大似然估计 MAP最大后验估计 贝叶斯估计 距…

中山六院团队发表可解释多模态融合模型Brim,可以在缺少分子数据时借助病理图像模拟生成伪基因组特征|顶刊解读·25-02-14

小罗碎碎念 在癌症诊疗领域,精准预测患者预后对临床决策意义重大。传统的癌症分期系统,如TNM分期,因无法充分考量肿瘤异质性,难以准确预测患者的临床结局。而基于人工智能的多模态融合模型虽有潜力,但在实际临床应用中…

系统可观测性(5)OpenTelemetry基础使用

系统可观测性(5)OpenTelemetry基础概念 Author: Once Day Date: 2025年3月12日 一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦… 漫漫长路,有人对你微笑过嘛… 本文档翻译整理自《OpenTelemetry Docs》&a…

OpenHarmony自定义子系统、部件与模块

如图所示,OpenHarmony系统源码中,大体上按照不同种类的功能分成多个子系统,然后一个子系统内部进一步在同类功能上的差异性划分成一个或多个部件,也就是说一个部件表示一个具体功能的源码集合。最后一个部件的源码再划分成一个或多…

【论文笔记】Contrastive Learning for Compact Single Image Dehazing(AECR-Net)

文章目录 问题创新网络主要贡献Autoencoder-like Dehazing NetworkAdaptive Mixup for Feature PreservingDynamic Feature Enhancement1. 可变形卷积的使用2. 扩展感受野3. 减少网格伪影4. 融合空间结构信息 Contrastive Regularization1. 核心思想2. 正样本对和负样本对的构建…

uni-app打包h5并部署到nginx,路由模式history

uni-app打包有些坑,当时运行的基础路径填写了./,导致在二级页面刷新之后,页面直接空白。就只能换一个路径了,nginx也要跟着改,下面是具体步骤。 manifest.json配置web 运行路径写/h5/,或者写你们网站的目…

SQLiteStudio:一款免费开源跨平台的SQLite管理工具

目录 1.简介 2.下载与安装 3.实现分析 4.总结 1.简介 SQLiteStudio 是一款专门用于管理 SQLite 数据库的图形化工具,由波兰开发者开发并维护。由于 SQLite 以其轻量级、零配置、嵌入式等特性被广泛应用于各种小型项目、移动应用和桌面应用中,而 SQLi…

Java入职篇(2)——开发流程以及专业术语

Java入职篇(2)——开发流程以及专业术语 开发流程 开发术语 测试用例(用例) 测试人员写的测试方案,基本上就是编写的测试过程,以及测试的预取结果 灰度测试 现在小部分范围内使用,然后逐步…

Figma介绍(基于云的协作式界面设计工具,主要用于UI/UX设计、原型制作和团队协作)

文章目录 注册和登录简单操作说明Figma介绍**核心特点**1. **云端协作与实时同步**2. **跨平台兼容**3. **高效设计工具**4. **原型交互与动效**5. **开发对接友好**6. **插件生态**7. **版本控制与历史记录** **适用场景**- **团队协作**:远程团队共同设计、评审、…