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

news/2024/5/9 7:07:44

目录

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 npnp.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_nearestreturn clustersif __name__ == '__main__':boxes = np.array([[10, 20],[15, 25],[30, 35],[40, 45],[50, 55],[60, 65]])# Number of clustersk = 2# Call k_means functionclusters = k_means(boxes, k)print("Cluster centers:\n", clusters)

http://www.mrgr.cn/p/72020032

相关文章

Python爱心代码

爱心效果图&#xff1a; 完整代码&#xff1a; import random from math import sin, cos, pi, log from tkinter import *# 定义画布尺寸和颜色 CANVAS_WIDTH 640 CANVAS_HEIGHT 480 CANVAS_CENTER_X CANVAS_WIDTH / 2 CANVAS_CENTER_Y CANVAS_HEIGHT / 2 IMAGE_ENLARG…

爬虫2(页面解析和数据提取)

爬虫2(页面解析和数据提取)处理HTML文件,常用Xpath,先将HTML文件转换成XML文档,然后用Xpath查找HTML节点或元素。 一、HTML与XML二、XPath1、XPath路径表达式三、Lxml库html = etree.HTML(text) # 将字符串转换成HTML格式# print(etree.tostring(html)) # 补全HTMLresul…

平芯微PW7014中文规格书

产品概述PW7014 具有前端过电压和过温保护功能。 支持 3V 到 36V 的宽输入电压工作范围。 过压保护阈值可以外部设置 4V~22V 或采用内部默认 6.1V 设置。 超快的过压保护响应速度能够确保后级电路的安全。 集成了超低导通阻抗的 nFET 开关, 确保电路系统应用更好的性能。 它可…

hp惠普插入耳机右下角提示检测到音频设备 取消提醒弹窗

前言全局说明系统 Windows 11一、插入耳机屏幕右下角提示二、关闭提示 1.点击提示框 “个性化我的音频” 按钮2. 点“取消”,取消测试3. 去掉 "当检测到新的受支持设备时通知我" 前面的勾(如下图)再插耳机时候就不会有右下角提示了免责声明:本号所涉及内容仅供安…

使用PlantUML绘制活动图、泳道图

最近在学PlantUML 太漂亮了 给大家欣赏一下 我也记录一下 startuml |使用前| start :用户打开旅游App; |#LightSkyBlue|使用后| :用户浏览旅游信息; |#AntiqueWhite|登机前| :用户办理登机手续; :系统生成登机牌; |使用前| :用户到达机场; |登机前| :用户通过安检; |#Light…

Hadoop3:HDFS、YARN、MapReduce三部分的架构概述及三者间关系(Hadoop入门必须记住的内容)

一、HDFS架构概述 Hadoop Distributed File System&#xff0c;简称HDFS&#xff0c;是一个分布式文件系统。 1&#xff09;NameNode(nn)&#xff1a;存储文件的元数据&#xff0c;如文件名&#xff0c;文件目录结构&#xff0c;文件属性&#xff08;生成时间、副本数、文件…

Chartist.js折线图(三)

事件替换图形代码如下<!DOCTYPE html> <html><head><link rel="stylesheet" href="./chartist.min.css"><script src="./chartist.min.js"></script></head><body><div class="ct-char…

Linux给文件内容每行指定字符数据脱敏替换

