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

目录

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.rhkb.cn/news/316146.html

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

相关文章

服务器数据恢复—StorNext文件系统下raid5阵列数据恢复案例

服务器数据恢复环境&#xff1a; 昆腾某型号存储&#xff0c;8个存放数据的存储柜1个存放元数据的存储柜。 元数据存储&#xff1a;8组RAID1阵列1组RAID10阵列4个全局热备硬盘。 数据存储&#xff1a;32组RAID5阵列&#xff0c;划分2个存储系统。 服务器故障&#xff1a; 数据…

c++初阶——类和对象(中)

大家好&#xff0c;我是小锋&#xff0c;我们今天继续来学习类和对象。 类的6个默认成员函数 我们想一想如果一个类什么都没有那它就是一个空类&#xff0c;但是空类真的什么都没有吗&#xff1f; 其实并不是&#xff0c;任何类在什么都不写时&#xff0c;编译器会自动生成以…

武汉星起航:跨境电商的领航者,全方位孵化助力中国卖家出海

在数字化浪潮的推动下&#xff0c;跨境电商行业蓬勃发展&#xff0c;成为国内外商家争相涌入的新蓝海。武汉星起航电子商务有限公司&#xff0c;作为自营亚马逊跨境电商及卖家孵化服务的佼佼者&#xff0c;以其专业的团队、丰富的经验和卓越的服务品质&#xff0c;在行业中脱颖…

如何一个人,一边上班一边做抖音小店?23岁的他告诉你答案

大家好&#xff0c;我是电商笨笨熊 做抖音小店可以兼职去做吗&#xff1f; 可以。 一个不需要自备货源、自己进货发货也不需要自己直播带货的项目&#xff0c;抖音小店的各方面操作都相比其他传统电商来说更适合普通人做。 换句话说&#xff0c;只要掌握对方法&#xff0c;…

新书推荐机器学习大数据平台的构建、任务实现与数据治理

在大数据与机器学习日新月异的今天&#xff0c;构建稳定、安全、可扩展的数据平台已成为企业和研究机构的迫切需求。这本书应运而生&#xff0c;提供了详尽且实用的指南&#xff0c;帮助读者在云计算环境中构建、优化和治理大数据平台。 作者以清晰明了的写作风格&#xff0c;…

会计稳健性Cscore模型(2000-2022年)

01、数据介绍 会计稳健性是指在财务报告中&#xff0c;对损失和收益的确认存在不对称的延迟。具体来说&#xff0c;对于损失或坏消息&#xff0c;企业应尽早确认&#xff1b;而对于收益或好消息&#xff0c;企业应延迟确认。这种稳健的会计处理方式有助于提高财务报告的质量&a…

前端实现将二进制文件流,并下载为excel文件

目录 一、关于二进制流二、项目实践三、常见问题及解决 一、关于二进制流 含义&#xff1a;二进制流是一种计算机文件格式&#xff0c;它的数据以二进制形式存储&#xff0c;与文本文件不同。 二进制文件可以包含任意类型的数据&#xff0c;例如&#xff1a;图像、音频、视频…

Unreal Engine动态添加Button实例

在控件蓝图中添加容器&#xff0c;注意命名不要有中文 C代码中找到容器实例 1 2 3 4 5 6 7 8 UVerticalBox* verticalBox Cast<UVerticalBox>(CurrentWidget->GetWidgetFromName(TEXT("VerticalBox_0"))); if (verticalBox ! nullptr) { UScrollBox* …

【海思Hi3516CV610】是面向新一代视频编解码标准、网络安全和隐私保护、人工智能行业应用方面的IPC SoC

海思Hi3516CV610是面向新一代视频编解码标准、网络安全和隐私保护、人工智能行业应用方面的IPC SoC&#xff0c;除了开发普通摄像机&#xff0c;还可以打造极具竞争力的枪球一体机、双目长短焦摄像机产品&#xff1b; 处理器内核: 支持ARM Cortex-A7 MP2 时钟速率950MHz 支持…

Redis线程模型及性能优化概述

