数据挖掘中最易犯的10个错误,请绕行!

本文总结了数据科学家在项目中常见的十大误区,包括缺乏数据、过度关注训练、依赖单一技术等,这些问题可能导致模型过拟合、预测失准及业务决策失误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

按照 Elder 博士的总结,这 10 大易犯错误包括:

0、缺乏数据( Lack Data )

1. 太关注训练( Focus on Training )

2. 只依赖一项技术( Rely on One Technique )

3. 提错了问题( Ask the Wrong Question )

4. 只靠数据来说话( Listen (only) to the Data )

5. 使用了未来的信息( Accept Leaks from the Future )

6. 抛弃了不该忽略的案例( Discount Pesky Cases )

7. 轻信预测( Extrapolate )

8. 试图回答所有问题( Answer Every Inquiry )

9. 随便地进行抽样( Sample Casually )

10. 太相信最佳模型( Believe the Best Model )

0. 缺乏数据( Lack Data )

对于分类问题或预估问题来说,常常缺乏准确标注的案例。

例如:

-欺诈侦测( Fraud Detection ):在上百万的交易中,可能只有屈指可数的欺诈交易,还有很多的欺诈交易没有被正确标注出来,这就需要在建模前花费大量人力来修正。

-信用评分( Credit Scoring ):需要对潜在的高风险客户进行长期跟踪(比如两年),从而积累足够的评分样本。

1 太关注训练( Focus on Training )

IDMer :就象体育训练中越来越注重实战训练,因为单纯的封闭式训练常常会训练时状态神勇,比赛时一塌糊涂。

实际上,只有样本外数据上的模型评分结果才真正有用!(否则的话,直接用参照表好了!)

例如:

-癌症检测( Cancer detection ) MD Anderson 的医生和研究人员( 1993 )使用神经网络来进行癌症检测,惊奇地发现,训练时间越长(从几天延长至数周),对训练集的性能改善非常轻微,但在测试集上的性能却明显下降。

-机器学习或计算机科学研究者常常试图让模型在已知数据上表现最优,这样做的结果通常会导致过度拟合( overfit )

解决方法:

解决这个问题的典型方法是重抽样( Re-Sampling )。重抽样技术包括: bootstrap cross-validation jackknife leave-one-out… 等等。

2 只依赖一项技术( Rely on One Technique )

IDMer :这个错误和第 10 种错误有相通之处,请同时参照其解决方法。没有对比也就没有所谓的好坏,辩证法的思想在此体现无遗。

当小孩子手拿一把锤子时,整个世界看起来就是一枚钉子。要想让工作尽善尽美,就需要一套完整的工具箱。

不要简单地信赖你用单个方法分析的结果,至少要和传统方法(比如线性回归或线性判别分析)做个比较。

研究结果:按照《神经网络》期刊的统计,在过去 3 年来,只有 1/6 的文章中做到了上述两点。也就是说,在独立于训练样本之外的测试集上进行了开集测试,并与其它广泛采用的方法进行了对比。

解决方法:

使用一系列好的工具和方法。(每种工具或方法可能最多带来 5%~10% 的改进)

3 提错了问题( Ask the Wrong Question )

IDMer :一般在分类算法中都会给出分类精度作为衡量模型好坏的标准,但在实际项目中我们却几乎不看这个指标。为什么?因为那不是我们关注的目标。

a) 项目的目标:一定要锁定正确的目标

例如:

欺诈侦测(关注的是正例!)( Shannon 实验室在国际长途电话上的分析):不要试图在一般的通话中把欺诈和非欺诈行为分类出来,重点应放在如何描述正常通话的特征,然后据此发现异常通话行为。

b) 模型的目标:让计算机去做你希望它做的事

大多数研究人员会沉迷于模型的收敛性来尽量降低误差,这样让他们可以获得数学上的美感。但更应该让计算机做的事情应该是如何改善业务,而不是仅仅侧重模型计算上的精度。

4只靠数据来说话( Listen (only) to the Data )

IDMer 让数据说话没有错,关键是还要记得另一句话:兼听则明,偏听则暗!如果数据+工具就可以解决问题的话,还要人做什么呢?

4a. 投机取巧的数据:数据本身只能帮助分析人员找到什么是显著的结果,但它并不能告诉你结果是对还是错。

