Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >当我们拿到数据进行建模时, 如何选择更合适的算法?

当我们拿到数据进行建模时, 如何选择更合适的算法?

作者头像
公众号guangcity
发布于 2019-09-20 07:39:17
发布于 2019-09-20 07:39:17
1K0
举报
文章被收录于专栏:光城(guangcity)光城(guangcity)

春天不学习

秋季徒伤悲

一年之际在于春

当我们拿到数据进行建模时,

如何选择更合适的算法?

Datawhale优秀回答者:

mashagua,金小楗

目标导向

>机器学习

1.先看是分类问题还是回归问题(分类就先从常用的分类模型里选择)

2.其次,看数据特征的数据类型,然后做一些初步的数据统计,比如是否数据均衡,大致的数据分布是怎样的(不同类别的分布)

3.然后判断用哪个比较合适一些,是树模型还是其他的分类模型。

4.最后查看kaggle比赛有没有相似案例,别人做的方法有没有值得自己学习的地方

>深度学习

对于深度学习算法选择也是看任务目标选择合适的模型,图像类首选cnn及各种cnn的变种,时间顺序相关的选rnn ,生成类的选vae或gan,有明确规则的选rl。

什么是K-means算法?

Datawhale优秀回答者:金小楗、强

通俗解释

聚类算法有很多种,K-Means 是聚类算法中的最常用的一种,算法最大的特点是简单,好理解,运算速度快,但是只能应用于连续型的数据,并且一定要在聚类前需要手工指定要分成几类。

K-Means 聚类算法的大致意思就是“物以类聚,人以群分”。

首先输入 k 的值,即我们指定希望通过聚类得到 k 个分组;

从数据集中随机选取 k 个数据点作为初始大佬(质心);

对集合中每一个小弟,计算与每一个大佬的距离,离哪个大佬距离近,就跟定哪个大佬。

这时每一个大佬手下都聚集了一票小弟,这时候召开选举大会,每一群选出新的大佬(即通过算法选出新的质心)。

如果新大佬和老大佬之间的距离小于某一个设置的阈值(表示重新计算的质心的位置变化不大,趋于稳定,或者说收敛),可以认为我们进行的聚类已经达到期望的结果,算法终止。

如果新大佬和老大佬距离变化很大,需要迭代3~5步骤。

专业解释

K-means算法的基本思想是初始随机给定K个簇中心,按照最邻近原则把待分类样本点分到各个簇。然后按平均法重新计算各个簇的质心,

从而确定新的簇心。一直迭代,直到簇心的移动距离小于某个给定的值。

K-means聚类算法主要分为三个步骤:

(1)为待聚类的点寻找聚类中心;

(2)计算每个点到聚类中心的距离,将每个点聚类到离该点最近的聚类中去;

(3)计算每个聚类中所有点的坐标平均值,并将这个平均值作为新的聚类中心;

反复执行(2)、(3),直到聚类中心不再进行大范围移动或者聚类次数达到要求为止。

使用K-means需要考虑的问题:

1.k如何确定

2.初始质心的选取

3.距离的度量

4.质心的计算

5.算法停止条件

6.空聚类的处理

K-means的缺陷:

K-menas算法试图找到使平凡误差准则函数最小的簇。当潜在的簇形状是凸面的,簇与簇之间区别较明显,且簇大小相近时,其聚类结果较理想。

该算法除了要事先确定簇数K和对初始聚类中心敏感外,经常以局部最优结束,同时对“噪声”和孤立点敏感,并且该方法不适于发现非凸面形状的簇或大小差别很大的簇。

K-means算法的聚类中心的个数K 需要事先给定,但在实际中这个 K 值的选定是非常难以估计的,很多时候,事先并不知道给定的数据集应该分成多少个类别才最合适。

K-means需要人为地确定初始聚类中心,不同的初始聚类中心可能导致完全不同的聚类结果。

K-means ++ 算法:

K-means++算法选择初始聚类中心的基本思想就是:初始的聚类中心之间的相互距离要尽可能的远。

1.从输入的数据点集合中随机选择一个点作为第一个聚类中心;

2.对于数据集中的每一个点x,计算它与最近聚类中心(指已选择的聚类中心)的距离D(x);

3.选择一个新的数据点作为新的聚类中心,选择的原则是:D(x)较大的点,被选取作为聚类中心的概率较大;

4.重复2和3直到k个聚类中心被选出来;

5.利用这k个初始的聚类中心来运行标准的k-means算法。

谈谈对分类(Classification)和预 测(Prediction)的理解,主要步骤 有哪些,以及两者的区别和联系

Datawhale优秀回答者: 宁静致远

一、介绍

分类:输入样本数据,输出对应的类别,将样本中每个数据对应一个已知属性。

预测:两种或者两种以上的变量之间相互依赖的函数模型,预测给定自变量对应的因变量的值。

二、步骤

分类算法分为两步:

(1)学习步:通过训练样本数据集,建立分类规则

