人人都是「砖」家:from sklearn import *

2020-04-07 16:17:53 浏览数 (1)

作者:Lazarou 编译:1 1=6

0

前言

今天是4月1日,我们来聊聊所谓的机器学习、数据科学专家!

现今,似乎稍微学点数据科学的人都称自己是数据科学家。有些人几乎没有或根本没有实践经验,甚至连理论基础都没有。这篇文章不是在说那些认真努力自学和有抱负的数据科学的人。事实上,我们认为这个领域尤其适合这样一群充满热情的人,我们今天diss的是那些上了一门网络课程,然后把自己塑造成专家的人!

1

不在乎数据探索

数据探索是任何机器学习项目的第一步。如果你不花时间去熟悉自己的数据,并充分了解它的特点,那么你就会浪费大量时间。

1.1 未将数据可视化

探索性数据可视化是启动任何数据相关项目的最佳选择。如果你正在应用机器学习,很可能你正在处理大量的高维数据,查看Excel文件或运行一个df.describe()并不是合适的数据可视化替代方法。Francis Anscombe用他著名的四张图来说明数据可视化的重要性:

Anscombe’s Quartet

每个面板中的数据集都具有本质上相同的统计信息:x和y的均值、x和y的样本方差、相关系数、R方和最佳拟合线都几乎相同。如果你不能将你的数据可视化却依赖于统计数据,你可能会认为这四个数据集具有相同的分布,但粗略地看一下就会发现情况显然并非如此。

数据可视化允许你识别数据中的趋势、异常值和分布;如果你跳过这一步,后面的分析等于白做。

1.2 没有清理数据

在将模型投入生产之前解决这个问题是非常关键的。记住:

垃圾进⇒垃圾出

举个例子,人体身高的直方图:

用这些数据训练一个模型无疑会导致糟糕的结果。但是,通过检查数据,我们发现这100个异常值的高度实际上是以米而不是厘米为单位输入的。所以,可以通过将这些值乘以100来进行修正。正确地清理数据不仅可以防止对错误数据进行训练,而且在本例中,我们还可以挽救100个数据点,否则这些数据点可能会被丢弃。

1.3 不需要为特性选择、特性工程而烦恼

神经网络不好的地方是:你可以把所有原始数据扔给它,它会学到一些目标函数的近似值。这的确很方便,但效率低下且易错。最糟糕的是,它让初学数据科学的人依赖于深度学习,而通常情况下,传统的机器学习方法可能更合适。这会让他们慢慢地陷入一种不确定的状态,没有正确的方法来进行特性选择和工程,但是有几个关键的结果需要努力实现:

降维:数据多并不总是件好事。通常,你希望在拟合模型之前减少特征的数量。这通常涉及删除不相关和冗余的数据,或者将多个相关字段合并到一个字段中。

格式化输出数据:你需要将数据转换成模型容易理解的格式:类似于 -1和1之间的数字的神经网络;分类数据应该是一个One-Hot Encoding;序数数据(可能)不应该表示为单个浮点字段;对指数分布的数据进行转换可能是有益的。

创建特定领域的特征:根据数据创建自己的特征通常是很有成效的。如果你有计数数据,可能希望将其转换为相关的二进制阈值字段,例如“≥100”vs“<100”,或“is 0”vs“is not 0”。如果你有连续数据x和z,你可能想要包括字段x²、xz和z²与x和z的特征集。这是一个高度依赖于问题的操作过程,但如果处理得当可以大大改善一些模型性能。

大多数外行人认为:

机器学习就是从原始数据中神奇地得出结果的黑匣子!

请不要助长这种误解。

2

没有选择合适的模型

机器学习是一个有着丰富历史的学科领域,在这段历史的大部分时间里,它其实被称为统计学习。随着易于使用的开源机器学习工具(如Scikit-Learn和TensorFlow)的出现,再加上我们现在收集海量数据的便捷性和无处不在的高性能计算机,尝试不同的机器学习模型从未像现在这样容易。然而,除去那些机器学习从业者的工作需求,大多数机器学习从业者不了解不同类型的模型如何工作,这并不是一个巧合。

有抱负的数据科学家在Github上发布的简历中充斥着Kaggle项目和在线课程学习经历,它们看起来像是这样:

代码语言:javascript复制
from sklearn import *
for m in [SGDClassifier, LogisticRegression, KNeighborsClassifier,
             KMeans, KNeighborsClassifier, RandomForestClassifier]:
    m.overfit(X_train, y_train)

你根本不知道自己做什么!

