百面算法工程师 | 分类和聚类

news2024/12/22 9:31:56

目录

6.1 为什么正确率有时不能有效评估分类算法?

6.2 什么样的分类器最好?

6.3 什么是聚类,你知道哪些聚类算法?

6.4 K-Means聚类算法如何调优?

6.5 K-Means聚类算法如何选择初始点?

6.6 K-Means聚类聚的是特征还是样本

6.7 K-Means++


 欢迎大家订阅我的专栏一起学习共同进步,主要针对25届应届毕业生

祝大家早日拿到offer! let's go

 http://t.csdnimg.cn/lSA8k

算法类别

优点

缺点

Bayes
贝叶斯分类

1) 所需估计的参数少,对于缺失数据不敏感
2)有着坚实的数学基础,以及稳定的分类效率

1)需要假设属性之间相互独立,这往往并不成立(喜欢吃番茄、鸡蛋,却不喜欢吃番茄炒蛋)
2)需要知道先验概率
3)分类决策存在错误率

SVM
支持向量机

1)可以解决小样本下机器学习的问题
2)提高泛化性能
3)可以解决高维、非线性问题。超高维文本分类仍受欢迎
4)避免神经网络结构选择和局部极小问题

1)对缺失数据敏感
2)内存消耗大,难以解释
3)运行和调参繁琐

KNN
K近邻

1)思想简单,理论成熟,既可以用来做分类也可以用来做回归
2)可用于非线性分类
3)训练时间复杂度为O(n)
4)准确度高,对数据没有假设,对outlier不敏感

1)计算量太大
2)对于样本分类不均衡的问题,会产生误判
3)需要大量的内存
4)输出的可解释性不强

Logistic Regression
逻辑回归

1)速度快
2)简单易于理解,直接看到各个特征的权重
3)能容易地更新模型吸收新的数据
4)如果想要一个概率框架,动态调整分类阀值

1)特征处理复杂,需要归一化和较多的特征工程

Neural Network
神经网络

1)分类准确率高
2)并行处理能力强
3)分布式存储和学习能力强
4)鲁棒性较强,不易受噪声影响

1)需要大量参数(网络拓扑、阀值、阈值)
2)结果难以解释
3)训练时间过长

6.1 为什么正确率有时不能有效评估分类算法?

假设我们正在开发一个模型来诊断罕见疾病。在这种情况下,罕见疾病的发病率可能非常低,例如仅占所有病例的百分之一。因此,我们的数据集中会有大量的健康样本(类别0),而罕见疾病的样本数量相对较少(类别1)。

现在假设我们开发了一个简单的模型,该模型倾向于将所有样本都预测为健康(类别0),因为这样可以获得很高的整体准确率。然而,对于罕见疾病的样本,这样的模型将无法提供有效的诊断,因为它几乎总是预测为健康。

在这种情况下,我们需要采取措施来解决数据不平衡问题,确保模型能够在诊断罕见疾病时具有良好的性能。我们可以使用类似于前面提到的解决方案,例如重采样、类别权重调整、使用不同的评价指标等来处理数据不平衡。

出现这种现象的原因主要是数据分布不均衡,类别为1的数据太少,错分了类别1但达到很高的正确率,此时失效。

6.2 什么样的分类器最好?

在确保一定正确率前提下,要求分类器的召回率尽量高。

6.3 什么是聚类,你知道哪些聚类算法?

什么是聚类:

  • 聚类是按照某个特定标准把一个数据集分割成不同的类或簇,使得同一个簇内的数据对象的相似性尽可能大,同时不在同一簇中的数据对象的差异性也尽可能地大。即聚类后同一类的数据尽可能聚集到一起,不同类数据尽量分离。

主要可划分为:

  • K-Means聚类
  • 均值漂移聚类
  • 基于密度的空间聚类算法
  • 高斯混合模型的期望最大化聚类
  • 凝聚层次聚类

K-Means聚类

  • 基本K-Means算法的思想很简单,事先确定常数K,常数K意味着最终的聚类类别数,首先随机选定初始点为质心,并通过计算每一个样本与质心之间的相似度(这里为欧式距离),将样本点归到最相似的类中,接着,重新计算每个类的质心(即为类中心),重复这样的过程,直到质心不再改变,最终就确定了每个样本所属的类别以及每个类的质心。由于每次都要计算所有的样本与每一个质心之间的相似度,故在大规模的数据集上,K-Means算法的收敛速度比较慢。