需求:文件内容中有一批手机号,现在需要对手机号的第4-8位进行数据脱敏处理,我们可以用 sed 命令来截取字符替换操作sed s/./*/4 tel.txt | sed s/./*/5 | sed s/./*/6 | sed s/./*/7 | sed s/./*/8

Web3钱包开发获取测试币-Polygon Mumbai(一)

Web3钱包开发获取测试币-Polygon Mumbai(一) 由于主网区块链上的智能合约需要真正的代币&#xff0c;而部署和使用需要花费真金白银&#xff0c;因此测试网络为 Web3 开发人员提供了一个测试环境&#xff0c;用于部署和测试他们的智能合约&#xff0c;以识别和修复在将智能合约…

powershell@命令行提示符样式配置自定义@pwsh重写prompt显示电量内存时间等信息

文章目录 abstract流行的powershell prompt模块示例 powershell原生修改Prompt函数配置文档Prompt命令来自哪里 简单修改带上电量和时间的Prompt 复杂修改预览FAQ:没有必要修改相关仓库地址样式选择平衡样式花哨样式响应性能 小结 abstract 在 PowerShell 中&#xff0c;可以通…

nginx高性能负载均衡集群

高性能负载均衡集群 一、集群是什么简单地说,集群就是指一组(若干个)相互独立的计算机,利用高速通信网络组成的一个较大的计算机服务系统,每个集群节点(即集群中的每台计算机)都是运行各自服务的独立服务器。 这些服务器之间可以彼此通信,协同向用户提供应用程序,系统…

机器学习day1

一、人工智能三大概念 人工智能三大概念 人工智能&#xff08;AI&#xff09;、机器学习&#xff08;ML&#xff09;和深度学习&#xff08;DL&#xff09; 人工智能&#xff1a;人工智能是研究计算代理的合成和分析的领域。人工智能是使用计算机来模拟&#xff0c;而不是人类…

动态内存管理 柔性数组

文章目录 动态内存函数 malloc freecallocrealloc 重新开辟空间realloc 也可以第一个参数为NULL&#xff0c;则是直接开辟内存&#xff0c;类似于malloc用法 常见的动态内存错误对空指针进行解引用操作对开辟的内存越界访问对非动态开辟的内存使用free释放使用free释放动态开辟…

ABS10-ASEMI开关电源整流桥ABS10

ABS10-ASEMI开关电源整流桥ABS10编辑:ll ABS10-ASEMI开关电源整流桥ABS10 型号:ABS10 品牌:ASEMI 封装:ABS-4 正向电流(Id):1A 反向耐压(VRRM):1000V 正向浪涌电流:30A 正向电压(VF):1.10V 引脚数量:4 芯片个数:4 芯片尺寸:50MIL 功率(Pd):小功率设备 工作温…

揭露 FileSystem 引起的线上 JVM 内存溢出问题

本文主要介绍了由FileSystem类引起的一次线上内存泄漏导致内存溢出的问题分析解决全过程。作者:来自 vivo 互联网大数据团队-Ye Jidong本文主要介绍了由FileSystem类引起的一次线上内存泄漏导致内存溢出的问题分析解决全过程。内存泄漏定义(memory leak):一个不再被程序使用…

Docker镜像的创建 和 Dockerfile

一. Docker 镜像的创建 创建镜像有三种方法&#xff0c;分别为基于已有镜像创建、基于本地模板创建以及基于 Dockerfile 创建。 1 基于现有镜像创建 &#xff08;1&#xff09;首先启动一个镜像&#xff0c;在容器里做修改docker run -it --name web3 centos:7 /bin/bash …

nginx高级篇之location高级实战

nginx location高级实战location是nginx的核心重要功能,可以设置网站的访问路径,一个web server会有多个路径,那么location就得设置多个。 Nginx的locaiton作用是根据用户请求的URI不同,来执行不同的应用。 针对用户请求的网站URL进行匹配,匹配成功后进行对应的操作。1.语…

【树莓派】yolov5 Lite,目标检测,行人检测入侵报警

延续之前的程序&#xff1a; https://qq742971636.blog.csdn.net/article/details/138172400 文章目录 播放声音pygame不出声音怎么办&#xff08;调节音量&#xff09;树莓派上的音乐播放器&#xff08;可选&#xff09;命令行直接放歌&#xff08;尝试放mp3歌曲&#xff09; …

一般神经网络的微分与网络参数的初始化

(文章的主要内容来自电科的顾亦奇老师的 Mathematical Foundation of Deep Learning, 有部分个人理解) 一般深度神经网络的微分 上周讨论的前向和反向传播算法可以推广到任意深度神经网络的微分。 对于一般的网络来说&#xff0c;可能无法逐层分割&#xff0c;但仍然可以用流…

第十五届蓝桥杯省赛第二场C/C++B组D题【前缀总分】题解(AC)

暴力解法 O ( 26 n 5 ) O(26n^5) O(26n5) 枚举将第 i i i 个字符串的第 j j j 个字符改为 c c c 的所有方案&#xff0c;时间复杂度 O ( 26 n 2 ) O(26n^2) O(26n2)&#xff0c;修改并计算总分&#xff0c; O ( n 3 ) O(n^3) O(n3)。 暴力优化 O ( 26 n 3 log ⁡ n ) O…