redis线程模型&#xff1a; 网络模块命令处理 redis的性能&#xff1a; 一个取决于物理内存&#xff0c;另一个是对于socket请求的处理速度。 4.0以前 单线程模式 请求流程&#xff1a;对于一个请求&#xff0c;线程会根据操作产生相应的事件&#xff08;读&#xff0c;写事…

【EI会议|稳定检索】2024年航空航天、空气动力学与自动化工程国际会议(ICAAAE 2024)

2024 International Conference on Aerospace, Aerodynamics, and Automation Engineering 一、大会信息 会议名称&#xff1a;2024年航空航天、空气动力学与自动化工程国际会议 会议简称&#xff1a;ICAAAE 2024 收录检索&#xff1a;提交Ei Compendex,CPCI,CNKI,Google Schol…

C语言 | Leetcode C语言题解之第50题Pow(x,n)

题目&#xff1a; 题解&#xff1a; double myPow(double x, int n){if(n 0 || x 1){return 1;}if(n < 0){return 1/(x*myPow(x,-(n1)));}if(n % 2 0){return myPow(x*x,n/2);}else{return x*myPow(x*x,(n - 1)/2);} }

前端发送请求,显示超时取消

前端发送请求&#xff0c;显示超时取消 问题说明&#xff1a;后台接口请求60s尚未完成&#xff0c;前端控制台显示取消&#xff08;canceled&#xff09; 原因 1、前端设置60s超时则取消 2、后台接口响应时间过长&#xff0c;过长的原因统计的数据量多&#xff08;实际也才17…

大象机器人开源六轴协作机械臂myCobot 320 手机摄影技术!

引言 有没有遇到过这样的情况&#xff1a;当你手持手机或相机准备拍摄视频时&#xff0c;心中已经构想了完美的画面&#xff0c;但却因为实际的限制无法捕捉到理想中的角度&#xff1f;这种情况可能会让人感到挫折。例如&#xff0c;如果想要从地面一只蚂蚁的视角拍摄&#xff…

UG NX二次开发(C++)-获取模型中所有的拉伸(Extrude)特征

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1、前言2、在UG 12中创建几个拉伸特征3、UFun中获取对象类型4、通过NXOpen过渡5.测试结果1、前言 在采用UG NX二次开发时,有时需要在模型中获取特定的对象,比如拉伸特征、关联特征等等。但是通过…

CSS实现各种优惠券效果

一、左半圆效果 <style style"text/css">.coupon {width: 240px;height: 100px;margin-top: 15px;background-color: #ff6347;-webkit-mask: radial-gradient(circle at left center, transparent 20px, red 20px); } </style><div class"coupon…

【函数式接口使用✈️✈️】配合策略模式实现文件处理的案例

目录 &#x1f378;前言 &#x1f37b;一、功能描述 &#x1f37a;二、面向对象设计模式 &#x1f379;三、策略模式 &#x1f366;四、策略 VS 面向对象 &#x1f368;章末 &#x1f378;前言 小伙伴们大家好&#xff0c;上周初步了解了下函数式接口&#xff0c;Consume…

认识Linux及一些基本

目录 linux简介&#xff1a; 1. 发展史 UNIX发展的历史 Linux发展历史 2. 开源 3. 企业应用现状 Linux在服务器领域的发展 Linux在桌面领域的发展 Linux在移动嵌入式领域的发展 Linux在云计算/大数据领域的发展 4. 发行版本 Debian Ubuntu 红帽企业级Linux Cent…

IIS中搭建.Net Core项目,步骤详解

一、准备服务器 1&#xff09;安装IIS 这个比较简单&#xff0c;百度一下就行 2&#xff09;安装 .NET Core 运行时 下载地址&#xff1a;下载 .NET(Linux、macOS 和 Windows) 因为我是本地开发&#xff0c;所以我下载的是SDK 安装成功之后显示如下&#xff1a; 检查是否安装…

边OTG边充电芯片LDR6500

随着科技的飞速发展&#xff0c;智能移动设备已成为我们生活中不可或缺的一部分。而在这些设备的连接与数据传输中&#xff0c;Type-C接口以其高效、便捷的特性逐渐占据了主导地位。OTG&#xff08;On-The-Go&#xff09;技术则进一步扩展了Type-C接口的功能&#xff0c;使得设…