(2)分类步:用已知的测试样本集评估分类规则的准确率,若准确率可接受,则是使用该规则对除样本以外的数据(待测样本集)进行预测。

预测算法分两步:

(1)我们先要基于一定数量的样本来训练出一个训练模型;

(2)为了判断这个模型训练的如何,我们还要对其进行检测一下;

(3)如果测试的样本数据与我们想象中的差别太大,那么我们就要重新进行训练这个预测模型,但是如果我们的预测模型符合我们的预先的期望,那么我们就可以用这个模型进行预测的操作。

三、区别

特征

1.分类

2.回归预测

输出类型

1.离散数据

2.连续数据

目的

1.寻找决策边界

2.找到最优拟合线

评价方法

1.精度、混淆矩阵

2.SEE(sum of square errors)或拟合优度

四、联系

分类算法可以预测连续值,但是连续值是以类标签的概率的形式。

预测算法可以预测离散值,但离散值以整数形式表示。

AI

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-03-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 光城 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
信号量和管程
我们进入信号区可以如果是读操作, 那么就可以允许它几个信号同时进行, 如果是写操作 ,那么就设置只能是一个信号进行。
用户11097514
2024/05/30
1510
信号量和管程
多线程锁有几种类型_进程同步和互斥概念
现代操作系统基本都是多任务操作系统,即同时有大量可调度实体在运行。在多任务操作系统中,同时运行的多个任务可能:
全栈程序员站长
2022/09/22
1.3K0
多线程锁有几种类型_进程同步和互斥概念
UNPv2第七章:互斥锁与条件变量
 pthread_mutex_lock()函数是一个阻塞型的上锁函数,若互斥锁已经上了锁,调用pthread_mutex_lock()函数对互斥锁再次上锁的话,调用线程会阻塞,直到当前互斥锁被解锁。  pthread_mutex_trylock()函数是一个非阻塞型的上锁函数,如果互斥锁没被锁住,pthread_mutex_trylock()函数将把互斥锁加锁, 并获得对共享资源的访问权限;如果互斥锁被锁住了,pthread_mutex_trylock()函数将不会阻塞等待而直接返回EBUSY(已加锁错误),表示共享资源处于繁忙状态。  如果互斥锁变量mutex已经上锁,调用pthread_mutex_unlock()函数将解除这个锁定,否则直接返回。该函数唯一的参数mutex是pthread_mutex_t数据类型的指针。该函数调用成功返回0,否则返回-1。