K-means 聚类流程:

  1. 首先确定一个k值,即希望将数据集经过聚类得到k个集合。
  2. 从数据集中随机选择k个数据点作为质心。
  3. 对数据集中每一个点,计算其与每一个质心的距离(如欧式距离),离哪个质心近,就划分到那个质心所属的集合。
  4. 把所有数据归好集合后,一共有k个集合。然后重新计算每个集合的质心。
  5. 如果新计算出来的质心和原来的质心之间的距离小于某一个设置的阈值(表示重新计算的质心的位置变化不大,趋于稳定,或者说收敛),可以认为聚类已经达到期望的结果,算法终止。
  6. 如果新质心和原质心距离变化很大,需要迭代3~5步骤
6.4 K-Means聚类算法如何调优?
  1. 数据归一化和离群点的处理
    k-means是根据欧式距离来度量数据的划分,均值和方差大的数据会对结果有致命的影响。同时,少量的噪声也会对均值产生较大的影响,导致中心偏移。所以在聚类前一定要对数据做处理。
  2. 选择合适的k值:k-means++方法,在一开始确定簇时,让所有簇中心坐标两两距离最远。
6.5 K-Means聚类算法如何选择初始点?

初始点随机分布
k-means++方法:在一开始确定簇时,让所有簇中心坐标两两距离最远

6.6 K-Means聚类聚的是特征还是样本

聚的是特征。

  • 聚类的核心思想是将具有相似特征的事物给聚在一起,也就是说聚类算法最终只能告诉我们哪些样本属于同一个类别,而不能告诉我们每个样本具体属于什么类别。
6.7 K-Means++

K-means与K-means++:原始K-means算法最开始随机选取数据集中K个点作为聚类中心,而K-means++按照如下的思想选取K个聚类中心:假设已经选取了n个初始聚类中心(0<n<K),则在选取第n+1个聚类中心时:距离当前n个聚类中心越远的点会有更高的概率被选为第n+1个聚类中心。在选取第一个聚类中心(n=1)时同样通过随机的方法。可以说这也符合我们的直觉:聚类中心当然是互相离得越远越好。这个改进虽然直观简单,但是却非常得有效。

k-means code:

import numpy as np

np.random.seed(545)

def wh_iou(wh1, wh2):
    # 返回nxm的IoU矩阵。wh1是nx2的数组,wh2是mx2的数组
    wh1 = wh1[:, None]  # [N,1,2]
    # 通过添加维度将输入的边界框数组 wh1 和 wh2 转换为三维数组
    wh2 = wh2[None]  # [1,M,2]
    inter = np.minimum(wh1, wh2).prod(2)  # [N,M]
    # 这一行代码计算了交集部分的面积。它首先对 wh1 和 wh2 中的对应元素进行逐元素的最小值计算,然后对第二个维度进行乘积运算。
    return inter / (wh1.prod(2) + wh2.prod(2) - inter)  # iou = inter / (area1 + area2 - inter)
    # wh1.prod(2) 和 wh2.prod(2) 计算了 wh1 和 wh2 中每个边界框的面积

def k_means(boxes, k, dist=np.median):
    """
    YOLO的k-means聚类方法
    参考: https://github.com/qqwweee/keras-yolo3/blob/master/kmeans.py
    参数:
        boxes: 需要进行聚类的边界框
        k: 聚类中心的数量
        dist: 更新聚类中心的方法(默认为中位数,效果略优于均值)
    """
    box_number = boxes.shape[0]
    last_nearest = np.zeros((box_number,))
    # 创建一个长度为 box_number 的零数组,用于存储上一次迭代时每个边界框所属的最近的聚类中心的索引。在算法的每次迭代中,都会将当前迭代的结果与上一次迭代的结果进行比较,以判断是否达到了收敛条件,从而决定是否终止迭代。
    # 随机选择k个边界框作为初始聚类中心
    clusters = boxes[np.random.choice(box_number, k, replace=False)] # replace 不重复的选取
    print((clusters))

    while True:
        # 计算每个边界框到每个聚类中心的距离: 1-IOU(边界框, 聚类中心)
        distances = 1 - wh_iou(boxes, clusters)
        # 找到每个边界框最近的聚类中心
        current_nearest = np.argmin(distances, axis=1)
        # 如果聚类结果不再变化,则退出循环(收敛)
        if (last_nearest == current_nearest).all():
            break
        # 根据每个聚类中的边界框更新聚类中心
        for cluster in range(k):
            clusters[cluster] = dist(boxes[current_nearest == cluster], axis=0)

        last_nearest = current_nearest

    return clusters