4b. 经过设计的实验:某些实验设计中掺杂了人为的成分,这样的实验结果也常常不可信。

5 使用了未来的信息( Accept Leaks from the Future )

IDMer :看似不可能,却是实际中很容易犯的错误,特别是你面对成千上万个变量的时候。认真、仔细、有条理是 数据挖掘人员 的基本要求。

预报( Forecast )示例:预报芝加哥银行在某天的利率,使用神经网络建模,模型的准确率达到 95% 。但在模型中却使用了该天的利率作为输入变量。

金融业中的预报示例:使用 3 日的移动平均来预报,但却把移动平均的中点设在今天。

解决方法:

要仔细查看那些让结果表现得异常好的变量,这些变量有可能是不应该使用,或者不应该直接使用的。

给数据加上时间戳,避免被误用。

6 抛弃了不该忽略的案例(Discount Pesky Cases)

IDMer:到底是宁为鸡头,不为凤尾,还是大隐隐于市,小隐隐于野?不同的人生态度可以有同样精彩的人生,不同的数据也可能蕴含同样重要的价值。

异常值可能会导致错误的结果(比如价格中的小数点标错了),但也可能是问题的答案(比如臭氧洞)。所以需要仔细检查这些异常。

研究中最让激动的话语不是啊哈!,而是这就有点奇怪了……”

数据中的不一致性有可能会是解决问题的线索,深挖下去也许可以解决一个大的业务问题。

例如:

在直邮营销中,在对家庭地址的合并和清洗过程中发现的数据不一致,反而可能是新的营销机会。

解决方法:

可视化可以帮助你分析大量的假设是否成立。

7 轻信预测(Extrapolate)

IDMer:依然是辩证法中的观点,事物都是不断发展变化的。

人们常常在经验不多的时候轻易得出一些结论。

即便发现了一些反例,人们也不太愿意放弃原先的想法。

维度咒语:在低维度上的直觉,放在高维度空间中,常常是毫无意义的。

解决方法:

进化论。没有正确的结论,只有越来越准确的结论。

8 试图回答所有问题(Answer Every Inquiry)

IDMer:有点像我爬山时鼓励自己的一句话我不知道什么时候能登上山峰,但我知道爬一步就离终点近一步。

不知道是一种有意义的模型结果。

模型也许无法100%准确回答问题,但至少可以帮我们估计出现某种结果的可能性。

9 随便地进行抽样(Sample Casually)

9a 降低抽样水平。例如,MD直邮公司进行响应预测分析,但发现数据集中的不响应客户占比太高(总共一百万直邮客户,其中超过99%的人未对营销做出响应)。于是建模人员做了如下抽样:把所有响应者放入样本集,然后在所有不响应者中进行系统抽样,即每隔10人抽一个放入样本集,直到样本集达到10万人。但模型居然得出如下规则:凡是居住在KetchikanWrangellWard Cove Alaska的人都会响应营销。这显然是有问题的结论。(问题就出在这种抽样方法上,因为原始数据集已经按照邮政编码排序,上面这三个地区中不响应者未能被抽取到样本集中,故此得出了这种结论)

解决方法:喝前摇一摇!先打乱原始数据集中的顺序,从而保证抽样的随机性。

9b 提高抽样水平。例如,在信用评分中,因为违约客户的占比一般都非常低,所以在建模时常常会人为调高违约客户的占比(比如把这些违约客户的权重提高5)。建模中发现,随着模型越来越复杂,判别违约客户的准确率也越来越高,但对正常客户的误判率也随之升高。(问题出在数据集的划分上。在把原始数据集划分为训练集和测试集时,原始数据集中违约客户的权重已经被提高过了)

解决方法:先进行数据集划分,然后再提高训练集中违约客户的权重。

10 太相信最佳模型(Believe the Best Model)

IDMer:还是那句老话-“没有最好,只有更好!

可解释性并不一定总是必要的。看起来并不完全正确或者可以解释的模型,有时也会有用。

最佳模型中使用的一些变量,会分散人们太多的注意力。(不可解释性有时也是一个优点)

一般来说,很多变量看起来彼此都很相似,而最佳模型的结构看上去也千差万别,无迹可循。但需注意的是,结构上相似并不意味着功能上也相似。