提莫队长
2019/02/21
9100
信号量(semaphore)
信号量也是一种锁,相对于自旋锁,当资源不可用的时候,它会使进程挂起,进入睡眠。而自旋锁则是让等待者忙等。这意味着在使用自旋锁获得某一信号量的进程会出现对处理器拥有权的丧失,也即时进程切换出处理器。信号量一般用于进程上下文,自旋锁一般用于中断上下文。
DragonKingZhu
2020/03/24
8900
Unsafe类park和unpark方法源码深入分析(mutex+cond)
说明:本篇博客整理自文末的多篇参考博客(每篇博客各有侧重)。本文结合源码对Unsafe的park和unpark方法进行了完整全面的梳理,并对部分参考博客中存在的错误描述进行说明。
saintyyu
2021/11/22
4840
Unsafe类park和unpark方法源码深入分析(mutex+cond)
线程同步-条件变量
有一个非常好的VIP自习室,一次只允许一个人进来,每一个自习完成的同学归还钥匙后,不能立马申请,第二次申请必须排队,也就是说其他人也必须排队,这种去自习室自习有一定的顺序性,这称之为同步。
南桥
2024/08/24
1120
线程同步-条件变量
System|Concurrency|条件变量
有界缓冲区问题,sender向buffer中添加数据,receiver从buffer中取出数据。以两个索引in,out作为未读取数据的上下边界,buf作为存储未读取数据的缓冲区。
朝闻君
2021/11/22
5650
System|Concurrency|条件变量
Linux同步机制(二) - 条件变量,信号量,文件锁,栅栏
1 条件变量 条件变量是一种同步机制,允许线程挂起,直到共享数据上的某些条件得到满足。 1.1 相关函数  #include <pthread.h>  pthread_cond_t cond = PTHREAD_COND_INITIALIZER;  int pthread_cond_init(pthread_cond_t *cond, pthread_condattr_t*cond_attr);  int pthread_cond_signal(pthread_cond_t *cond);  int
三丰SanFeng
2018/01/16
3K0
信号量与管程以及原子性,pv原语操作,临界资源和临界区,同步和互斥,信号量,管程与临界区不同,信号量和互斥锁的区别,互斥量(Mutex)
程序的原子性指:整个程序中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。
zhangjiqun
2024/12/16
1740
信号量与管程以及原子性,pv原语操作,临界资源和临界区,同步和互斥,信号量,管程与临界区不同,信号量和互斥锁的区别,互斥量(Mutex)
详解Linux多线程中互斥锁、读写锁、自旋锁、条件变量、信号量
---- Hello、Hello大家好,我是木荣,今天我们继续来聊一聊Linux中多线程编程中的重要知识点,详细谈谈多线程中同步和互斥机制。 同步和互斥 互斥:多线程中互斥是指多个线程访问同一资源时同时只允许一个线程对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的; 同步:多线程同步是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源
Linux兵工厂
2023/02/28
3.8K0
详解Linux多线程中互斥锁、读写锁、自旋锁、条件变量、信号量
Linux线程编程同步之互斥锁和条件变量
今天是最后一篇关于Linux线程编程的文章分享,在这里我们先掌握基础的概念及其应用,后面在慢慢去深入学习。最近看到一句说的非常在理:理论’是你知道是这样,但它却不好用。‘实践’是它很好用,但你不知道是为什么。我想大多数学习者,和我一样,在学习的过程中,都会或多或少的有这种情况,不过自己坚信,你把基础打好(同时学的过程中,不要好高骛远,三心二意的,把自己先暂时用到的东西学明白,再去学其他东西,不要当前的,没学会,又跑去学其他的,而且又学不会,这样浪费时间和精力;这个这里基础打好,举个例子,你的c语言功底要打好,对指针的使用非常熟悉,甚至一些高级用法就是要平时慢慢积累和总结,以及内存原理要知道为什么是这样等方面),后面实战的话,就好多了,至少不会说我这个东西不会那个东西又不会,这样会让自己很痛苦当初为啥没学好基础,现在实战中漏洞百出。好了,废话不多说了,开始下面的主题分享:
用户6280468
2022/03/21
1.7K0
Linux线程编程同步之互斥锁和条件变量
编程小知识之 虚假唤醒(spurious wakeup)
高层次的多线程编程中,条件变量是个常见的同步方法,跟传统仅使用互斥量的方法相比,条件变量可以减少锁的竞争.
用户2615200
2019/12/20
2.1K0
【线程同步】条件变量
条件变量不是锁,它经常和互斥量组合使用。以生产者消费者模型为例,当前有多个消费者线程竞争一个资源,当资源为空时,消费者线程会阻塞在一个条件上,等待生产者通知,生产者写数据到临界区并通知消费者,此时消费者去竞争这个资源并读取数据。它是这样实现的,第一个线程访问资源的时候,获得互斥锁,调用pthread_cond_wait将会释放锁,并阻塞在条件cond上面,这是第二个线程到来,依然可以获得互斥锁,然后这个线程如果调用pthread_cond_wait也会会释放锁,并阻塞在条件cond上面,这样,所有线程就都阻塞在cond上面。
mindtechnist
2024/08/08
1280
【线程同步】条件变量
linux网络编程之posix 线程(四):posix 条件变量与互斥锁 示例生产者--消费者问题
s1mba
2017/12/28
1.4K0
linux网络编程之posix 线程(四):posix 条件变量与互斥锁 示例生产者--消费者问题
线程同步之条件变量(pthread_cond_wait)
条件变量给了线程以无竞争的方式等待特定条件发生。条件变量是和互斥量一起使用的,条件变量是由互斥量保护的。这么讲,大家可能不明白,这条件变量有什么用?干什么的?还是结合pthread_cond_wait()函数来分析一下吧!
zy010101
2020/05/18
19.1K2
线程同步之条件变量(pthread_cond_wait)
【Linux】:多线程(互斥 && 同步)
寄存器不等于寄存器的内容,线程在执行的时候,将共享数据,加载到 CPU 寄存器的本质:把数据的内容,变成了自己的上下文,同时自己拷贝了一份数据
IsLand1314
2024/12/20
1180
【Linux】:多线程(互斥 && 同步)
多线程安全-iOS开发注意咯!!!
但是并不是非常完美,因为多线程常常伴有资源抢夺的问题,作为一个高级开发人员并发编程那是必须要的,同时解决线程安全也成了我们必须要要掌握的基础
iOSSir
2019/05/08
8910
从软件(Java/hotspot/Linux)到硬件(硬件架构)分析互斥操作的本质
一切互斥操作的依赖是 自旋锁(spin_lock),互斥量(semaphore)等其他需要队列的实现均需要自选锁保证临界区互斥访问。
执生
2021/01/30
8810
操作系统:第二章 进程的描述与控制(下)
进程同步:在多道程序环境下,进程是并发执行的,不同进程之间存在着不同的相互制约关系。
Here_SDUT
2022/08/08
6840
操作系统:第二章 进程的描述与控制(下)
如何理解互斥锁、条件变量、读写锁以及自旋锁?
锁是一个常见的同步概念,我们都听说过加锁(lock)或者解锁(unlock),当然学术一点的说法是获取(acquire)和释放(release)。
果冻虾仁
2021/12/08
1.6K0
如何理解互斥锁、条件变量、读写锁以及自旋锁?
推荐阅读
相关推荐
信号量和管程
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档