if __name__ == '__main__':

    boxes = np.array([[10, 20],
                    [15, 25],
                    [30, 35],
                    [40, 45],
                    [50, 55],
                    [60, 65]])

    # Number of clusters
    k = 2

    # Call k_means function
    clusters = k_means(boxes, k)
    print("Cluster centers:\n", clusters)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

贪吃蛇身子改进加贪吃蛇向右移动

1. 蛇移动的思想&#xff1a; 其实就是删除头节点 &#xff0c;增加尾节点&#xff1b;一句代码搞定 struct Snake *p; p head; head head -> next; free(p) 防止造成多的空间节点 2.增加尾节点代码思想&#xff1a; 2.1 .开辟new 节点的空间 struct Snake *new (stru…

2015年中国电子地图数据

这是一份收藏得比较久的电子地图数据&#xff0c;虽然很比较旧&#xff0c;但数据内容很丰富&#xff0c;它可以在一些GIS系统中作测试用。 2015中国电子地图 2015年中国电子地图数据的压缩包有3.29GB大小&#xff0c;如下图所示。 压缩文件大小 该数据进行解压之后&…

CentOS 7虚拟机配置过程中所需组件的安装(二)

1.安装net-tools组件&#xff08;解决无 ifconfig&#xff09; # yum install net-tools 2.安装gcc、c编译器以及内核文件 # yum -y install gcc gcc-c kernel-devel 验证安装成功 3.安装nano&#xff08;文本编辑器&#xff09; # yum install nano

Qt 把.exe打包成安装文件形式

目录 1.下载工具 Qt Installer Framework2.将bin文件添加到环境变量3.拷贝startmenu示例-备用4.准备Qt Release打包好的程序5.把Release打包好的程序放到packages\org.qtproject.ifw.example\data文件夹下6.生成安装包7.修改安装包图标8.修改主程序程序安装引导-创建快捷键9.添…

vue快速入门(四十四)自定义组件

注释很详细&#xff0c;直接上代码 上一篇 新增内容 全局注册自定义组件并应用局部注册自定义组件并应用 此篇使用了axios模块没有安装导入的先看这一篇 axios模块下载与导入 源码 main.js import Vue from vue import App from ./App.vue//全局引入axios // 引入axios impor…

(九)Pandas表格样式 学习简要笔记 #Python #CDA学习打卡

目录 一. Pandas表格样式 1&#xff09;举例数据 2&#xff09;字体颜色 3&#xff09;背景高亮 4&#xff09;极值背景高亮 &#xff08;a&#xff09;高亮最大值 highlight_max() &#xff08;b&#xff09;高亮最小值 highlight_min() &#xff08;c&#xff09;同时…

viewerjs在vue中实现点击图片预览、切换、缩放、拖拽、旋转等功能

1、下载依赖&#xff1a; npm i viewerjs 2、定义html结构 <template> <div><ul class"artBody"><li><img src"picture-1.jpg" alt"Picture 1"></li><li><img src"picture-2.jpg" alt&…

WinForm右键菜单的快键键设置

Form中有一个富文本框控件&#xff0c;在里面右键鼠标&#xff0c;弹出下拉菜单。快捷键的效果则是按下altp,触发按下属性事件。 1.从工具箱添加RichTextBox 2.然后添加ContextMenuStrip 3.选择RichTextBox的ContextMenuStrip属性值为contextMenuStrip1 4.按照下图设置“属…

基于Python实现心脏病数据可视化DEA+预测【500010103.1】

一、数据说明 该心脏病数据集是通过组合 5 个已经独立可用但以前未合并的流行心脏病数据集来策划的。在这个数据集中&#xff0c;5 个心脏数据集结合了 11 个共同特征&#xff0c;使其成为迄今为止可用于研究目的的最大心脏病数据集。 该数据集由 1190 个实例和 11 个特征组成…

