当前位置: 首页 > article >正文

机器学习(七)

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

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

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

二,聚类(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 监督学习在诈骗检测系统中的应用:

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

        异常检测特征的选取:

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

相关文章:

机器学习(七)

一,监督学习和无监督学习聚类的数据集比较: 监督学习: 数据集包括输入的数据和与之对应的标签 无监督学习: 数据集仅含有输入的数据,要求算法自己通过所给的数据集来确定决策边界 二,聚类(Clustering): 聚…...

利用labelimg实现yolov8数据集的制作

我们在使用yolov8进行物体检测识别的时候,由于其内置的n,s,m等模型只包含90多种物体(很多其他物品并未包含在其中),导致我们无法直接使用其模型进行视频或者图片的检测识别。这个时候,我们就需要自己制作数据集进行训练…...

【0x80070666】-已安装另一个版本...(Tableau 安装失败)

第一种是之前安装过tableau相关软件,但是没卸载干净。 方法1:卸载旧版本 打开 控制面板 → 程序和功能(或 添加/删除程序)。查找 Tableau Desktop,如果已安装旧版本,卸载它。重新启动电脑后再尝试安装。 …...

在rv1106上部署vue3

创建vue3项目 $ npm create vuelatest Need to install the following packages: create-vue3.15.1 Ok to proceed? (y) y > npx > create-vue┌ Vue.js - The Progressive JavaScript Framework │ ◇ 请输入项目名称: │ ip_cam │ ◇ 请选择要包含的…...

海量数据查询加速:Presto、Trino、Apache Arrow

1. 引言 在大数据分析场景下,查询速度往往是影响业务决策效率的关键因素。随着数据量的增长,传统的行存储数据库难以满足低延迟的查询需求,因此,基于列式存储、向量化计算等技术的查询引擎应运而生。本篇文章将深入探讨 Presto、Trino、Apache Arrow 三种主流的查询优化工…...

Word填写窗口功能详解:如何让文档填写更高效?

在日常办公中,我们经常需要让他人填写一些固定格式的文档,比如合同、申请表、调查问卷等。如果直接使用普通文本编辑,填写时可能会破坏排版,甚至修改了不该改动的内容。这时候,Word的填写窗口(即“内容控件…...

Oracle数据库存储结构--逻辑存储结构

数据库存储结构:分为物理存储结构和逻辑存储结构。 物理存储结构:操作系统层面如何组织和管理数据 逻辑存储结构:Oracle数据库内部数据组织和管理数据,数据库管理系统层面如何组织和管理数据 Oracle逻辑存储结构 数据库的逻…...

kali之nmap

kali之nmap Nmap(Network Mapper)是 Kali Linux 中最著名的网络扫描工具之一,广泛用于网络发现、端口扫描、服务识别、操作系统检测等任务。它是一个功能强大且灵活的开源工具,适用于渗透测试、网络管理和安全审计。 1. Nmap 的主…...

Kubernetes学习笔记-移除Nacos迁移至K8s

项目服务的配置管理和服务注册发现由原先的Nacos全面迁移到Kubernetes上。 一、移除Nacos 移除Nacos组件依赖。 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <…...

简单创建一个Django项目并配置neo4j数据库

创建项目&#xff0c;项目的文件夹就是项目的名称 创建项目的基本框架 安装djangorestframework 单击运行 查看浏览器运行效果&#xff1a; 运行效果如下&#xff1a; 创建应用(假如说是创建一个名为myapp的应用)&#xff1a; python manage.py startapp myapp创建之后的…...

java实现智能家居控制系统——入门版

文章目录 一、需求二、业务分析三、具体实现创建一个功能接口&#xff0c;实现设备的开关创建一个家电类&#xff0c;作为功能接口的实现类&#xff0c;定义名字和状态分别创建电视机、洗衣机、电灯的类&#xff0c;继承家电类Tv类WashMachine类Lamp类 定义智能控制系统类&…...

k8s基础架构介绍

k8s基础架构介绍 k8s 是对容器进行编排的一种工具。通过k8s可以实现对容器的编排、部署、更新等 学习k8s之前&#xff0c;先了解相关的一些使用和配置k8s的一些工具。 k8s的常用工具 在 kubernetes 中&#xff0c;主要有三个日常使用的工具&#xff0c;这些工具使用 kube 前…...

VSCode C/C++ 开发环境完整配置及常见问题(自用)

这里主要记录了一些与配置相关的内容。由于网上教程众多&#xff0c;部分解决方法并不能完全契合我遇到的问题&#xff0c;因此我选择以自己偏好的方式&#xff0c;对 VSCode 进行完整的配置&#xff0c;并记录在使用过程中遇到的问题及解决方案。后续内容也会持续更新和完善。…...

QGraphicsDropShadowEffect 的效果不能同时被多个控件使用

问题的原因是 QGraphicsDropShadowEffect 不能同时被多个控件共享。每个 QGraphicsDropShadowEffect 实例只能绑定到一个控件上。如果你将同一个 taskbarShadow 同时设置给 ui->filemanager_memeryArea 和 ui->workspaceWidget&#xff0c;只有最后一个设置会生效。 解决…...

实用小工具——快速获取数据库时间写法

最近我遇到了一个比较棘手的问题&#xff1a;在工作中&#xff0c;各个项目所使用的数据库类型各不相同。这导致我习惯性地使用Oracle的SQL语句进行编写&#xff0c;但每次完成后都会遇到报错&#xff0c;最终才意识到项目的数据库并非Oracle。为了避免这种情况&#xff0c;我需…...

回文字串(信息学奥赛一本通-2044)

【题目描述】 输入一串字符,字符个数不超过100,且以“.”结束。 判断它们是否构成回文。 【输入】 一行字符串。 【输出】 是否为回文串。是输出“Yes”&#xff0c;否输出“No。” 【输入样例】 abccb 【输出样例】 No 【题解代码】 #include<bits/stdc.h> using names…...

用Maven创建只有POM文件的项目

使用 mvn 创建一个仅包含 pom.xml 文件的父项目&#xff0c;可以借助 maven-archetype-quickstart 原型&#xff0c;然后移除不必要的文件&#xff0c;或者直接通过命令生成最简的 pom.xml 文件。以下是具体操作步骤&#xff1a; 一、方法一&#xff1a;使用原型创建后清理 1…...

基于ssm的宠物医院信息管理系统(全套)

一、系统架构 前端&#xff1a;html | layui | vue | element-ui 后端&#xff1a;spring | springmvc | mybatis 环境&#xff1a;jdk1.8 | mysql | maven | tomcat | idea | nodejs 二、代码及数据库 三、功能介绍 01. web端-首页1 02. web端-首页…...

从 YOLOv1 到 YOLOv2:目标检测的进化之路

引言 你有没有想过&#xff0c;当你用手机拍一张照片&#xff0c;里面的人、车、狗是怎么被自动识别出来的&#xff1f;这背后靠的就是目标检测技术。目标检测是计算机视觉中的一个重要领域&#xff0c;它不仅要回答“图片里有什么”&#xff0c;还要告诉你“这些东西在哪里”…...

RTDETR融合[CVPR205]ARConv中的自适应矩阵卷积

RT-DETR使用教程&#xff1a; RT-DETR使用教程 RT-DETR改进汇总贴&#xff1a;RT-DETR更新汇总贴 《Adaptive Rectangular Convolution for Remote Sensing Pansharpening》 一、 模块介绍 论文链接&#xff1a;https://arxiv.org/pdf/2503.00467 代码链接&#xff1a;https:/…...

【linux】使用 crontab 新增定时任务

目录 1. 打开 crontab 编辑器2. 添加定时任务3. 保存并退出4. 确认定时任务 1. 打开 crontab 编辑器 1.在终端中输入以下命令&#xff1a; crontab -e2. 添加定时任务 1.在打开的 crontab 文件中&#xff0c;添加你的定时任务。2.假设我们希望每天的 5 点 30 分执行一个脚本…...

项目-个人博客测试报告

目录 一、项目背景 二、项目功能 三、测试计划 &#xff08;1&#xff09;功能测试 &#xff08;2&#xff09;自动化测试 &#xff08;3&#xff09;性能测试 一、项目背景 1、个人博客系统是一个操作简单的基于Spring前后端分离的项目&#xff0c;同时使用MySQL数据库来进…...

软考计算机知识-流水线

计算机流水线类似工业生产过程的流水线&#xff0c;在同一时间&#xff0c;m个部件进行不同的操作&#xff0c;完成对不同对象的处理。 理解重叠&#xff1a;让不同的指令在时间上重叠地解释。在解释第k条指令的操作完成之前&#xff0c;就可以开始解释第k1条指令。 题1&#…...

Linux驱动开发实战(五):Qt应用程序点RGB灯(保姆级快速入门!)

Linux驱动开发实战&#xff08;五&#xff09;&#xff1a;Qt应用程序点RGB灯&#xff08;保姆级快速入门&#xff01;&#xff09; 文章目录 Linux驱动开发实战&#xff08;五&#xff09;&#xff1a;Qt应用程序点RGB灯&#xff08;保姆级快速入门&#xff01;&#xff09;前…...

前端登录鉴权全解析:主流方案对比与实现指南

文章目录 一、常见登录鉴权方式概览1.1 主流方案对比1.2 技术特性对比 二、Session/Cookie方案2.1 实现原理2.2 代码实现2.3 优缺点分析 三、JWT方案3.1 实现原理3.2 代码实现3.3 优缺点分析 四、OAuth方案4.1 实现原理4.2 代码实现4.3 优缺点分析 五、SSO方案5.1 实现原理5.2 …...

【C++】每日一练(链表的中间结点)

本篇博客给大家带来的是用C语言来解答找中间结点&#xff01; &#x1f41f;&#x1f41f;文章专栏&#xff1a;每日一练 &#x1f680;&#x1f680;若有问题评论区下讨论&#xff0c;我会及时回答 ❤❤欢迎大家点赞、收藏、分享&#xff01; 今日思想&#xff1a;不服输的…...

『大模型笔记』什么是MCP?将AI智能体与数据库和API集成

什么是MCP?将AI智能体与数据库和API集成 文章目录 MCP 由多个组件组成,最重要的有以下三个:MCP 体系结构MCP 的实际应用示例为什么要关注 MCP?官方MCP架构图总结如果你正在构建 AI 智能体,可能听说过 MCP(Model Context Protocol,模型上下文协议)。MCP 是一个开源标准…...

使用Redis如何实现分布式锁?(超卖)

分布式锁概念 在多线程环境下&#xff0c;为了保证数据的线程安全&#xff0c;锁保证同一时刻&#xff0c;只有一个可以访问和更新共享数据。在单机系统我们可以使用 synchronized 锁、Lock 锁保证线程安全。 synchronized 锁是 Java 提供的一种内置锁&#xff0c;在单个 JVM …...

【雅思播客07】I‘m in debt.负债

Hey guys! Welcome to my channel, I’m Mavis. Good morning! 欢迎来到我的频道&#xff0c;我是Mavis老师&#xff0c;早上好呀&#xff01; Today we’re gonna learn a dialogue about recession, a period of temporary economic decline during which trade and indu…...

实现悬浮按钮拖动,兼容h5和微信小程序

h5用js写&#xff0c;微信小程序用 代码里面没有完全实现吸附边缘的功能&#xff0c;需要吸附边缘的话还得自己再完善下&#xff08;h5的吸附边缘是可以的&#xff0c;小程序的还有点问题&#xff09; 主要功能是&#xff1a;图片上写文字的悬浮按钮&#xff0c;文字使用的是…...