基于数据挖掘的音乐推荐系统设计与实现 需要一个代码说明,不需要论文 采用python语言,django框架,mysql数据库开发 编程环境:pycharm,mysql8.0 系统分为前台+后台模式开发 网站前台: 用户注册, 登录 搜索音乐,音乐欣赏(可以在线进行播放) 用户登陆时选择相关感兴趣的音乐风格 音乐收藏 音乐推荐算法:(重点) 本课题需要大量用户行为(如播放记录、收藏列表)、音乐特征(如音频特征、歌曲元数据)等数据 (1)根据用户之间相似性或关联性,给一个用户推荐与其相似或有关联的其他用户所感兴趣的音乐; (2)根据音乐之间的相似性或关联性,给一个用户推荐与其感兴趣的音乐相似或有关联的其他音乐。 基于用户的推荐和基于物品的推荐 其中基于用户的推荐是基于用户的相似度找出相似相似用户,然后向目标用户推荐其相似用户喜欢的东西(和你类似的人也喜欢**东西); 而基于物品的推荐是基于物品的相似度找出相似的物品做推荐(喜欢该音乐的人还喜欢了**音乐); 管理员 管理员信息管理 注册用户管理,审核 音乐爬虫(爬虫方式爬取网站音乐数据) 音乐信息管理(上传歌曲MP3,以便前台播放) 音乐收藏管理 用户 用户资料修改 我的音乐收藏 完整前后端源码,部署后可正常运行! 环境说明 开发语言:python后端 python版本:3.7 数据库:mysql 5.7+ 数据库工具:Navicat11+ 开发软件:pycharm
MPU6050是一款广泛应用在无人机、机器人和运动设备中的六轴姿态传感器,它集成了三轴陀螺仪和三轴加速度计。这款传感器能够实时监测并提供设备的角速度和线性加速度数据,对于理解物体的动态运动状态至关重要。在Arduino平台上,通过特定的库文件可以方便地与MPU6050进行通信,获取并解析传感器数据。 `MPU6050.cpp`和`MPU6050.h`是Arduino库的关键组成部分。`MPU6050.h`是头文件,包含了定义传感器接口和函数声明。它定义了类`MPU6050`,该类包含了初始化传感器、读取数据等方法。例如,`begin()`函数用于设置传感器的工作模式和I2C地址,`getAcceleration()`和`getGyroscope()`则分别用于获取加速度和角速度数据。 在Arduino项目中,首先需要包含`MPU6050.h`头文件,然后创建`MPU6050`对象,并调用`begin()`函数初始化传感器。之后,可以通过循环调用`getAcceleration()`和`getGyroscope()`来不断更新传感器读数。为了处理这些原始数据,通常还需要进行校准和滤波,以消除噪声和漂移。 I2C通信协议是MPU6050与Arduino交互的基础,它是一种低引脚数的串行通信协议,允许多个设备共享一对数据线。Arduino板上的Wire库提供了I2C通信的底层支持,使得用户无需深入了解通信细节,就能方便地与MPU6050交互。 MPU6050传感器的数据包括加速度(X、Y、Z轴)和角速度(同样为X、Y、Z轴)。加速度数据可以用来计算物体的静态位置和动态运动,而角速度数据则能反映物体转动的速度。结合这两个数据,可以进一步计算出物体的姿态(如角度和角速度变化)。 在嵌入式开发领域,特别是使用STM32微控制器时,也可以找到类似的库来驱动MPU6050。STM32通常具有更强大的处理能力和更多的GPIO口,可以实现更复杂的控制算法。然而,基本的传感器操作流程和数据处理原理与Arduino平台相似。 在实际应用中,除了基本的传感器读取,还可能涉及到温度补偿、低功耗模式设置、DMP(数字运动处理器)功能的利用等高级特性。DMP可以帮助处理传感器数据,实现更高级的运动估计,减轻主控制器的计算负担。 MPU6050是一个强大的六轴传感器,广泛应用于各种需要实时运动追踪的项目中。通过 Arduino 或 STM32 的库文件,开发者可以轻松地与传感器交互,获取并处理数据,实现各种创新应用。博客和其他开源资源是学习和解决问题的重要途径,通过这些资源,开发者可以获得关于MPU6050的详细信息和实践指南
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值