Springboot+Vue项目-基于Java+MySQL的IT技术交流和分享平台系统(附源码+演示视频+LW)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &…

【人工智能】AIGC(Artificial Intelligence Generated Content)

随着生成式 AI 应用快速进入市场&#xff0c;以及越来越多大模型的不断面世&#xff0c;2023 年已经成为生成式 AI 的元年&#xff1a;不同区域、各行各业、不同领域的人们开始尝试在工作和生活中使用生成式 AI&#xff0c;以探索各种可能性。于企业而言&#xff0c;生成式 AI …

Matlab图像处理-均值滤波,中值滤波和高斯滤波。

针对添加了零均值高斯噪声的图像&#xff0c;以取得尽可能好的处理效果为目的&#xff0c;采用不少于3种方法进行处理&#xff1b;对处理结果进行定性和定量的比较、并得出相应的结论。 1.算法原理&#xff1a; 采用的图像滤波包括均值滤波&#xff0c;中值滤波和高斯滤波。 …

算法基础:并查集详解

并查集 并查集&#xff0c;在一些有N个元素的集合应用问题中&#xff0c;我们通常是在开始时让每个元素构成一个单元素的集合&#xff0c;然后按一定顺序将属于同一组的元素所在的集合合并&#xff0c;其间要反复查找一个元素在哪个集合中。这一类问题近几年来反复出现在信息学…

【网络编程】网络编程概念 | TCP和UDP的区别 | UDP数据报套接字编程 | Socket

文章目录 网络编程一、什么是网络编程1.TCP和UDP的区别 二、UDP数据报套接字编程DatagramSocketDatagramPacket回显服务器&#xff08;echo server&#xff09; 网络编程 一、什么是网络编程 通过网络&#xff0c;让两个主机之间能够进行通信。基于通信来完成一定的功能。 ​…

Linux网络-DNS域名解析服务

目录 一.DNS相关介绍 1.DNS是什么 2.DNS系统的分布式数据结构 根域 顶级域 二级域 子域 主机 3.服务器类型 主域名服务器 从域名服务器 缓存域名服务器 转发域名服务器 二.DNS域名解析 1.DNS域名解析方式及功能 2.DNS域名解析查询方式 2.1.递归查询&#xff0…

Verilog基础语法——parameter、localparam与`define

Verilog基础语法——parameter、localparam与define 写在前面一、localparam二、parameter三、define写在最后 写在前面 在使用Verilog编写RTL代码时&#xff0c;如果需要定义一个常量&#xff0c;可以使用define、parameter和localparam三种进行定义与赋值。 一、localparam …

施耐德EOCR-2CT-300/5电流互感器 50HZ 5VA

EOCR主要产品有电子式电动机保护继电器&#xff0c;电子式过电流继电器&#xff0c;电子式欠电流继电器&#xff0c;电子式欠电压继电器&#xff0c;其它保护和监视装置&#xff0c;电流互感器。 施耐德EOCR-2CT-300/5电流互感器 EOCR-2CT系列型号&#xff1a; EOCR 2CT 100…

操作系统安全:Linux安全审计,Linux日志详解

「作者简介」&#xff1a;2022年北京冬奥会网络安全中国代表队&#xff0c;CSDN Top100&#xff0c;就职奇安信多年&#xff0c;以实战工作为基础对安全知识体系进行总结与归纳&#xff0c;著作适用于快速入门的 《网络安全自学教程》&#xff0c;内容涵盖系统安全、信息收集等…

18.Nacos配置管理-微服务读取Nacos中的配置

需要解决的问题 1.实现配置更改热更新&#xff0c;而不是改动了配置文件还要去重启服务才能生效。 2.对多个微服务的配置文件统一集中管理。而不是需要对每个微服务逐一去修改配置文件&#xff0c;特别是公共通用的配置。 配置管理服务中的配置发生改变后&#xff0c;回去立…

leetcode-二叉树的镜像-91

题目要求 思路1 1.遍历一遍二叉树&#xff0c;将左边的结点对应创建一个右边的结点 2.用此方法空间复杂度O(n)&#xff0c;并不是最优 思路2 1.将一个结点的左右子树进行交换&#xff0c;如果左子树还有左右结点&#xff0c;就再交换左子树的左右结点&#xff0c;以此递归下去…