这是在浪费时间,并且很容易导致不合适的模型被选择,因为它们恰好在验证数据上表现得很好。所使用的模型类型应该基于底层数据和应用程序的需求来选择,并且应该设计数据来匹配所选择的模型。选择模型类型是数据科学过程中的一个重要部分,可能需要对少数几个合适的模型进行直接比较,但是为了找到所谓的“最优结果”而盲目应用所有工具是一个十分危险的信号。特别地,这掩盖了一个根本问题,那就是:

你实际上并不了解不同类型的模型是如何工作的!

说白了就是知其然,也要知其所以然!

这里面更重要的问题不是人们不知道不同的机器学习模型是如何工作的,而是他们不在乎,不关心,同时也对基本的数学毫无兴趣。如果你喜欢机器学习但不喜欢数学,那么你可能并不是真的喜欢机器学习,而是喜欢你感兴趣的那部分。如果你不关心模型是如何工作的或者是否适合数据,那么当它们不可避免地出错时,你就没有能力对这些问题进行检查与排除。

你不知道你是想要准确率还是可解释性,也不知道你为什么要这样选择。

所有类型的模型都有其优点和缺点。在机器学习中,一个重要的权衡是准确率和可解释性之间的权衡。你可以有一个模型,它在预测方面做得很差,但很容易理解,并有效地解释了这个过程;你可以有一个黑匣子,它非常精确,但是它的内部工作原理却是个谜。或者你可以在两者之间找到一个平衡点。

你选择的模型类型应该根据这两个特征中的哪一个对你的项目更重要来决定。如果目的是对数据建模并获得可操作的见解,那么一个可解释的模型,例如决策树或线性回归,是显而易见的选择。如果项目是用于实际工作的,比如图像标注,那么可解释性就会让位于准确率,而随机森林或神经网络可能更合适。

根据经验,那些不理解这种取舍的数据科学家,以及那些甚至没有考虑到可解释性的重要性就直接追求准确率的数据科学家,都很水!

3

没有使用有效的衡量标准

数据科学的“科学”部分往往被忽视。对于装腔作势的数据科学家来说,盲目地在实验环境中应用单一指标作为他们的模型评估并不罕见。不知情的利益相关者很容易被“90%的准确率”所震惊,这种说法在技术上是正确的,但对于当前的任务来说却是极其不恰当的。

3.1 没有建立一个基准模型

我们做了一个胰腺癌检测,准确率超过99%:

如果你看到一个有一条线穿过红圈,那么测试结果是阴性的。如果你看到一个绿色的标记,反之。关键是,99%的人没有胰腺癌(实际上,大多数人是没有的,但是为了这个例子,我们假设99%的人都患有胰腺癌),所以我们这个愚蠢的测试在99%的情况下都是准确的。那么任何用于诊断胰腺癌的机器学习模型都应该至少和这个无用的基准模型一样好。 如果你某些人声称他开发的工具有95% 的准确率,将这些结果与基准模型进行比较,确保他的模型比随机模型表现得更好。

3.2 使用了错误的衡量标准

继续上面的诊断例子,确保使用正确的衡量标准非常重要。对于癌症诊断来说,准确率实际上是一个糟糕的衡量标准;如果降低精度意味着增加灵敏度,那么通常更可取。假阳性的代价是什么?病人的压力,以及浪费的时间和资源。假阴性的代价是什么?死亡……。了解模型的真实含义,并了解这些含义如何控制衡量选择。

3.3 训练/测试模糊不清

这是问题太常见了。正确地测试一个模型对于数据科学过程是必须的。有很多方法可能会出错:不理解验证和测试数据之间的区别……,否则你的工作就是在浪费时间。

4

import tensorflow as tf

如果你刚刚开始在这个领域,可能很难区分Siraj Ravals和Andrew Ngs(吴恩达)。

Siraj Ravals:仅仅在Youtube上,他就有仅70万订阅者,包括DeepMind创始人Demis Hassabis也是他的“粉丝”,简直堪称是机器学习界的“papi酱”。

Siraj Ravals

Siraj称自己的机器学习多靠自学完成。2012年,他从哥伦比亚大学计算机系退学,开始自学AI技术,并且,利用自己学到的内容,全心运营youtube专栏的视频内容。他在推特上称给自己的任务安排为“每周两个视频”,视频密度之大,质量之高,让业内的人纷纷惊叹地称其为“AI魔术师(wizard)”,而他本身“自学成为大师“的经历,也给了很多圈外小白学习的动力。

但位油管网红人设忽然崩塌,被曝出视频中有部分内容搬运自Github和一些论文,Ctrl C、Ctrl V级别的抄袭!

而Andrew Ngs,才是一位真正的学者和布道者!

如果你有被上面的任何一个点所触动,我们很欣慰,因为这意味你希望把事情做的更好!

继续学习,继续努力,这样你就可以diss一群装腔作势的砖家了!

0 人点赞