我如何使用机器学习来检测手机上的聊天截图
Image from Unsplash
有些时候,我们不是告诉朋友我们在某个消息应用程序上的聊天,而是把那次聊天的截图发给他们。如果你发送或接收了大量的截图,那么最终你手机的大部分内存会被封锁。我就是这种情况。在保证重要图像安全的同时找到并删除这些截图是一项极其耗时的任务。然后一个简单的(假设对 ML 有一点了解)想法出现在我的脑海里…
想法
我意识到**从普通图像中检测聊天截图的任务可以表述为一个经典的二值图像分类问题!**我们可以使用卷积神经网络(CNN)来完成这项工作。CNN 的输入层将是一个图像,输出层将只包含一个神经元,告诉我们输入图像是正常图像还是聊天截图。在接下来的章节中,我将介绍构建模型的所有细节。
数据收集
在机器学习中,一切从数据开始。在这个分类问题中,我们有两类:【聊天】和【不聊天】。第一个表示聊天截图,另一个表示普通图片。所以我收集了我和朋友们在不同消息应用上聊天的截图,比如 WhatsApp,Messenger,Instagram 等等。第二节课,我从手机和互联网上收集了一些人物、地点、风景的随机图片。总共我拍了 660 张 图片(每班 330 张 )。请注意,对于许多更难的问题来说,这些数据量是不够的。
列车测试分离
我用 80% 的数据进行训练,剩下的用于测试。为了能够在 Keras 中使用 flow_from_directory 函数,我像这样组织数据…
Folder tree of data
构建模型
每个 CNN 由两个主要部分组成:卷积基和全连接网络。在卷积库中,我使用了两个卷积块,每个包含 32 个 滤波器。内核大小为3 * 3。第一个卷积层的输入尺寸为 64643 (大小为 64 px64 px* 的 RGB 图像)。每个卷积块后面是一个大小为 22* 的 max_pooling 层。Relu 激活功能用于卷积层。卷积模块的输出被展平为一个向量,以将其传递给全连接网络。隐藏层由 128 个 神经元组成。该层的激活功能再次被 Relu。输出层(即最后一层)只包含一个告诉我们结果的神经元。由于这是一个二进制分类问题,我在这一层使用了 sigmoid 函数,该函数输出一个在 0 到 1 之间的数字( p ),表示输入图像属于“聊天”类别的概率(如果 p≤0.5 ,则“聊天”否则“不聊天”)。下面是实现…**
The architecture of the model
输入数据
由于数据是以上面提到的特定方式组织的,现在我们可以使用 Keras 的 ImageDataGenerator 类和 flow_from_directory 方法来扩充并将其提供给模型。首先,创建一个 ImageDataGenerator 对象。在这个对象的帮助下,我使用了缩放,剪切,翻转变换来增加数据。图像应通过系数 1/255.0 进行重新缩放,以标准化像素值。现在,目录路径、class_mode 和 target_size 作为 flow_from_directory 方法的参数传递,这有助于将数据提供给模型。我们必须将这个过程进行两次(一次用于训练数据,另一次用于测试数据)。**这里需要记住的一件重要事情是,只有训练数据需要扩充,而不是测试数据。**这是关于这个的代码…
培养
现在到了模型学习的部分。这里我们需要一个优化器,因为学习只不过是通过更新模型的权重和偏差来优化成本函数。在这种情况下,我选择了 Adam optimizer 。成本函数是二元交叉熵(因为这是二元分类)。Keras 提供了一个名为 fit_generator 的函数,可以用来运行训练。在这里,我们还可以设置历元数、每历元步数和验证步数。由于数据相对较少,因此我使用了 steps_per_epoch =训练样本数和 validation_steps =测试样本数。
结果
仅经过 5 个历元后,模型达到了99%的训练准确率和98%的测试准确率。一旦我们保存了模型,我们就可以多次使用它。为了能够使用该模型预测新图像,我们必须将图像整形为 64643** 并对像素进行归一化。这个脚本为我们做了这项工作。以下是一些预测示例…**
Images from the author’s collection
在这里找到完整的代码。
如果你真的很兴奋
要使用这个模型来分类手机上一个文件夹的所有图像,你只需要遍历这个文件夹,一次传递一个图像给这个模型。类似这样的…
**import glob
for img_file in glob.iglob(“dir_name/*”):
new_image = load_image(img_file)
pred = classifier.predict(new_image)
if pred<.5 : print(“chat”)
else : print(“not chat”)**
还好奇?看一个我最近做的视频…
我希望你喜欢阅读。下次见…学习愉快!
我如何使用统计数据来改善我的都柏林自行车运输
作为都柏林自行车的用户,我很高兴地发现实时自行车数据可以通过爱尔兰国家开放数据项目免费在线获取。不仅如此,一个用户已经收集了几个月的数据,在网上分享了这些数据。都柏林自行车是环游城市的绝佳方式,但像许多城市自行车计划一样,它们经常面临在满站/空站长时间等待的挑战。在繁忙的商业区工作,如果你不走运的话,你会发现自己等了 10 分钟甚至更久。
我决定更深入地研究这些数据,看看我能否回答突然出现在我面前的 3 个特定问题。
- 我的轶事经验与数据相符吗?
- 如果是,这些使用模式的趋势有多强?可以用统计学建模吗?
- 我如何利用这些数据来改善我(和其他人)的用户体验?
但是在我开始之前,让我介绍一下我一直在处理的数据(如果你不喜欢,可以跳过这一段)。Dublin Bikes API 返回城市中每个车站的可用自行车的当前数量。在 6 个月的时间里,每 2 分钟收集并存储一次这些数据,同时还有一个单独的 API 调用来收集同步的天气信息。此外,还有一个静态文件,包含每个站点的位置和容量。与大多数数据集一样,通常的疑点(缺失数据、数据格式等)也存在一些挑战,因此在预处理之后,我得到了连续 36 天近乎完美的都柏林自行车数据。我们可以从这些数据中看到一个典型的工作日,并检查一天中每个车站的需求是如何变化的。
Visualisation of how full each bike station is across a typical weekday. Dublin locals might notice the Heuston train station nodes filling up very quickly in the evening as people cycle to get the train home.
这样一来,让我们看看能否依次解开我的 3 个问题。
我的轶事经验与数据相符吗?
我对都柏林自行车的体验相当不错。它们为市内短途旅行提供了快捷、方便的方法。然而,我偶尔有过这样的经历:在傍晚六点钟,在雨中站在一个空的自行车站,只希望有人来把自行车放下。问题是,每个人似乎都在做同样的旅行:早上,人们从郊区进入市中心,而在晚上,情况正好相反。上面的视觉化似乎同意这一点,但是,为了验证,我决定画出在整个 36 天的每个时间点使用的自行车数量。结果让我有些吃惊!不仅早上/晚上的峰值清晰,而且在工作日之间也非常一致。
Number of bikes being used across the entire city over all 36 days
早高峰出现在 9 点之前,而且似乎总是比晚高峰稍忙一些。周二是一周中最忙的一天,而周五晚上的需求往往较少(大概是因为人们喜欢在周末去喝一杯,而不是赶回家)。我们还可以观察到第三个较小的峰值出现在中午,它与午餐时间密切相关。数据清楚地证实了我对该方案的体验。
这些使用模式的趋势有多强?可以用统计学建模吗?
根据我们在之前的图中已经观察到的模式来判断,这些数据看起来是时间序列建模的理想候选。从用户的角度来看,使用中的自行车数量很有趣,但知道可用自行车的数量更有用,所以我决定将它建模为因变量。
自回归综合移动平均(ARIMA)是时间序列数据建模的一种较为成熟的方法,对于这个问题很有意义。此外,有一个明显的每周季节性需要处理,我想考虑到天气和假期的外生变量。因此,我用 SARIMAX 模型来拟合数据,它表现得相当好。当我从训练集的末尾推断模型预测时,它们与测试集的基本事实非常接近。
A snapshot of the performance of my SARIMAX model predicting the number of available bikes across the city in the coming days
平均绝对百分比误差(MAPE)仅为 2.22,表明该模型表现良好,预测值与真实值的平均差异仅为 2%左右。可以得出这样的结论:城市中自行车的使用可以被非常准确地建模,这为在现实世界的应用中使用这些数据提供了一个很好的机会。
我如何利用这些数据来改善我(和其他人)的用户体验?
基于到目前为止我所讨论的一切,我很高兴看到人们如何使用这些数据来改善他们自己的用户体验。对我来说特别有用的一个想法是实时估计离我最近的车站的等待时间。我决定制作一个简单的原型应用程序(点击这里查看 python 脚本),它具有以下功能:
- 通过公开可用的 API 获取当前都柏林自行车实时数据。
- 将等待时间建模为指数分布,并基于历史数据,估计自行车到达城市中每个空车站的等待时间。
- 调用谷歌距离矩阵 API 来计算从我现在的位置到 100 多个自行车站的步行距离。
- 结合到每个车站的步行距离和在同一个车站的预期等待时间,来估计我跳上实际自行车的总时间。
- 最后,再调用两次 google API 来获取从我当前位置到最近的自行车的方向,并将其作为输出。
当我今天晚上运行脚本时,我的当前位置离我工作的地方很近,它给我提供了到汉诺威码头的步行方向,步行不到 4 分钟,并告诉我在下一辆自行车可用之前,我有 1 分钟的等待时间。
Directions from my current location to nearest available bike in terms of walking time combined with my expected waiting time at the station
事实上,本森街是离我最近的车站,但由于剧本考虑了自行车到达的预期等待时间,所以它把我送到了汉诺威码头,预计那里会更快有自行车可用。那很方便!
My nearest bike stations ordered by which I can walk to and get a bike at soonest
感谢阅读!我很高兴听到任何反馈,因为还有很多可以用这些数据做的事情。关于这篇文章背后我的分析的更多技术细节,请查看 Github 上的。
我如何使用 Python 和开放数据来构建爱丁堡啤酒花园的交互式地图
Summertime — Photo by Tomasz Rynkiewicz on Unsplash
随着夏天终于到来,我想在我的家乡爱丁堡找到一个在户外享受冰镇饮料(含酒精或不含酒精)的好地方。因此,我将一个关于椅子和桌子许可的开放数据集与一些地理编码结合起来,创建了一个爱丁堡户外座位的交互式地图。
背景和项目描述
在过去的几年里,英国政府机构一直致力于开源他们的数据,爱丁堡市议会也不例外。在https://edinburgphopendata . info,你可以找到一个包含公共生活许多方面信息的数据集列表(尽管有些文件确实需要更新)。例如,这个页面包含 2014 年桌椅许可证的详细信息。幸运的是,在这里可以找到最新版本。请注意,虽然这两个文件的文件结构是相同的,但是文件头是不同的,所以如果您想查看历史数据,您需要相应地修改下面的代码。该文件包含允许摆放椅子的场所的名称和地址以及一些附加信息。该文件构成了本项目的基础,分为四个部分:
- 获取并加载许可文件
- 使用 open street map API 获取每个机构的纬度和经度以及服务地址类别
- 清理并装箱服务地址类别
- 用叶子在地图上标出经营场所
事不宜迟,我们开始吧。完整的笔记本可以在我的 GitHub 上找到。
步骤 0:设置
首先,我们导入库。
import pandas as pd
import requests
import wgetimport folium
from folium.plugins import MarkerCluster
步骤 1:获取数据
我们使用 wget 下载文件,并将其读入熊猫数据框。确保设置编码,因为文件包含特殊字符(列表中有很多咖啡馆)。
filename = wget.download("http://www.edinburgh.gov.uk/download/downloads/id/11854/tables_and_chairs_permits.csv")df0 = pd.read_csv(filename, encoding = "ISO-8859-1")
df0.head()
Premises with Table and Chair Permits in Edinburgh
快速浏览一下数据就会发现数据中有几处重复。这主要是由于多个许可的开始和结束日期不同。一种很好的清理方式是按日期过滤,但是坦白地说,我现在不太在乎,所以我只保留服务地址和名称,去掉重复的。(注意:该文件还包含关于表区域的信息,我可能会在将来的某个时候再次访问它)。删除重复项后,我们只剩下 389 行地址和房屋名称。
# dropping duplicate entries
df1 = df0.loc[:, ['Premises Name', 'Premises Address']]
df1 = df1.drop_duplicates()# in 2012: 280
print(df1.shape[0])389
顺便说一句:2014 年夏天,只有 280 个场所有桌椅许可证。露天文化确实正在起飞,这是证明它的数据:)
步骤 2:获取每个前提的纬度和经度
如果我们想在地图上可视化前提,地址是不够的,我们需要 GPS 坐标。有不同的 API,允许您查询地址并将返回纬度和经度(这个过程称为地理编码)。一种可能是使用谷歌地图 API ,但它带有一些警告。 OpenStreetMap API 提供了相同的功能,但是可以免费使用,而且结果对我的目的来说足够好了。
我们使用 Pandas map 函数来获取每一行的 API 响应。查询完 API 后,我们删除所有没有得到响应的行。再说一次,我不太担心我失去的几个前提(大约 20 个),还有很多。
查看响应中的 JSON 字段,我们发现除了坐标之外,API 还返回一个名为“type”的字段,其中包含该地址的房屋类型。我将这些信息与坐标一起添加到数据框中。
# extract relevant fields from API response (json format)
df2['lat'] = df2['json'].map(lambda x: x[0]['lat'])
df2['lon'] = df2['json'].map(lambda x: x[0]['lon'])
df2['type'] = df2['json'].map(lambda x: x[0]['type'])
最常见的场所类型是咖啡馆、酒吧、餐馆、第三产业和住宅:
df2.type.value_counts()[:5]cafe 84
pub 69
restaurant 66
tertiary 33
house 27
Name: type, dtype: int64
步骤 3:分配服务地址类别
我最感兴趣的是区分两种类型的场所:一种是卖咖啡的,更可能在白天营业(如咖啡店和面包店),另一种是卖啤酒的,更可能在晚上营业(如酒吧和餐馆)。因此,我想把我的前提分为三类:
- 第一类:日间场所(咖啡店、面包店、熟食店、冰激凌店)
- 第二类:酒吧、餐馆、快餐店和酒吧
- 第 3 类:其他一切
为此,我有两个信息来源:由 OpenStreetMap 返回的场所名称和类型。查看数据,我们发现类型是一个很好的第一指标,但许多地方的标签不正确或根本没有。因此,我采用了两步方法:I)根据 OpenStreetMap 类型分配类别 ii)使用其名称清理数据,此步骤覆盖了步骤 I)。为了清理数据,如果服务地址名称包含某些关键元素(如咖啡店的“cafe”、“coffee”或类似元素,以及餐馆和酒吧的“restaurant”、“inn”或类似元素),我决定否决 OpenStreetMap 分类。例如,这将安达卢西亚咖啡馆错误地归类为咖啡店,但在大多数情况下效果还不错。特别是,它似乎基本上保持了分类为咖啡店的模式,这些地方可能在白天营业,所以它符合我的目的。当然,对于少于 400 个条目,可以手动浏览列表,并为每个条目分配正确的类别。然而,我对创建一个过程感兴趣,它可以很容易地转移到其他地方,因此专门为爱丁堡的风景量身定制的人工干预是不合适的。
步骤 3a:根据 OpenStreetMap 类型分配服务地址类别
步骤 3b:根据服务地址名称覆盖类别
快速检查表明,重新分配似乎是合理的:
# show some differences between classification by name
# and by type returned by the API
df2.loc[(df2.is_coffeeshop) & (df2.type != 'cafe'), ['Premises Name', 'type']].head(10)
我为标记为餐馆或咖啡店的场所重新分配了类别。如果服务地址被标记为两者,则咖啡店类别优先:
# reset category if flagged as restaurant or coffee-shop through name
df2.loc[df2.is_restaurant, 'category'] = 2
df2.loc[df2.is_coffeeshop, 'category'] = 1
第四步:视觉化
最后,我们使用 Python 的 lyum 包将结果可视化为地图上的标记。如果在同一区域中有太多的符号,将单个点添加到标记群集允许我们将符号汇总成组。为每个类别创建单独的簇允许我们使用 LayerControl 选项来单独切换每个类别。我们使用“fa”前缀来使用字体-awesome(而不是标准的 glyphicon)符号。由于 follow 地图本身不在介质上显示,下图显示了地图的静态版本。可以看这里的互动地图。
A static version of the beer garden map — Find the dynamic version in the original post here
补充步骤 5:将地图保存到 png
如果不能在这里嵌入地图的动态版本,我至少想在这篇文章中嵌入一个静态版本。我发现最好的方法(不仅仅是手动截图)是以 HTML 格式保存地图,然后使用 Selenium 保存 HTML 的截图。下面展示了如何做到这一点(硒部分归功于这篇 stackoverflow 帖子)。
注意:为了让它工作,你需要安装 geckodriver。从这里下载文件,放入/usr/bin/local(对于 Linux 机器)。
摘要
在这篇文章中,我们从爱丁堡委员会下载了一个包含桌椅许可的开放数据集。然后,我们使用 Open Street Map API 根据地址获取房屋的类型和 GPS 位置。在根据场所名称进行了一些额外的数据清理之后,我们将场所分成了“咖啡店”、“酒吧/餐馆”和“其他”三个类别,并将其绘制在一个交互式地图上,我们以 HTML 格式保存了该地图。
结论
我们现在有一个工作的啤酒花园和爱丁堡的露天咖啡店地图,可以坐在外面喝着美味的冰咖啡或冰啤酒享受夏天。我已经利用了它,这是我在地图上的一个前提下享受下班后的饮料- Prost!😃
原载于https://walken ho . github . io。
我是如何使用 Python 和 R 来分析和预测医疗预约的!
一个 R 和 Python 共存的世界
Photo by NEW DATA SERVICES on Unsplash
在过去的几年里,我已经熟悉了 Python,我真的很欣赏我可以用它来做的数据科学过程的广度。我发现 Python 使用起来非常简单,而且有了今天可用的许多库,我几乎可以做任何事情,从 web 抓取到开发深度学习模型。我从 Python 开始,因为我认识的每个人都在使用它,他们说这是正确的选择。
然而,我最近开始使用 R,因为我的一个项目需要使用ggplot
和leaflet
来开发交互式可视化。我的方法很简单——实用而非理论。所以,我开始学习一门关于 R 的课程,我真的很想理解 R 是什么,并且开始摆弄那个项目已经存在的代码。我喜欢它!我们也可以用 R 做很多事情,它对于统计来说非常有用,因为它非常简单,而且它有各种各样的内置函数。
所以,我开始思考,如果我能同时使用 Python 和 R 来创建可行的解决方案会怎么样。在本文中,我将首先讨论 R 和 Python,以及这些天的趋势如何,然后我如何使用这两种语言来预测人们是否会去赴约,准确率为 88%。在完成自己的代码后,我还参考了一些在线 Kaggle 内核,发现了一些非常有用的见解。
下面提供了该存储库:
[## kb22/医疗预约失约预测
此时您不能执行该操作。您已使用另一个标签页或窗口登录。您已在另一个选项卡中注销,或者…
github.com](https://github.com/kb22/Medical-Appointment-No-Show-Prediction)
如果你想在 R 上一门课,这是我正在上的一门课。您可以使用以下链接获得特别折扣:
通过我们的 R 编程教程学习 R 语言基础。r 编程语言允许开发人员使用…
bit.ly](http://bit.ly/2mqwHMe)
当我开始学习 Python 时,我开始学习 Python 的以下课程(Udemy 通常也会对该课程打折):
[## 完整的 Python 训练营:学习 Python 编程和代码
这是 Udemy 上最全面、最直接的 Python 编程语言课程!你是否…
www.udemy.com](https://www.udemy.com/course/complete-python-bootcamp/)
R vs Python
古老的争论仍在继续,有些人可能更喜欢 R,而有些人可能更喜欢 Python,这完全是你自己的选择。然而,由于我现在同时使用两种语言,我可以更好地告诉大家这两种语言都很棒。
r 带来了内置的统计函数,在绘制图形方面,它比不上令人惊叹的ggplot
库。Python 有很好的机器和深度学习库,更容易使用。
Source: Google Trends
看看 Google Trends 在过去 12 个月里追踪的搜索次数,R 和 Python 在全球范围内都得到了广泛的搜索。根据 TIOBE Index,虽然趋势显示 R 语言的搜索越来越多,但 Python 远远领先于 R 语言,如下图所示:
Source: TIOBE Index
这些数字表明,虽然 Python 在今天更受欢迎,但来自 Google 的搜索结果表明,很多搜索结果往往更偏向于 R 而不是 Python。因此,两种语言技能的良好结合不仅能让你为今天的挑战做好准备,还能让你为未来做好准备。
现在,让我们看看如何使用这两种语言!
使用 R 的探索性数据分析
导入包
你可以使用install.packages()
下载 R 中的包,然后使用library()
将它们导入笔记本.Rmd
文件。我使用ggplot2
来处理图形,gridExtra
来处理图形的网格,lubridate
来处理日期。
导入数据集
我从 Kaggle 获取了关于各种医疗预约以及病人是否出现的数据集。它有 13 个特征和 1 个目标变量。功能read.csv()
允许导入数据集。
Dataset (First half)
Dataset (Second half)
数据集探索
让我们首先来看看行数和列数以及这些列的名称。函数nrow()
返回行数,ncol()
返回列数,names()
返回列名列表。paste()
方法将不同的字符串组合成一个字符串。
数据集有 110527 行和 14 列。目标变量是No.show
并且是否定形式,所以我想把它改成可读性更好的形式。当我将No.show
更改为Showed_up
时,我还必须将列值从No
反转为TRUE
并将Yes
反转为FALSE
。
我们有 13 个特性,让我们进一步探索它们:
- “PatientId”:它是每个患者的唯一标识符,但对任何预测都没有用。
- " AppointmentId:它是每个约会的唯一标识符。
- “性别”:这个人是用 F 表示的女性还是用 m 表示的男性。
- “预定日期”:安排约会的日期。
- “约会日”:约会的当天。
- “年龄”:人的年龄。
- “邻居”:该人所属的邻居。
- “奖学金”:这个人是否有奖学金(定义维基百科)。
- “高血压”:人是否有高血压。
- “糖尿病”:人是否有糖尿病。
- “酒精中毒”:此人是否酗酒。
- “Handcap”:该人是否有身体残疾。
- “SMS_received”:此人是否收到了关于约会的短信。
目标变量是:
- “Showed_up”:描述此人是否赴约。
接下来,让我们看看数据集的摘要。
Dataset summary
仔细观察数据集可以发现,像Alcoholism
、Handcap
等特征。它们被认为是连续值,而不是分类变量。这些日期不被认为是日期,Age
的最小值是-1
,这是错误数据,所以我将删除这些行。
形象化
目标阶层
让我们看看有多少人来赴约,有多少人没来。我将使用ggplot
,它将参数作为数据集,然后是aes()
中的 x 值。geom_bar()
定义我们想要一个条形图,每个条形图的填充颜色为白色,橙色定义为color
橙色,每个条形图的width
定义为0.4
。标题是用ggtitle()
定义的,我用labs()
定义了 x 和 y 轴标签。
Target class distribution
与没来的人相比,来赴约的人更多。我们肯定需要努力确保模型不会出现偏差。
性别分布 让我们看看数据集中是否存在男性和女性之间的分布。我将创建一个条形图,并将列值重命名为F
的Female
和M
的Male
。就像上面的条形图一样,我使用了所有的函数,并用scale_x_discrete
重命名了 x 标签。
Gender distribution
与男性相比,有更多的女性安排了约会。
二进制类分布
由于有许多使用TRUE
和FALSE
定义的二进制类,我将根据目标类文件颜色来绘制它们。aes()
函数接受参数fill
,这基本上让我们基于另一个类绘制给定的数据,在我们的例子中,是目标变量。函数grid.arrange()
帮助我们绘制一系列的行列图形。参数ncol = 2
声明基于我想要的绘图数量,我想要 2 列和 2 行。
Binary class distribution
所有图显示,对于任一布尔值,目标类之间的分布几乎是恒定的。数据分布相当均匀。
预约和预约日期的区别 我注意到,某人预约的时间和实际预约的日期之间的区别可能也很有用。因此,我决定在数据集中创建一个新列Date.diff
,它基本上是两天之间的差异。由于区别在于天数,所以我用as.numeric(unlist(date.diff))
将其解列后转换成数值。
Date diff between schedule and appointment day
该图显示,有许多约会与预定日期同一天。让我们移开那个巨大的钉子,看看我们是否能找到除它之外的任何东西。所以,在上面的剧情中,我会加xlim(1,200)
从 1 开始。
Date diff between schedule and appointment day (≥ 1 day)
请注意,随着天数差异的增加,约会的数量会减少。相差 50 天以上的预约真的少了。似乎没有相关性,因为 50 天之前的计数上升和下降没有任何模式。
约会时间设置 约会的时间或月份也可能影响某人是否出现在约会中。所以,让我们创建数据,看看是否有这样的影响。虽然小时数据很有用,但我注意到每个约会的小时信息都是相同的,所以我们不能使用它。让我们只处理月数据。
使用month
函数,我能够从AppointmentDay
中检索月份。然后,我用它画了一个柱状图。
Monthly distribution of appointments
四月的约会很少,而五月的约会最多。
prop.table()
导致基于边距的对称分布。正如我们从数据中看到的,月份对演出几乎没有影响,因为虚假和真实的比例几乎相同。因此,我们可以删除列本身。
我们可以使用subset()
方法检索数据集的子集,然后通过将参数select
定义为-Month
,我们选择除了月份之外的所有内容。
街区 当我们放眼望去,也有许多不同的街区。让我们用条形图来研究一下它们。
Neighborhoods in the dataset
邻里数据变化很大。Jabour
有非常多的预约,但有些社区的预约少于 10 次。我们应该保留数据,但我们将在模型训练期间创建虚拟变量来容纳该列中的每个值。
年龄
最后,让我们看看年龄变化是如何在数据集中发生的。我们已经移除了数据集中的异常值。我现在将为目标变量中的两个类使用两个相互重叠的散点图。
我首先选择带有Showed_up
的记录作为TRUE
,然后使用table
和as.data.frame
创建一个名为age.show
的频率表。我同样为Showed_up
创建数据帧age.no_show
为FALSE
。使用两次geom_point
,我创建了两个重叠的散点图。
Age count and showed up status
该图显示,约会的次数随年龄变化很大。最大预约是给婴儿的。在 50 岁左右有一个下降然后一个峰值。最后,随着年龄的增长,预约的人越来越少。因此,年龄也可能对目标变量有影响。
现在我们对数据集有了一个相当好的想法,让我们以修改后的形式保存它,然后使用 Python 库进行预测。我将使用write.csv()
将数据集保存到文件dataset_modified.csv
。row.names
as FALSE
确保不保存行索引。
使用 Python 进行分类
在进行适当的数据工程以进行分类之后,我将开发一个人工神经网络来对给定的数据进行训练。
导入库
我将导入必要的库,包括用于 csv 的pandas
、用于数据处理的sklearn
和用于创建人工神经网络的keras
& tensorflow
。
导入数据集
我将使用函数read_csv()
来导入数据集文件dataset_modified.csv
。然后我将使用head()
方法来查看前 5 行。
Dataset (Modified) — Part 2
Dataset (Modified) — Part 2
数据工程
在数据集可以实际使用之前,我将执行许多数据工程步骤。
失约 Kaggle 总是教会我很多东西。即使在我决定做了这么多步骤之后,我还是发现了另一个非常有用的步骤。受到这个 Kaggle 内核的极大启发,我决定看看如果有人之前在目标上错过了一次约会的效果。
正如我们所见,相关值非常高(~0.61),因此它将是目标变量分类的一个重要因素。
删除多余的列 ,因为列PatientId
、AppointmentID
、ScheduleDay
和AppointmentDay
不会直接影响目标变量,所以我用drop()
删除它们。
虚拟列 我将把列Neighbourhood
转换成一组虚拟列。我将使用drop()
删除原始列,然后使用get_dummies()
创建使用concat()
添加到原始数据集中的列。
映射列 我们知道Gender
列被分类为F
或M
,我将使用映射函数将它们转换为 ANN 可以理解的数值。
分割测试训练数据 下一步是分割特征和列,然后使用train_test_split()
创建 33%的测试数据和 67%的训练数据。
最终训练数据总共有 91 列。
缩放数据 神经网络最适合缩放数据,因此,我将使用StandardScaler()
来缩放数据,并将其用于训练神经网络。当使用X_train
时,我们使用fit_transform
,因为它确保它符合那些值并且也转换它。对于X_test
,我们只使用transform
,因为它确保了定标器函数使用来自 X_train 的知识来转换测试数据。
模型生成
数据集已经可以使用了,所以我现在将使用Sequence()
方法创建人工神经网络。我添加四个密集层,分别有 512、1024、2048 和 1 个神经元。我还确保在每一层之后包含Dropout()
,这样神经网络就不会过度适应数据。对于第一个密集层,我们还需要指定input_dim
,它等于我们数据中的列数(91)。
我们的网络有 2,673,665 个不同的参数需要训练。
我现在将使用 0.1 的验证分割来训练模型,这意味着从训练数据中的所有数据来看,模型将对 90%的数据进行训练,并对 10%的数据进行学习测试。
模型预测法
我现在将在测试数据上测试模型,并输出混淆矩阵和准确性。
虽然该模型达到了大约 88%的准确率,但是混淆矩阵表明该模型能够正确地预测某人何时会出现在约会中,但是大约有 50%的人不会出现。
我们可以通过探索更多的数据特征和进行数据工程以确定其他因素来进一步改进该模型。但是现在,88%对于这个模型来说已经足够准确了。
结论
在本文中,我们使用人工神经网络和使用 R 和 Python 的数据探索来开发涉及两种语言的数据工作流。
如果你有任何想法或主意,请分享。还有,你可以在 LinkedIn 上和我联系。如果您喜欢这篇文章,您可能也会喜欢:
[## Google Colab——您在云上的 Python 工作空间
了解 Google Colab
towardsdatascience.com](/google-colab-your-python-workspace-on-cloud-c3aed424de0d) [## seaborn——让绘图变得有趣
Python 中的 Seaborn 库简介
towardsdatascience.com](/seaborn-lets-make-plotting-fun-4951b89a0c07) [## 通过预测游客购买意向学习人工神经网络
使用 Keras 和 Tensorflow 构建人工神经网络
towardsdatascience.com](/learning-artificial-neural-networks-by-predicting-visitor-purchase-intention-724ba2be7c29) [## 在 Kaggle 上使用 CNN 进行深度学习以识别疟疾细胞
医学领域的深度学习
towardsdatascience.com](/deep-learning-to-identify-malaria-cells-using-cnn-on-kaggle-b9a987f55ea5)
我如何使用迁移学习和集成学习在 Kaggle 竞赛中获得 90%的准确率
图像分类是一项经典的机器学习任务,自深度神经网络诞生以来,它一直是机器学习研究的关键驱动因素。本文将指导您使用迁移学习和集成方法轻松解决这个问题。
Photo by Blake Connally on Unsplash
1.介绍
在这个比赛中,我要对不同车辆类型的图像进行分类,包括汽车、自行车、货车、救护车等。(共 17 类)。竞赛的数据包括带有类别标签的训练数据和不带标签的测试数据。任务是预测测试数据的秘密标签。你可以在这里找到并下载数据集。
2.迁移学习
迁移学习是机器学习中的一个研究问题,它专注于存储在解决一个问题时获得的知识,并将其应用于不同但相关的问题。[1]
在计算机视觉中,迁移学习通常用预先训练好的模型来表示。预训练模型是由其他人创建的用于解决类似问题的模型。可以使用预先训练的模型作为起点,而不是从头开始构建模型。我在比赛中选择使用的型号有 InceptionV3 、 MobilenetV2、和 Densenet201 。
3.预训练模型
这是一个如何将预训练模型应用于您的问题的示例。
一些注意事项:
- Include-top :是否包含网络顶部的全连通层。您应该在这里设置 False 来自己修改网络。
- globalaveragepool2d:在空间维度上应用平均池。这里,我在基本模型的最后一个输出层应用了平均池操作。
- *类别交叉熵损失:*用于单标签分类的损失函数。一个图像只能属于一个类。
- *Adel ta optimizer:*Adagrad 的一个更健壮的扩展,它基于梯度更新的移动窗口来调整学习速率,而不是累积所有过去的梯度。
- Model.summary: 获取模型的摘要
您也可以对其他模型使用相同的代码概念。在比赛中,我只对其他车型做了小调整。(InceptionV3 和 Densenet201)。
4.准备数据
我们必须将训练数据分成两个文件夹:训练和测试。每个文件夹包含以类别命名的子文件夹,每个子文件夹包含属于该类别的图像。
以下是如何做到这一点的示例:
之后,为了增加数据量并避免过度拟合,我使用 ImageDataGenerator 对训练数据进行了扩充。它将获取原始图像,对其进行随机转换,并返回新的随机转换图像。然后,我为 fit_generator 函数(稍后使用)创建了训练和测试生成器,以便在训练期间动态生成数据。
5.培养
在 Keras 中,使用 fit() 对于可以加载到内存中的较小数据集来说很好。但是在这里,我们的数据集太大了,所以使用 fit() 是不实际的。解决方法是使用 fit_generator() ,它可以在训练期间将图像加载到内存中。
一些注意事项:
- 根据您电脑的内存,您可能想要更改批处理大小。
- 您可能还希望在培训中添加检查点以进行备份,以防培训过程出现问题。
在训练每个模型大约 80 个时期后,下面是每个模型的准确度分数:
- InceptionV3:训练准确率:93.76 %,验证准确率:92.30 %,Kaggle 评分:89.2%
- MobilenetV2:训练准确率:88.25 %,验证准确率:92.30 %,Kaggle 评分:85.6%
- Densenet201:训练准确率:92.3 %,验证准确率:90.3 %
6.集成学习
集成学习是训练多个模型而不是单个模型,并组合来自这些模型的预测。这减少了预测的方差并减少了泛化错误。结果是预测这比任何单一的模型都要好。[2]想要更多的动力,你可以看看 ILSVRC2015 的结果,看到比赛的 12 强使用了多种模式的组合,而不是只有一种。
如何实现集成学习:
集成学习结果: 91.1% Kaggle 评分。
以下是一些预测图像:
Truck image
Tank image
7.摘要
要找到我在这个项目中使用的完整代码,你可以去这个链接。
我希望你在这篇文章中找到一些有用的东西,可以用在你的深度学习和计算机视觉项目中。这是一个有趣和令人兴奋的领域,每个人每天都在尝试新的想法和技术。
我很乐意帮助你,所以如果你有任何问题或改进的想法,请告诉我。
8.参考
- 韦斯特,杰里米;文图拉,丹;肖恩·沃尼克(2007 年)。“春季研究报告:归纳转移的理论基础”。杨百翰大学物理和数学科学学院
- https://machine learning mastery . com/ensemble-methods-for-deep-learning-neural-networks/
我个人关于从艺术到科技转变的故事
参加编码训练营的案例
杰西·鲁伊斯
Video on the same topic on Quita youtube channel by author
在大约一年半的时间里(包括自学),我从一名艺术副教授(加上兼职)的收入约 28000 英镑,变成了一名开发人员的收入约 70000 英镑。
我将讨论我的背景和你能实现类似职业转变的可能性。总的来说,我强烈推荐编码训练营进入科技行业。尤其是对于有其他行业工作经验的人来说。但是这是一项艰巨的任务,没有充分的准备和计划是不能参加的。
在这篇文章中,我将重点讨论我为什么以及如何转行。我写过其他文章,讨论我在参加数据科学训练营之前完成的在线课程,以及我参加的训练营的回顾。关于这些文章和其他文章,请参考我的博客。
简而言之,我赶时髦的原因是因为我在经济上依赖于我的父母,并且没有足够的收入独立生活。从这个意义上说,我是一个典型的有创造力的千禧一代。我有几个有声望的(没用?)艺术和哲学学位。然而,在完成研究生学位的几年后,我发现自己破产了,在经济上损失惨重。
从 2017 年开始,我作为兼职教授教了几年美术,但这是零星的临时工作,没有任何福利或工作保障。因此,在我教书并和母亲住在一起的时候,我开始研究职业,进行性格和优势测试,并创建清单。
互联网告诉我,我会成为一名优秀的会计师或软件工程师。后来,我不知何故发现了数据科学,在深入阅读了该领域后,我知道这对我的个性和优势有好处。所以我的第一条建议是了解你的优势、劣势、性格特征,以及它们如何最适合潜在的职业。
既然我知道我想做什么,我需要解决如何做的问题。我想过回学校再拿一个学士或硕士学位。但是后来我了解了训练营,我确信这是我最好的选择,因为它们比传统的学校教育要快。我的第二条建议是考虑你所有的自我教育选择。训练营是找到工作的最快途径。
传统教育体系的衰落不应该被低估。在我接受高等教育期间,虽然由于我的特权,我受到了很好的照顾,但我没有接受任何特定职业的培训或指导。我的父母在经济上支持我,虽然他们想让我成为一名律师,但他们支持我以美术为职业的决定。
我的高等教育教会了我机智、良好的学习习惯、逆境和努力工作。我没有参加任何实习。我确实在工作,研究工作,渴望做一些有创造性和知识性的事情。但坦白地说,我非常沮丧,在大学的大部分时间里都在挣扎。最终,我对自己的了解超过了对职业和现实世界的了解。
因此,我对训练营的信念源于对其功效的赞赏,但我也承认传统高等教育的目的和优势。训练营是专门为学生就业而设计的,而高等教育促进个人发展和智力(对大多数人来说)。
回到进入科技行业,我之所以能够在这么短的时间内找到数据科学领域的工作,是因为我参加了训练营,也是因为我事先进行了自学。如果我没有读完本科/研究生和自学,我怀疑我在新兵训练营会如此成功。我在数学和逻辑方面的优势帮助我理解了密集的统计数据和机器学习算法。
训练营最大的挑战是课程的速度和强度以及毕业后脆弱的求职期。没有人告诉你找工作是最难的部分,因为这是一场心理斗争,会产生自我怀疑、竞争和不确定性。我的第三条建议是,如果你参加训练营,确保你找到一个有很棒的职业咨询团队的训练营,他们会指导你完成整个过程。
最终,训练营的建立是因为对熟练工人的大量需求和你所接受的培训的高度重视。所以如果你正在考虑参加一个,请认真考虑,并找到经历过的人来讨论你的问题。
我希望这篇文章能对那些积极寻求在技术领域发展或开始职业生涯的人有所帮助。如果您有任何问题,请联系我们!
我如何从自动化工程师变成数据科学家
从我进入数据科学和机器学习世界的旅程中得到的建议和教训。
Photo by Allie Smith on Unsplash
在这篇文章中,我想分享一些我在 2.5 年的职业转换旅程中所学到的有价值的见解,希望它能帮助任何正在考虑职业转换的读者。
对我来说,这种转变是从软件工程师到数据科学家,但我相信大多数这些见解适用于任何类型的职业转变。
所以现在开始…
首先,找到你的激情!
“追寻你的激情,其他一切都会水到渠成。这不是浪漫。这是实用主义的最高境界。”~加贝·吉福兹
我并不总是知道我想成为一名数据科学家。其实在 PayPal 开始工作之前,我并没有考虑过职业规划。从这个意义上说,公司内部的一位导师给了我很大帮助,他鼓励我问自己正确的问题,并推动我掌控自己的职业道路。
所以,我想我的第一个建议是花点时间思考一些事情,比如:
你的动力是什么?你最喜欢你工作的哪些方面?你最不喜欢哪方面?你认为自己在 1/3/5 年后会怎样?
如果你能在这个自我发现的过程中找到一个导师陪伴你,那就更好了。
婴儿学步
“朝着正确的方向迈出许多小步,总比大步向前却跌跌撞撞地后退好”~中国的一句古老谚语
好吧,让我们假设这个发现过程让你意识到你想改变职业。
接下来你需要明白的是这种变化不会在一夜之间发生。这是一个由许多小步骤组成的过程。对我来说,这个转变花了两年多的时间。
让我们从头开始(最好的起点:)。当我开始在 PayPal 的安全产品中心担任自动化工程师时,我第一次接触到了数据科学和机器学习的世界。我们有一个非常强大的机器学习团队,刚刚开始进行每周一次的阅读小组会议。在每次会议中,一名团队成员将提交一篇与其当前项目相关或他们个人感兴趣的论文,并开展讨论。起初,我以“只听”的方式参加这些会议。一次又一次,我慢慢地开始掌握越来越多的概念。几个月后,我被要求提交一篇论文。我发现了一篇我觉得很有趣的论文,并把它给 ML 团队的领导大卫看。由于论文作者发表了他们的代码,David 建议我应该尝试复制他们的结果。我很快意识到这不是一个简单的任务,因为代码并不完整,也没有很好的文档记录,但这对我来说是一次很好的学习经历。这是我第一次体验机器学习代码,我有机会了解许多基本概念(例如,反向传播)是如何实现的。这次经历教给我的另一个重要的教训是,学术研究中可重复性的重要性,仅仅因为论文中写的东西并不自动意味着它是真实的。
我迈出的下一小步是自愿做一个关于强化学习的内部介绍性演讲。不是因为我当时对强化学习有所了解,只是觉得它很有意思( AlphaGo Zero 差不多同时发布)。我相信没有比教更好的学习方法了,所以这是我了解这个话题的绝佳机会。
要坚持!
“成功是日复一日的微小努力的总和。”~路易·萨查尔
在这一点上,我已经意识到这是我想追求的道路,所以我开始进入自我学习的高速档。这包括参加吴恩达令人惊叹的机器学习课程,然后是 deeplearning.ai 的深度学习专业化,阅读博客帖子和论文,在 Twitter 和 LinkedIn 上关注有影响力的研究人员和实践者,订阅机器学习和深度学习 DL,参加相关会议,甚至在打扫房间时听 ML 播客。
我决心尽我所能让自己处于这样一个位置,当机会出现时,我会做好准备。每天晚上,一旦我的孩子睡着了,我就会打开我的笔记本电脑学习(特别感谢我那了不起的妻子,她在这段时间里一直陪着我:)。这成了我大约两年的例行公事。
但这还不够。要改变职业生涯,最好得到经理的支持。这就引出了我的下一个观点。
明确你的职业抱负!
“如果你提出要求,世界会在你的职业生涯中与你共谋”~ Sri Shivananda (PayPal 首席技术官)
我很幸运能在一家高度鼓励个人成长和个人发展的公司工作。这不是想当然的事情。即使这同样适用于你,也不要假设你周围的人会猜测你的野心是什么,事情会神奇地自己发生。你必须给别人帮助你的机会。一旦你周围的人意识到你的渴望,机会很可能会出现。
拥抱每一个机会!
尤其是当你觉得这是一个挑战,而你还没有准备好的时候。这些正是最能帮助你成长的经历。
“如果有人给你提供了一个绝佳的机会,但你不确定自己能做到,那就答应吧——然后再学习如何去做!”~理查德·布兰森
我很幸运地得到了我的经理的支持以及当时机器学习团队领导的鼓励和指导,这使我在作为自动化工程师的日常工作之外,还与团队一起参与了几个项目。例如,作为 BGU 和贝宝安全产品中心合作的一部分,我有机会参与一个研究项目。这个项目属于人工智能规划的领域。我参与了实证实验,甚至与人合著了一篇论文。
在那段时间里,我的另一个有意义的经历是在项目为期 5 周的实习项目阶段指导一组 4 名以色列技术挑战研究员。该项目旨在使用机器学习来静态分析网络流量,并确定流量的来源(物理机、虚拟机或 Docker 容器)。我们得到了相当好的结果,甚至基于这个想法提交了一个专利。
如果我没有让我的经理们知道我的雄心壮志,我就没有机会获得这些惊人的机会!
做体力工作
“知道是不够的;我们必须申请。愿意是不够的;我们必须这样做。”~约翰·沃尔夫冈·冯·歌德
一旦你觉得自己掌握了基本知识,你应该获得尽可能多的实践经验。真正的专业知识是通过实践获得的。每当你学习一个新概念的时候,试着真正地“弄脏你的手”,摆弄一些代码。 Kaggle 是一个获得实践经验的绝佳平台,我强烈推荐。对于那些不知道的人来说,Kaggle 是一个由数据科学家和机器学习者组成的非常活跃的在线社区,归谷歌所有。社区非常支持这个领域的新成员。
在获得实践经验方面大有帮助的一个小技巧是找一个犯罪伙伴——一个对这个主题同样(或至少有点)有热情的人,可以陪你走过你的学习旅程。一旦你们一起决定了学习目标或里程碑,你们都不太可能偷工减料或决定跳过学习经历的实践方面。万一你遇到问题,有人给你出主意或向你咨询也总是有帮助的。
对我来说,那个人是我的同事和朋友,他已经是另一个团队的数据科学家和安全研究员。下班后我们开始参加 Kaggle 比赛。
起初,我们处理过去的比赛,几个月后过渡到现场比赛。我们在前 5 场现场比赛中获得了 3 枚奖牌(2 枚铜牌和 1 枚银牌),这表明你不应该害怕投入并开始练习你新学到的技能。Kaggle 的好处是在各个领域有各种各样的比赛,这意味着你总能找到你感兴趣的比赛或与你当前工作相关的比赛,这样你就可以利用领域专业知识,帮助你走在队伍的前面。
不要等待完美的时刻!
“如果我们等到准备好了,那我们就要等一辈子了。”~丹尼尔·汉德勒,假电梯
总会有更多的东西要学。不要等到你觉得已经准备好转变的那一刻,因为那个时刻可能永远不会到来。总会有新的算法需要学习,新的 MOOCs 需要学习,新的图书馆需要了解,更多的技能需要掌握。我们生活在一个技术不断变化和发展的时代,天生的好奇心和自学能力比任何具体技能都更重要。
帮助我实现这一点的是我的导师,他在我们的一次会面中简单地问我:“你在等什么?是什么阻碍了你申请数据科学职位?”。他是对的。那时,我已经集中学习了大约 2 年,并且有足够的实践经验来应对任何技术面试。我决定接受他的建议,开始对数据科学职位进行内部面试(在我的经理的支持下)。
不久之后,我加入了我现在的团队,成为一名数据科学家和安全研究员!
Photo by Hello I’m Nik 🇬🇧 on Unsplash
一些结束语
- 这个建议是基于我的个人经验。这些是对我有用的东西。谈到职业转换,没有对错之分,我相信每个人都应该尝试并找到自己的道路。
- 人们普遍认为,当你做出重大职业改变时,你基本上是从零开始。我不相信这是真的。你可能正在进入一个新的领域,但这并不意味着你过去的所有经历都变得无关紧要。我的软件工程背景使我精通编写模块化和可重用的代码、版本控制和持续集成。我的软件自动化经验也极大地帮助了我的日常工作,并为我提供了一个独特的视角,这是一个“传统培训”的数据科学家可能会缺少的。例如,我非常热衷于将“传统”软件开发中固有的相同质量标准应用到机器学习领域(单元测试、数据验证等)…).我甚至在 PyconIL 做了一个关于它的演讲。所有这些都是说你应该意识到你的优势以及你带来的独特视角和能力。多元化的团队才是更强的团队!
这就是我想分享的,我希望你们中的一些人能够将这些知识应用到你的个人职业生涯中。祝你好运!
原载于 2019 年 8 月 12 日https://medium.com。
我如何赢得 Flipkart ML 挑战赛
深度分析
lipkart 最近为印度工程学院的学生举办了为期一个月的年度机器学习挑战赛,总奖金为₹5,20,000(约 7500 美元)。我的团队在大约 6700 名参与者中胜出。在我告诉你我们是如何做到的之前,让我们记住,如果这个挑战不局限于这么小的目标人群,我可能很难保持在前 10%之内。作为一个题外话,这个博客将主要是理论性的。
问题陈述
给定一幅图像,定位图像中的主要对象。换句话说,它是没有分类部分的对象检测。我们只需要预测边界框。
Examples from the training set
然而,有一个问题,预先训练的模型是禁止的,但是使用标准架构是允许的。有 24000 幅训练图像和 24045 幅测试图像。
评分标准是平均交集除以并集(IOU)。
The IOU function
Custom metric to track mean IOU
当时不知道tf.metrics.mean_iou
的存在,所以自己创建了一个函数,大概要慢很多。
初步分析
乍一看,数据集有很多普通背景的图像,所以我使用 OpenCV 尝试了 Otsu 阈值、分水岭、轮廓等等。这些显然没有产生很好的效果,所以我就不告诉你细节了。
在尝试 Yolo、RetinaNet SSD 和 RCNNs 等标准对象检测架构之前,让我们提醒自己,它们有复杂的方法来平衡定位和分类损失,对于手头的问题来说是多余的。最重要的是,我没有信心能很好地调整它们,所以我没有在这些上面花太多时间。但所有这些都使用标准架构,如 VGG 或 ResNet 作为特征提取器。
这个问题非常类似于一个分类问题。对于一个预测物体精确边界框的网络来说,它应该能够识别那些物体看起来像什么,因为我们没有 Imagenet 权重来帮助我们。理想情况下,如果我们有一个好的本地化网络,我们应该能够通过替换和训练最后一层来使它成为一个好的分类网络。
因此,我使用标准架构,用具有四个输出(x1、y1 和 x2,y2 是左上角和右下角的坐标)的密集层替换最后一层,移除激活并使用经典回归损失。
数据扩充
24,000 张照片不够,所以我应用了亮度对比度增强、沿两个轴翻转、横向移动等技术,最终得到了大约 480,000 张照片。我没有使用像生成器这样的原位方法,在每个时期生成不同版本的图像,因为我想确保网络可以看到每个时期的所有数据。回想起来,发电机也可以工作得很好。
Imagenet 声称拥有大约 5000 万张图片,你可能认为 50 万张不够,但是训练集中的图片可以大致分为大约 10 个类别,与 Imagenet 中的类别数量相差甚远,所以我们不会有问题。
训练技巧
在讨论我的最佳架构之前,这里是我们使用的训练技术。
- 渐进大小增量:由杰瑞米·霍华德推广,这是一种技术,我们首先传入缩小的图像,当学习开始停滞时,渐进地增加大小。这可以防止网络过度适应较大图像中存在的噪声,并有助于更快地收敛。我们依次使用了 64、96、128 和 224 的图像。从随机权重开始时,这尤其有用。当我们达到 224 的时候,我们已经有了一个网络,可以很好地处理较小的图像,就像迁移学习一样。
- 回火:这是一种我们使用原始数据集和大批量进行训练的技术。一旦网络开始过度拟合,我们就用扩充的数据集替换较小的数据集,并通过梯度噪声减少批量大小以引入正则化。在某种程度上,我们正在让网络在淹没它之前熟悉它应该期待的数据类型。
- 带重启的随机梯度下降:这是一个学习率调度器(不是优化器),我们和 Adam 一起使用。在再次重置之前,它逐渐降低固定数量的历元的学习速率,以便网络在停滞时可以容易地跳出局部最小值。循环长度可以改变,逐渐下降到更宽、更可概括的最小值。这篇博客解释得很好。
SGDR with a cycle multiplier of 1
- 快照集成:由于使用了 SGDR,网络将在整个训练过程中收敛到几个不同的最小值。保存每个最小值处的重量检查点并将它们组合在一起会产生很好的结果,如论文快照组合:训练 1 获得 M 个自由中所探讨的。
Save a checkpoint at the flagged points and ensemble them together for better results
- **学习率查找器:**显然,找到一个好的学习率对于收敛至关重要。使用一个标准的学习率查找器,将 SGDR 的上限设置为亏损面下降最大的值。将下限设在亏损仍在减少的某个地方。
- 消除间隙层:实际上不是一种训练技术,但据观察,在最后一层之前有全局平均池层的网络比没有全局平均池层的网络表现差大约 3%。主要是因为最后一层现在要学习的输入更少了。
用于对象定位的 Keras 辅助函数。
github.com](https://github.com/ad71/Flipkart-Grid)
这里讨论的 Keras 回调可以在这个库中找到。PyTorch 用户可以使用更高级的库,如 fastai 已经实现了所有这些。
网络架构
A skip connection
- 对于任何视觉相关的任务,我首先尝试的是训练一个小的 ResNet 作为基准。ResNets 通过引入跳过连接解决了深度 CNN 的消失梯度问题,这使得网络更容易学习恒等函数。使用上面提到的所有技术,我们训练了一个 ResNet34 在公共排行榜上获得 93.41%的平均 IOU。
- ResNeXt :这是下一代的 ResNet,有一些改进和新的超参数。ResNeXt 中的层的工作方式类似于神经元。来自前一层的激活通过 C 不同的路径接收,每个路径执行相同的操作,然后相加在一起。这里, C 称为网络的基数。这些路径是相互断开的,这在某种程度上增加了稀疏性,并有助于减少过度拟合。
Residual block in ResNet vs residual block in ResNeXt with C = 32
观察到较高的基数优于较低的基数,并且具有大 C 的 ResNeXt 比具有宽 ResNet 更好。由于我们只有一个新的超参数,这个网络比 Inception 系列中的任何网络都更容易为新的数据集进行训练和微调。基数为 32 的 ResNeXt 101 是我们性能最好的模型。这篇博客详细解释了 ResNeXts。
激活功能
在我们的第一次尝试中,ResNeXt101 比 ResNet34 表现更好,但差距不是很大。学习停滞不前,尽管我们的验证损失比培训损失要低一些。我们保存了一个检查点,并迅速将新的分类层连接到网络中的一个中间层,并尝试训练它。理想情况下,尽管损耗不会像最后一层损耗那样低,但仍会降低。但事实并非如此。我们的新分类器也停滞不前。这很能说明将死的热路问题。
当使用 ReLU 激活时,随着时间的推移,大的负梯度杀死神经元,因为对于负输入,ReLU 输出 0。由于这个原因,那个特定的神经元完全停止了对梯度变化的反应。死亡的 ReLUs 不一定是一个问题,因为死亡的神经元对于计算偏差是有用的,即使它们已经失去了学习能力。然而,如果你有很多死亡的神经元,学习就会停滞。在我们的例子中,这可能是因为数据中没有足够的变化来适应一个有这么多参数的模型。
为了解决这个问题,我们可以使用 ReLU 的修改,如泄漏 ReLU 或 *SELU。*这些函数也具有更接近于零的输出激活均值,在某种程度上自调整网络。
Versions of leaky ReLU
The SELU function, where (alpha) = 1.6732 and (lambda) = 1.0507 for standard scaled inputs.
由于时间不够,我们和 SELU 一起冒险,重新训练了整件事,看起来效果不错。这将我们的最终平均 IOU 提高了约 0.5%。
损失函数
到目前为止,我一直在尝试所有众所周知的方法,但理解为什么标准损失函数对于我们试图优化的东西来说是有缺陷的,是挤出精度的最后小数位数的关键。
考虑目标对象宽 100 像素、高 100 像素的情况。假设我们有一个能够正确预测尺寸的网络,但是将预测的边界框向右偏移一个像素并且向上偏移一个像素。
Case 1: 100 x 100 bounding boxes. Target box marked in green, prediction marked in red
在这种情况下,四个坐标的总平均绝对误差为 4 * 1.414 ,总均方误差为 4 * 2 ,而 IOU 为 96.097%
For this case, the IOU is 0.96097, the L1 loss is 1.414 and the L2 loss is 2, for each co-ordinate
考虑另一种情况,目标对象宽 400 像素,高 400 像素。让我们假设同一个网络精确地预测尺寸,但是在每个方向上偏移坐标一个像素。
Case 2: 400 x 400 bounding boxes. Target box marked in green, prediction marked in red
在这种情况下,总平均绝对误差和均方误差与之前的相同**,但是 IOU 更高,为 99.006%**
For this case, the IOU is 0.99006, while L1 and L2 losses are the same as before
这些不一致性表明,对于相同的 MAE 或 MSE,IOU 可能不同。因此,我们想要一个损失函数,对于目标区域较小的包围盒中的错误,它对网络的惩罚更大。
为了进一步证明这种差异,让我们考虑一个更极端的情况。
For the same L1 loss and L2 loss, the IOU is very different this time
虽然 70.71 的像素距离是不可能的,但希望你明白这一点。对于完全相同的 MAE 和 MSE,我们可以找到非常不同的 IOU 分数。这是一个问题。
为了在这个指标上表现良好,我们需要重新定义我们的损失函数。让我们看看为什么基于 IOU 的函数也不能很好地工作。
1 — IOU
:范围在 0 到 1 之间。数值和梯度之间的变化总是很小,导致收敛速度很慢。1 / IOU
:数值之间变化很大,梯度很大,但是函数是无约束的。对于没有交叉点的盒子,损耗爆炸到无穷大。在分母上加一个小值只是一个小技巧,并不能真正解决问题。
这是我最终得出的损失函数:
Where U is the Union, I is the intersection and At is the area of the target bounding box
U — I
给出我们想要最小化的额外区域。At
是我们想要对其进行缩放的因子,这样我们可以针对较小对象中的错误对网络进行更多的惩罚。由于没有更好的术语,我们姑且称这个函数为Scaled Loss
。
The scaled loss function
这个新的损失函数对于 100 * 100 像素的情况给出的损失值为 0.0398 ,对于 400 * 400 像素的情况给出的损失值为 0.0099 ,大约少了 4 倍。这个函数的梯度很大,永远不会爆炸到无穷大(假设目标边界框的面积永远不会为零)。
有时候在训练的时候,损失函数会突然爆炸到inf
,IOU 变成nan
。这只有在目标面积为零时才会发生。分析训练集标签,我发现对于一些图像来说,x1
大于x2
。纠正这些贴错标签的例子就解决了问题。
这个功能有一个缺点。在没有相交的情况下,无论两个不相交的盒子相距多远,该损失函数都给出相同的损失,因为这是基于面积的函数。此外,由该函数形成的损失图不是很平滑。
为了克服这两个问题,我们在网络仅在 MAE 上达到大约 90%的平均 IOU 之后使用了这个复合损失函数。
The composite loss function
结论
大概就是这样。使用所有这些技术,我们能够创建一个网络,当一个接一个地喂入时,每秒预测 23 张图像,当小批量喂入时,每秒预测 73 张图像。我们在公开排行榜上取得了排名 12 ,平均 IOU 为 94.8813% ,在私人排行榜上取得了排名 1 ,平均 IOU 为 94.7079% ,我认为这是最少的超额。
用于对象定位的 Keras 辅助函数。
github.com](https://github.com/ad71/Flipkart-Grid)
所有自定义指标、损失和回调都上传到这个存储库中,供任何人使用。
谢谢你的时间。
Photo by Rob Bates on Unsplash
我是如何赢得分析金牌的
提示和技巧
在印度商学院
对于那些刚到印度的人来说,印度商学院(ISB)是海得拉巴的一所顶级商学院,提供研究生课程。进去很难,出来也很难。我刚刚完成了为期 18 个月的大数据、机器学习和数据分析课程,并获得了金牌。我的团队还赢得了“最佳顶点项目”,因为我们在模拟年轻人失业方面所做的工作(在这里阅读)。如果你打算在 ISB 或其他任何顶级商学院学习,这里有一些建议和技巧可以考虑。
重要的事情先来。
不要等到最后一刻
这似乎是大多数人正在做的事情。也许是因为家庭和工作等其他承诺,也可能只是拖延。但是你最不想做的事情就是把任务留到最后,就在它们到期的时候。任何事情都可能出错——互联网可能会失灵,你的电脑可能会崩溃,你突然意识到你看错了截止日期(相信我,这是会发生的)。相反,计划在实际截止日期前一两天提交作业。如果需要的话,这将给你额外的时间重新检查并重新提交。
逐渐地
在大部分课程中,我的口头禅是“一寸一寸”。在未来的一段时间里,它将继续存在。有很多时候,一个问题的答案是不清楚的。见鬼,有时候我甚至不明白这个问题。在这种时候,我唯一能做的就是一次迈出一小步——理解问题中每个单词的意思,再读一遍维基页面,再看一遍 youtube 视频。每迈出一小步,下一步就会变得清晰。相反,如果我试图找到最终答案,我会迷失方向,而是一次一小步地往回走。尽可能做到完美。你不会知道所有问题的答案,但是……听说过“千里之行……”这句名言吗?
Yogaa!
看过电影《无限》吗?瑜伽对我来说就像 NZT-48 对埃迪·莫拉一样。我没有一天不做瑜伽或其他形式的运动。ISB 将更多地满足你心灵的需求,而不是你所希望的。你需要满足你身体的需求。我过去常常一天锻炼两次,有时甚至变成一天三次!有人问我是如何找到时间一天锻炼三次的,这实际上很讽刺,因为正是在我工作超负荷的时候,我才会出去跑步或游泳。从思考中休息一会儿,真正去做一些身体上的事情,让我变得更有效率。有数不清的方法可以让头脑远离过度思考和过度分析,任何/所有的方法都会让思考和分析变得更加有效。平我知道更多这方面的信息。
努力,而不是准确性
尽管看起来很讽刺,但即使在机器学习和人工智能的时代,获得回报的是努力,而不是最终结果的准确性。甚至在生活的其他领域,我也越来越多地看到这种情况。如果有人付出了真诚和专注的努力,那么他/她获得回报的机会要比那些侥幸中了头彩的人多得多。给它你的最好的镜头,放开结果。但不要在没有全力以赴的情况下放手!那就是‘放弃’了!奎师那说得漂亮;谷歌“克里希纳放手结果”,你就会明白我的意思。
别傻了,HCC
ISB 有非常严格的荣誉准则,比看起来更严格。所有作业都通过 Turnitin 运行,所有在线考试都通过 Mettl 平台监控。如果你做了任何违反比赛规则的事情,无论这些规则在你看来多么不合逻辑,你都有可能被处以高额罚款。例如,如果规则规定你不能在网上考试中使用纸和笔,那么你不能使用纸和笔,无论你多么不同意这条规则。处罚是预先决定的,荣誉准则委员会(HCC)对此无能为力。因此,请确保您仔细阅读每场考试的细则。如果你想知道更多关于 HCC 的事,给我发信息。
学会说“不!”
他们说这是一个面向职业人士的执行项目,他们说即使你有全职工作也可以做,他们说你每天只需要花 2 个小时来完成这个项目,但是伙计,这些都是轻描淡写!这门课程将要求你做好每一件事,而超越的唯一方法就是专心致志。你需要对很多对你和你周围的人重要的事情说“不”。在这个过程中你可能会失败。你可能会失去一两个女孩/男朋友,一两个项目,当然不仅仅是一两集。但是该怎么办。在这个项目中,你需要做出选择,如果你想在这方面出类拔萃,那就做好准备,让其他事情退居二线。很不幸,但这是事实。
如果你已经读到这里,那么你一定是认真的:)所以,我会给你一些特别的提示,无论如何,它们都会让你与众不同。
用< 3 做
如果你真的热爱你正在做的事情,那么它就会显现出来!这是无法伪造的。当你不爱一个人的时候,买玫瑰是行不通的。而如果你爱一个人,即使你不买玫瑰,也会表现出来!和 ISB 一样-一样但不一样!如果你喜欢这门课程,如果你喜欢数据科学和分析工作,如果你挖掘研究和学习新的东西,那么它会在你的工作质量中表现出来,并给你额外的优势。事实上,这同样适用于任何可交付的产品,任何客户。带着爱去做。
保持乐观
据说大脑在想象做一个动作时和实际做那个动作时有相同的神经活动。因此,通过保持积极的心态和积极的思维(注意,这不同于过度自信),你就为自己的成功做好了准备。有几次我想推迟,尤其是在第二学期,当时的工作量可不是闹着玩的,正是在这种时候,我必须保持积极的态度,积极思考,一步一步来!这是对我有效的方法,但是还有其他方法可以确保你保持积极的心态。要知道隧道的尽头有光明!提约里用他标志性的“ISB 曲线”完美地解释了这一点。如果你想了解更多这方面的知识,我想你只需要去听他的课!
Image by author
在我校对这篇博客的时候,我感觉到无论你在何时何地应用这些技巧,它们都会起作用。真正的挑战可能在于你应用它们的一致性…
祝你好运!
附言:如果有其他方法对你有用,请在下面的评论中提出来,让那些在你之后访问这个页面的人受益
我是如何成为一名定量 UX 研究员的
不完全是数据科学家,但足够接近的话,你几乎分辨不出差别。这是一个相当模糊的位置。大体上,这就是我在数据世界中的结局。目前截至 Q1 2019 年,不知道未来会带来什么。
在戴上“数据科学家”帽子的无数方式中,我坚定地走上了“数据分析师”的道路。在 DS 作为一个领域被锻造的时代,我也陷入了这种情况,所以入门的门槛与今天有很大的不同。但是谁知道呢,也许有人会对我的古怪路线感兴趣。
That mandarin duck in Central Park from 2018. Because why not?
我花了很多时间作为面向内部的资源,为内部团队提供见解和支持,经常帮助项目经理做出产品决策。这在我处理许多问题的方式中留下了印记:我以前说过,但我认为自己是一个力量倍增器,因为我在数据的帮助下帮助人们更好地完成工作。
几年后,我成了一名“定量 UX 研究员”,这个头衔在很多地方似乎并不存在。除了偶尔发布的招聘启事,我唯一能真正提到它的是脸书的一些人写的这篇文章。他们认为 qUXR 与数据科学家有很大的重叠,但更加以用户为中心。
用几段话来概括用户体验研究这样一个庞大而复杂的领域是相当徒劳的,但它最终归结为理解人与产品之间的关系,人们如何以及为什么使用某种东西,它在他们的生活和世界中的位置。这是一个多学科领域,涉及设计、写作、社会科学(如心理学、社会学、人类学、人机交互等)。平均而言,它比当今数据科学领域的数学硬科学形象更具定性/设计性的公众形象。
虽然 UX 研究领域一直利用各种定量方法,如调查和实验,但随着大数据对理解用户变得越来越重要,一个更传统的定性研究人员不具备充分利用可用数据的工程和定量技能的利基开始出现。从那时起,有才华的人(他们本可以做好数据科学家或分析师的工作,但希望更多地关注理解用户)开始填补这个空缺。我就是这样找到去那里的路的。
我是如何来到这里的
我在获得硕士学位后离开了社会科学,来到了数据科学领域。之后,我对一些行业的分析师职位进行了一次大范围的考察。贯穿始终的一条线索是,我在很大程度上是在较小的初创公司(20-150 人),因为我喜欢身兼数职,并且经常以从数据中获取见解来帮助其他团队的角色告终。
在大学期间,我学习了哲学(不仅仅是任何哲学,大陆哲学!)和工商管理(运营管理、决策支持系统)。后来我获得了社会科学硕士学位。在那里,我混合了计算语言学,同时将社会科学理论、方法论和科学哲学灌输到我的头脑中。这大概也是为什么直到现在我还在那么多的谈论“做科学”的原因。
毕业后,我加入了一家重新设计办公室的室内设计公司。他们使用了一种相对新颖的方法,让人们定期在办公室走动,收集空间利用率的定量数据,以证明人们需要多少会议室和桌子。我在那里做了大量的调查和数据分析,学会了从空间质量评级和自由回答的表格中解读人们对工作空间的潜在问题。
在市场崩盘最严重的时候,我曾在一家广告技术公司短暂工作过。这是一个只有 25 个人的小商店,是一扇有毒的旋转门。但它支付了账单,我在那里学会了 SQL(在工作的第一个小时,在一台生产服务器上)。我也知道了我愿意承受的压力程度。我们就此打住。
后来我去了 Meetup,在那里我花时间支持产品开发团队,与项目经理密切合作,帮助团队评估潜在的功能影响,建立和运行测试,并构建大量的报告。同时,我为整个公司提供数据支持,最终帮助了从法律到客户支持的所有人。
最重要的是,我和我团队中的定性研究员是最好的朋友,我们两人将联手接管世界。一起工作,我们将在 qual 和 quant 方法之间流畅地移动,以理解用户,同时熟悉另一方使用的方法。
后来,我搬到了 Bitly ,体验了一下拥有企业客户的企业是什么样的(Meetup 的组织者订阅模式本质上是一种消费者模式)。动态和问题是非常不同的,更强调来自客户的直接反馈和更集中的范围。我也第一次有机会使用合法的大数据——在 Hadoop 堆栈上运行原始 map/reduce 作业,有时做一些愚蠢的事情,如通过 Hadoop 流协议发送 grep 作业。像往常一样,我是员工中唯一的数据分析师,但我们有几个数据科学家在开发新产品,而且以前的员工建立了非常强大的数据驱动文化。
接下来是初级,一个非常小的(<当时只有 30 个人)公司,设计、制造并在网上销售童装。在一家小型创业公司工作,实际上有合法的供应链要处理,这是非常罕见的。他们实际上是在购买布料,将布料运送到工厂,最后运送到仓库,将产品送到顾客家门口。库存管理和成本计算变得非常复杂。这是我第一次成为唯一一个同时帮助构建基础设施和数据文化的数据工程师。
最后,谷歌向我提供了一份我无法拒绝的工作,不是作为一名数据科学家(在谷歌的工作分类中通常被称为分析师),而是一名 Quant UXR。实际上,我已经和分析师聊过了,我们很开心地发现我们的基本技能基本上是一样的。主要的区别确实可以归结为我与产品团队的关系有多密切,以及我对使用工具产生可解释结果的偏好。
工作怎么样?
不要陷入细节,这是一个研究者的角色,所以它最终是寻找(可操作的)洞察力。根据需要,事情有战术性和战略性。准备切换齿轮来处理任何随机出现的情况,并行运行事情。
你可能正在支持一个全新的产品,此时你正在处理所有传统的创业问题,比如微小的样本量、关于市场适合度的问题、了解初始用户、提高采用率和销量、在你的初始垃圾漏斗页面上运行测试等等。
或者,您可以使用更成熟的产品,该产品具有已建立的用户群、多年的历史数据、实际的工具,重点关注用户群中更深奥的部分,处理大数据,以及处理遗留系统和问题。
工具和方法和典型的 ds 一样,各种形式的 SQL,Hadoop,Python,R,Jupyter 笔记本等。电子表格和幻灯片仍然是不可避免的。你仍然要处理从前端延伸到后端的神秘技术,所以你最好把你的技术技能准备好。一天下来,大部分工作仍然是正确计数。
最大的部分可能是与跨职能团队的持续沟通。你将成为战略会议的一部分,在那里你会得到需要用数据来回答的问题。然后介绍调查结果。除此之外,还要进行一般性研究,以确认(或质疑)即将出台的决策。此外,还需要与人合作来实现一些东西,以及一些小的战术工作。
所有典型的声音材料。
接下来去哪里?
截至 2019 年初撰写本文时,还没有任何进展。我一直喜欢通过查看数据墙来了解用户在做什么。这种工作在世界上总会有一席之地,不管它的头衔是什么。
像往常一样,如果你有任何问题,请随时在 twitter 上联系我。
Here’s another duck because it’s cute and I have too many of these photos.
为什么数据对您的业务很重要?
人体有五个感觉器官,每一个都每秒钟从相互作用中传递和接收信息。今天,科学家可以确定人脑接收多少信息,并猜猜是什么!人类一秒钟接收1000 万比特的信息。当计算机通过高速互联网从网上下载文档时,情况类似。
但是,你知道大脑每秒只能处理 30 比特吗?所以,浪费的信息比获得的信息多。
数据无处不在!
人类在 2010 年超越了 zettabyte。(一个 zetta byte = 100000000000000000000 字节。如果你算上的话,那就是 21 个零:P)
人类倾向于每天生成大量数据;从心率到最喜欢的歌曲、健身目标和电影偏好。你可以在企业的每个抽屉里找到数据。数据不再仅仅局限于科技公司。人寿保险、酒店和产品管理等各种业务现在都在使用数据来制定更好的营销策略、改善客户体验、了解业务趋势或只是收集对用户数据的见解。
在当今快速发展的技术世界中,数据量不断增加,这使得对数据的分析变得更加令人兴奋。从用户数据中收集的洞察力现在是决策者的主要工具。我还听说这年头数据是用来衡量员工成功的!现在评估不是容易多了吗?😛
Forbes 称每天产生 2.5 万亿字节的数据,而我从之前的随机阅读中得知,只有 0.5%的数据得到了分析!这是一个令人难以置信的统计数据。
那么,我们到底为什么要讨论数据及其在您业务中的应用呢?鼓励数据依赖的因素是什么?在这里,我列出了 6 个坚实的理由,让你感谢这篇关于为什么数据对你的业务如此重要的文章。
数据分析和可视化方面
我们想象什么?数据?当然可以。但是数据并不简单。
- 可变性:说明事物如何不同,以及不同多少
- 不确定性:良好的可视化实践框架了由数据变化引起的不确定性
- 背景:有意义的背景有助于我们根据数据的潜在变化来构建不确定性
这三个关键抽屉提出了我们在业务中寻求答案的问题。我们在数据分析和可视化方面的尝试应该集中在边缘化上述三点,以满足我们寻找答案的要求。
1.绘制贵公司的绩效图
拥有数十种数据可视化工具,如 Tableau、Plotly、Fusion Charts、Google Charts 等(我的商业数据可视化教授喜欢 Tableau tho!😛)我们现在有机会探索数据的海洋。
当我们专注于创建绩效图时,我们的主要目标是提供有意义的学习体验,以产生真实而持久的业务成果。在选择策略时,绩效图对于推动我们的决策也非常重要。现在让我们把数据放入这幅图中。绩效映射的数据将包括您的员工记录、他们的工作职责、具有可衡量结果的员工绩效目标、公司目标和季度结果。你的生意里有这种东西吗?什么事?数据是给你的!
在数据可视化工具上实现所有这些数据,您现在可以映射您的公司是否达到了预期目标,您的员工是否被分配了正确的任务。想象你的经济在一个期望的时间框架内,并推断出所有对你重要的东西。
2.改善您品牌的客户体验
只要几个不高兴的顾客就会损害甚至破坏你苦心经营的品牌的声誉。有一件事可以让你的组织达到新的高度,那就是客户体验失败了。下一步做什么?
首先,在行为商业的基础上挖掘你的客户数据库。画出选择、关注点、症结、趋势等。跨越不同的消费者旅程接触点,以确定良好体验的改进点。PayPal 的联合创始人麦克斯·拉夫琴提到,“这个世界现在充斥着数据,我们可以更清楚地看到消费者。”顾客的行为现在比以往任何时候都更加明显。我说,既然你认识到了你的用户,就利用这个机会创造一个完美的产品策略来改善你的客户体验。
企业可以利用数据来:
- 寻找新客户
- 跟踪社交媒体与品牌的互动
- 提高客户保留率
- 捕捉客户倾向和市场趋势
- 预测销售趋势
- 提升品牌体验
3.更快地做出决策,更快地解决问题!
如果你的企业有一个网站,一个社交媒体或涉及支付,你正在产生数据!很多。所有这些数据都充满了对公司潜力以及如何改善业务的深刻见解
我们在商业中寻求答案的问题有很多。
- 我们下一步的营销策略应该是什么?
- 我们应该什么时候推出新产品?
- 这是清仓大甩卖的好时机吗?
- 我们应该依靠天气来观察商店的生意吗?
- 您在新闻中看到或读到的内容会影响业务吗?
这些问题中的一些可能已经引起了你从数据中获得答案的想法。在不同的点上,数据洞察力对决策非常有帮助。但是,根据数字和公司业绩信息做出决策有多明智呢?这是一个稳操胜券的,强有力的,增加利润的力量,你不能错过。
4.衡量公司和员工的成功
大多数成功的商业领袖和前台总是依靠某种类型或形式的数据来帮助他们做出快速、明智的决策。
为了详细说明如何从数据中衡量公司和员工的成功,让我们考虑一个例子。假设你有一个销售和营销代表,他被认为是表现最好的,拥有最多的销售线索。但是,在检查您的公司数据时,您发现该代表的成交率低于您的其他员工,他们获得的销售线索较少,但成交率较高。如果不了解这些信息,您将继续向表现不佳的销售代表发送更多的销售线索,并从未成交的交易中损失更多的钱。
所以现在,从数据中你知道谁是表现更好的员工,什么对你的公司有用。数据让你更清晰,这样你就能获得更好的结果。看多了数字,你倒多了见识。
5.了解你的用户、市场和竞争
数据和分析可以帮助企业预测消费者行为,改善决策,市场趋势,并确定其营销工作的投资回报率。当然可以。你越清楚自己的消费者,就越容易接触到他们。
我非常喜欢这篇文章中介绍的测量、分析和管理的想法。在为你的企业分析数据以了解你的用户、你的市场范围和竞争对手时,相关性是非常重要的。
你根据什么因素和什么信息来分析数据?
- 产品设计:关键词可以准确揭示你的客户在寻找什么样的功能或解决方案。
- 客户调查:通过检查关键词频率数据,你可以推断出竞争利益的相对优先级。
- 行业趋势:通过监控关键词频率的相对变化,你可以识别和预测客户行为的趋势。
- 客户支持:了解客户最头疼的地方,以及应该如何部署支持资源。
结尾注释
在当今快速发展的技术世界中,使用数据并借助数据来运营您的业务是新的标准。如果你不使用数据来引导你的企业走向未来,你肯定会成为一个过去的企业!幸运的是,数据分析和可视化方面的进步使得利用数据发展业务变得更加容易。分析您的数据,获得您需要的洞察力,用数据推动您的公司走向未来。
了解你的作者
Rashi 是一名研究生、UX 分析师和顾问、商业开发人员、技术演讲人和博客作者!她渴望建立一个组织,将商界女性与资源海洋联系起来,让她们对工作和世界充满无畏和激情。请随意给她留言这里!
数据科学如何改变世界?
在本文中,您将了解数据科学家所扮演的角色。围绕数据科学有一层神秘的面纱。虽然数据科学的流行词已经流传了一段时间,但很少有人知道成为数据科学家的真正目的。
所以,我们来探讨一下数据科学的目的。
数据科学的目的
数据科学的主要目的是发现数据中的模式。它使用各种统计技术来分析数据并从中得出真知灼见。从数据提取、争论到预处理,数据科学家必须彻底审查数据。然后,他有责任从数据中做出预测。数据科学家的目标是从数据中得出结论。通过这些结论,他能够帮助公司做出更明智的商业决策。我们将把这个博客分成几个部分,以便更详细地理解数据科学家的角色。
为什么数据很重要
数据是新的电力。我们生活在第四次工业革命的时代。这是人工智能和大数据的时代。大规模的数据爆炸催生了新技术和更智能的产品。大约每天产生 2.5 艾字节的数据。在过去的十年里,对数据的需求急剧增加。许多公司已经将他们的业务集中在数据上。数据创造了 IT 行业的新领域。然而,
- 我们为什么需要数据?
- 为什么行业需要数据?
- 是什么让数据成为珍贵的商品?
这些问题的答案在于企业寻求产品转型的方式。
数据科学是一个非常新的术语。在数据科学出现之前,我们有统计学家。这些统计学家在数据的定性分析方面经验丰富,公司雇佣他们来分析他们的整体业绩和销售。随着计算过程、云存储和分析工具的出现,计算机科学领域与统计学相结合。这催生了数据科学。
早期数据分析基于调查和寻找公共问题的解决方案。例如,对一个地区的一些孩子的调查将导致该地区学校发展的决定。在计算机的帮助下,决策过程被简化了。因此,计算机可以解决更复杂的统计问题。随着数据开始激增,公司开始意识到其价值。它的重要性体现在许多旨在提升客户体验的产品上。各行各业都在寻找能够挖掘数据潜在价值的专家。数据可以帮助他们做出正确的商业决策,实现利润最大化。此外,它给了公司一个机会,根据客户的购买模式来检查客户的行为并采取行动。数据有助于公司提升收入模式,并帮助他们为客户打造更高质量的产品。
数据对于产品就像电对于家用电器一样。我们需要数据来设计迎合用户的产品。这是驱动产品并使其可用的因素。数据科学家就像雕刻家。他篡改数据,从中创造出一些有意义的东西。虽然这可能是一项单调乏味的任务,但数据科学家需要具备正确的专业知识来提供结果。
数据科学为什么重要?
数据创造神奇。行业需要数据来帮助他们做出谨慎的决策。数据科学将原始数据搅拌成有意义的见解。所以,行业需要数据科学。数据科学家是知道如何利用数据创造奇迹的巫师。一个熟练的数据科学家将知道如何从他遇到的任何数据中挖掘出有意义的信息。他帮助公司朝着正确的方向发展。公司需要强有力的数据驱动决策,而他是这方面的专家。数据科学家是统计学和计算机科学各个基础领域的专家。他运用他的分析才能来解决商业问题。
数据科学家非常擅长解决问题,被指派在数据中寻找模式。他的目标是识别多余的样本,并从中获得洞见。数据科学需要各种工具从数据中提取信息。数据科学家负责收集、存储和维护结构化和非结构化形式的数据。
虽然数据科学的角色侧重于数据的分析和管理,但它取决于公司的专业领域。这要求数据科学家具备特定行业的领域知识。
以数据为中心的行业的目的
如上所述,公司需要数据。他们需要数据驱动的决策模型和创造更好的客户体验。在本节中,我们将探讨这些公司关注的特定领域,以便做出更智能的数据驱动型决策。
I .数据科学促进更好的营销
公司正在使用数据来分析他们的营销策略,并制作更好的广告。很多时候,企业在营销他们的产品上花费了天文数字。这有时可能不会产生预期的结果。因此,通过研究和分析客户反馈,公司能够创作出更好的广告。这些公司通过仔细分析客户的在线行为来做到这一点。此外,监控客户趋势有助于公司获得更好的市场洞察力。因此,企业需要数据科学家来帮助他们在营销活动和广告方面做出强有力的决策。
二。获取客户的数据科学
数据科学家通过分析客户的需求来帮助公司获得客户。这使得公司可以根据潜在客户的需求定制最适合的产品。数据是公司了解客户的关键。因此,数据科学家的目的是让公司能够识别客户,并帮助他们满足客户的需求。
三。数据科学促进创新
公司利用丰富的数据创造更好的创新。数据科学家通过分析和创造传统设计中的洞察力来帮助产品创新。他们分析顾客的评论,并帮助公司制作一个与评论和反馈完美契合的产品。利用客户反馈的数据,公司可以做出决策,并朝着正确的方向采取适当的行动。
四。丰富生活的数据科学
客户数据是改善他们生活的关键。医疗保健行业使用他们可用的数据来帮助他们的客户的日常生活。这些行业中的数据科学家的目的是分析个人数据、健康史,并创造产品来解决客户面临的问题。
从以上以数据为中心的公司的实例来看,很明显每个公司使用数据的方式都不同。数据的使用因公司要求而异。所以数据科学家的目的取决于公司的利益。
数据科学家的其他技能
现在,在这篇关于数据科学目的的博客中,我们将看到数据科学家还需要哪些其他的技能。在本节中,我们将探讨数据科学家的工作如何超越分析数据和从数据中获取洞察力。除了使用统计技术得出结论,数据科学家的目标是与公司交流他的结果。数据科学家不仅需要精通数字运算,还应该能够翻译数学术语,以便做出正确的商业决策。
例如,假设一名数据科学家正在分析公司的月销售额。他使用各种统计工具对数据进行分析并得出结论。最终,他获得了需要与公司分享的成果。数据科学家需要知道如何以非常简洁和简单的方式交流结果。管理销售和分销的人可能不理解技术结果和过程。因此,数据科学家必须会讲故事。数据的讲述将使他能够毫无困难地将其知识传递给管理团队。因此,它拓宽了数据科学家的目的。
数据科学是管理和 IT 的结合。数据科学家的目的不仅仅限于数据的统计处理,还包括管理和交流数据,以帮助公司做出更好的决策。
所以,这一切都是为了数据科学。希望你喜欢我们的文章。
摘要
在文章的最后——数据科学的目的,我们得出结论,数据科学家是数据密集型公司的中坚力量。数据科学家的目的是提取、预处理和分析数据。通过这一点,公司可以做出更好的决策。各个公司都有自己的要求,并相应地使用数据。最终,数据科学家的目标是让企业发展得更好。根据所提供的决策和见解,公司可以采取适当的策略并进行自我定制,以增强客户体验。
尽管如此,如果你有任何关于数据科学目的的问题,请通过评论自由提问。我们一定会回复你的。
机器学习与统计学有什么不同,为什么它很重要
Photo by Daniel Prado on Unsplash
统计学和机器学习的异同是一个引发大量讨论的话题。许多高质量的文章和帖子已经从不同的角度解决了这个问题(尤其参见下面的参考文献[1–5])。这篇文章的目的是 a)总结这个主题的大量工作 b)补充我的观点 c)包括有用的比较。
关键点是:
- 机器学习使用统计数据来理解和基准测试数据以及验证模型
- 在某些问题中,人们可以互换统计建模或机器学习(也称为经典 ML)——逻辑回归就是一个例子
- 深度学习是过去几年来炙手可热的机器学习的一个子集,它远远超出了统计方法,为全新类别的问题(如计算机视觉)提供了解决方案,正是在这里,ML 和统计之间的对比非常明显
- 业务目标、技术或其他资源限制决定了哪种方法最适合给定的问题——每种方法都有自己的优势和局限性——在现实世界的问题中,我们可以使用混合方法(例如,逻辑回归用作第一步,然后是深度学习)
先说统计学和机器学习的定义。然后,我们将进一步了解重叠、差异以及这两个领域如何在数据科学和分析的生命周期中共存。
- 统计学是数学的一个分支。 统计建模是将数据中变量之间的关系以数学方程的形式形式化。有两个主要的思想流派:频率主义者和贝叶斯主义者(基于概率——数学的另一个分支,处理预测未来事件的可能性)。当你需要更多地了解数据和估计量的性质时,统计学通常应用于低维问题。估计量属性的常见示例包括 p 值、标准差、置信区间或无偏估计量。注:统计学使用概率论和分布。
- 机器学习(ML)是计算机科学和人工智能的一个子领域。ML 处理构建系统(算法,模型),这些系统可以从数据和观察中学习,而不是显式编程的指令(例如规则)。
《自然》[3]上的这篇论文很好地总结了这种差异。
统计学从样本中得出总体推断,机器学习找到可概括的预测模式。【3】
下面简单总结一下统计学和机器学习的区别。
Comparison of Statistics and ML (multiple sources)
特征工程 — ML 更复杂是因为特征工程固有的困难——也就是用哪些特征?每个功能的声音如何?是否符合政策?本文指出了与特征工程相关的三个因素:
- 大量输入
2.非结构化数据(如语音)需要特征工程作为训练开始前的预处理步骤
3.AutoML 可以生成大量复杂的特征来测试数据的许多转换,这会增加不必要的复杂性
超参数也是机器学习中的一个挑战。在训练过程开始之前,必须定义随机森林模型中的树的深度或深度神经网络中的层数。关于超参数的决策通常比统计建模中的类似决策更复杂。
不同的模型类型有自己的怪癖。当像支持向量机这样的二进制分类器通常与 NLP 结合来做出决定时,在这些情况下,性能将对所选择的核函数敏感。
ML 工作流程中的统计数据
考虑具有四个阶段的 ML 工作流的简化版本: *(1)获取数据(2)准备数据(3)建模(4)验证。*统计是可靠数据准备和合理验证的关键,通常用作建模过程的一部分。
Four Phases of ML and Statistics
数据探索—通常是分析师、数据科学家执行的第一步—由统计数据提供信息。那么预处理是由问题的性质和业务需求驱动的。
当我们想要从总体中创建科学上可靠的样本数据时,也会用到统计学。术语’ S 统计显著’总体样本 —意思是我们想要创建合适大小的代表性数据集(样本),然后可以用于 ML。这一步是减少 ML 中一类偏倚的关键。
验证
我们如何验证我们有代表性的样本?公认的方法是检查样本的 p 值,以确保其超过 5%的置信水平(即通过显著性测试)。数值型变量必须用 Kolmogorov-Smirnov 检验,而分类型变量需要用 Pearson 的卡方检验。例如,Bootstrap 是一种重采样方法。
统计学对于从数据中识别和减轻样本或测量偏差也很重要。验证者需要确定开发人员是否采取了必要的步骤来确保公平性。可以对模型进行公平性测试,如果有必要,可以在模型开发过程的每个阶段进行修正,从设计阶段一直到性能监控。
根据美联储银行的金融服务指南[ 美联储 SR11–7],适当的统计测试取决于具体的分布假设和模型的目的。此外,在许多情况下,基于样本信息,统计检验不能明确地拒绝错误的假设或接受正确的假设。
《华尔街日报》最近的一篇文章谈到了金融机构在升级统计模型时如何应对洗钱的挑战。例子故事。例如,U. S. Bancorp 过去一直使用规则来检测欺诈。现在,它拥有 ML 人员和工具来运行更高级的搜索,根据更多的指标来标记那些看起来与其他人有统计差异的客户。
统计和 ML 经常一起使用来提供一个健壮的解决方案。
迷失在翻译中?
很多时候,统计建模和 ML 使用非常相似的方法,因此相互重叠。
逻辑回归-逻辑回归是机器学习从统计领域借用的一种技术。这是一种广泛用于二分类问题的方法,但也可以扩展到多类问题。
这里列出了一些意思相似但名称不同的术语。
Statistics and ML — Terms with Different Names, Similar Meaning
然后对推论有了不同的理解。以下是来自 Quora 帖子的一段经过编辑的摘录:
在统计推断中,我们观察到一些数据,我们想说一些关于产生这些数据的过程的知识。因此,预测、估计误差线、假设检验和参数估计都是统计推断的一部分。
另一方面,来自计算机科学传统的传统机器学习研究人员通常喜欢区分学习和推理。学习与参数估计相关联,并且不被明确地认为是推理问题。因此,术语“推断”的概念比统计学家的概念要窄,被认为是一种预测。例如,在图像处理问题中,给定具有许多缺失像素值的图像,我们可能想要从我们学习的联合分布中填充缺失像素的最可能值。
总结一下,统计学和 ML 有关键的区别。特别是深度学习为解决以前难以解决的问题打开了大门,不需要手工设计功能、深入的领域知识或做出假设,这使它比任何其他分析方法都有优势。
为什么重要?
作为一名实践数据科学家或 ML 工程师,你需要了解统计学的基础知识。是的,你可以在不知道原因的情况下使用现有的库,但是在处理现实世界的问题时,你不会总是遵循一种千篇一律的方法。这就是统计理论的适当知识会有所帮助的地方。我认识许多数据科学家,他们一开始是统计学家,他们带来了一个重统计的观点。转向 ML 的软件工程师带来了另一种观点。
如果你正在招聘、资助或帮助创建数据科学实验室、卓越中心或实践中心,你需要留意这些趋势,并努力平衡团队的角色和思维类型。
让我们以一个轻松的音符结束——作者乔·戴维森【2】。
“当你筹款的时候,它是人工智能。当你在招人的时候,就是 ML。当你实施时,这是逻辑回归。”
希望这篇文章对你有所帮助。查看我的其他文章,并随时在 LinkedIn 上与我联系。
参考资料和阅读材料
- 马修·斯图尔特,博士研究员—https://towards data science . com/the-actual-difference-between-statistics-and-machine-learning-64b 49 f 07 ea 3
- 乔·戴维森—https://towards data science . com/no-machine-learning-is-not-just-glorized-statistics-26d 3952234 E3
- 达尼洛·布兹多克、娜奥米·奥特曼和马丁·克日温斯基——统计学对机器学习https://www.nature.com/articles/nmeth.4642
- https://www . McKinsey . com/business-functions/risk/our-insights/derisking-machine-learning-and-artificial-intelligence
- https://www . quora . com/What-is-the-difference-of-inference-and-learning
- https://stats . stack exchange . com/questions/6/the-two-cultures-statistics-vs-machine-learning
- 罗布·提布拉尼——http://statweb.stanford.edu/~tibs/stat315a/glossary.pdf
- 统计建模:两种文化作者 Leo Breiman 。http://projecteuclid.org/euclid.ss/1009213726
- https://www . slide share . net/benjaminskrinka/essential-ecometrics-for-data-scientists
- https://machine learning mastery . com/relationship-between-applied-statistics-and-machine-learning/
- https://www . kdnugges . com/2016/11/machine-learning-vs-statistics . html
- Phani Srikanth—https://medium . com/data-science-analytics/statistical-learning-vs-machine-learning-f 9682 FDC 339 f
- https://normal deviate . WordPress . com/2012/06/12/statistics-vs-machine-learning-5-2/
- https://www . quora . com/What-is-the-difference-of-inference-and-learning
- https://stats . stack exchange . com/questions/5026/what-is-the-difference-data-mining-statistics-machine-learning-and-ai
- https://medium . com/datadriveninvestor/differences-between-ai-and-machine-learning-and-why-it-matters-1255 b182 fc6
- https://HBR . org/2019/07/building-the-ai-powered-organization,https://HBR . org/2019/03/why-data-science-teams-need-通才-非专家
机器学习是如何革新药物发现的?
每次一种新药的发现都会在公众和学术界引起兴奋,主要是当它能治愈一种不治之症时。
无论是治疗罕见的精神疾病还是癌症,药物研发一直是卫生保健发展和人类福祉的关键因素。
每个人都知道药物研发是一项昂贵的事业。此外,有时需要数年时间才能找到全球流行病的正确疗法。据估计,一家制药公司平均花费 10-15 年时间和大约 40 亿美元将新药推向市场。
一旦药物配制完成,就该进行测试了。临床试验非常重要,因为它决定了药物的疗效。为此,制药公司需要准备好承受治疗带来的一切的志愿者。
这个过程是如此的危险,以至于它可以将任何制药公司的生存置于严重的危险之中。制药公司必须在对每个志愿者进行实验之前为他们“投保”,这增加了整体研发支出。
像阿尔茨海默氏症和帕金森氏症这样影响中枢神经系统的疾病是无法治愈的。它也没有疫苗可以预防这种情况的发生。
机器学习在这里有什么帮助?
创造一种新药的整个过程会产生大量数据。机器学习为处理化学数据和创造有助于药物开发的结果提供了一个绝佳的机会。
机器学习可以帮助我们在很短的时间内处理多年来收集的数据。此外,它将帮助我们做出更明智的决定,而不是通过预测和实验。
麦肯锡表示,如果我们充分利用大数据和机器学习的潜力,那么它可以帮助医疗保健行业每年创造 3000 亿美元的收入。
专家预测,机器学习可以帮助生物过程的预测建模。这将有助于我们在更短的时间内开发出成功的药物。
与实施相关的挑战
使用机器学习处理数据存在许多挑战。然而,今天并不缺乏数据收集。我们今天面临的唯一挑战是培养和处理产生的复杂数据。
药物开发和机器学习——一个理想的匹配?
人工智能、人工智能、增强现实、虚拟现实和磁共振等新兴技术将成为医疗保健领域最重要的技术。医院和制药公司每天都会产生大量的数据。
通过人工智能和人工智能处理这些数据也有助于找到一些不治之症的正确疗法。这些 AI 和 ML 算法将帮助我们建立新的分子,并事先识别每种药物的生物效应。
2018 年 5 月,8 家大型制药公司和麻省理工学院的研究人员组成了一个新的联盟,该联盟将专注于 ML 在药物发现过程中的应用。
像无锡、辉瑞、安进、拜耳、Sunovion、诺华、礼来和巴斯夫这样的大型研究公司都是 MLPDS(药物发现和合成的机器学习)的一部分。
他们着眼于研究领域,如实验设计,毒性,分子表现和结合亲和力。目前,他们正在使用 ML 工具来计算各种疾病药物的确切配方。
麻省理工学院的研究人员发明了一种智能 WiFi 盒子,可以监测各种各样的生理信号,如步态、呼吸、移动性、行为、睡眠和心率。基于这些因素,ML 算法分析一个人的身体是如何受到影响的。
他们使用传感器传输生理信号,这有助于识别药物如何影响患者的生理状况和疾病进展。这些数据可以帮助我们缩短临床试验的时间,降低成本,并提高对结果的信心。
其他公司
除了这些机构和公司,还有其他参与者也在研究机器学习在药物发现中的应用。
DeepMind Health 一直在推动与穆尔菲尔德眼科医院、伦敦大学学院医院 NHS 基金会、美国退伍军人事务部和英国帝国癌症研究中心等医院的研究。
DeepMind Health 与谷歌的人工智能健康团队和领先的临床医生联盟合作,正在研究如何在乳房 x 光照片中识别乳腺癌的迹象。
乳腺癌每年在世界范围内夺去 50 万人生命的主要原因是因为不准确的检测。乳房筛查有时会检测出癌症,即使它并不存在。而有时,它甚至无法检测到癌症的最后阶段。
DeepMind Health 的目标是使用机器学习算法来仔细分析来自约 7500 名女性的历史非个性化乳房 x 光片,并提高筛查报告的质量。
规章制度
药物开发中与 ML 相关的最大风险之一与偏倚有关。被选择用于处理的数据集可能属于特定的遗传学组。因此,新药可能只对某一组病人有效。
此外,技术人员将不得不说服像 FDA 和 EMA 这样的组织批准药品供公众使用。机器学习在药物发现中的好处和应用还停留在理论上。随着制药公司将其付诸实践,将会出现许多问题。
制药公司对机器学习的接受需要时间,它对行业和我们生活的影响也需要时间。让制药公司、研究人员和监管机构参与关于实施 ML 以及如何实现其全部潜力的对话至关重要。
最后的想法
从上面的讨论可以明显看出,m1 在药物发现和制药工业中具有惊人的潜力。但是,要把它付诸实践,还需要一些润色和强化。
来自麻省理工学院和 2018 年 DARPA Riser 的研究生 Connor Coley 表示,机器学习一直是制药和药物发现行业的一部分,但主要是以结构-性质回归的形式。人们现在已经开始意识到它将改变发展模式的潜力。
由百科全书的首席执行官 Sandeep Agarwal 撰写。
千禧一代对 Robinhood vs. Motley Fool 股票顾问的投资选择
Photo by Sabine Peters on Unsplash
(这篇文章也可以在我的Robinhood 是一家受欢迎的交易经纪商,由于其革命性的 0 佣金服务,其用户群主要是千禧一代。The Motley Fool 是一家在互联网上提供金融信息的金融服务公司。杂色傻瓜向订阅用户提供每周股票推荐。该公司声称,他们的专家汤姆和大卫挑选的股票远远跑赢市场。
在这篇文章中,我将比较傻瓜投资组合(最近挑选的股票)和千禧一代投资组合(Robinhood 透露的热门股票)的表现。
一起
傻瓜精选:交易台(TTD)、Appian (APPN)、Zscale (ZS)、Twilio (TWLO)、Zoom Video Communications (ZM)、废物管理(WM)、星巴克(SBUX)、马西莫(MASI)、亚马逊(Amazon)、Zynga (ZNGA)和 SolarEdge Technologies (SEDG)。
千禧一代的选择(T4 榜单前十名):奥罗拉大麻(Aurora Cannabis)、通用电气(GE)、福特(Ford)、Fitbit、GoPro (GPRO)、克罗诺斯集团(CRON)、Hexo (HEXO)、Canopy Growth (CGC)、Snap (SNAP)、Plug Power (PLUG)和 Zynga (ZNGA)。
仔细观察,我们会发现愚人的投资组合似乎比另一个更多样化。它包含科技、消费者和高股息股票。而罗宾汉的用户主要关注科技股和大麻股。
most popular stock list by Robinhood as of the date of this post
我用来比较策略的工具是 StockOptimizr 。StockOptimizr 可以根据历史数据(1 年、2 年或 4 年)计算给定股票列表的最佳分配。衡量投资组合好坏的指标是夏普比率。夏普比率衡量回报/风险的比率。夏普比率高意味着投资组合的收益相对较好,风险相对较低。在这个对比中,我只关注 1 年的历史数据。以下是愚人组合的表现。它强调,在 10 只股票中,只有几只包含在最优分配中。分别是 Appian (7.97%)、Startbucks (38.41%)、SolarEdge(13.56%)、废物管理(39.66%)和 Zynga (0.39%)。今年的总回报率为 59.24%,夏普比率为 2.75。这是相当不错的相比,市场(间谍)只获得约 9%。
Fools’ performance with SPY in one year
现在,让我们来看看千禧一代是如何做的。如下,我们发现,甚至更少的股票被用来做一个最佳的投资组合。只有 Plug Power (21.39%)和 Snap (78.61%)在最优组合中。这可能是因为去年马里胡阿那的股票波动太大。与傻瓜的投资组合 59.24%相比,该投资组合的回报率高达 77.46%。不过值得一提的是夏普比率要低很多,只有 1.35。它的高回报是以承担更多风险为代价的。这也反映出我们的年轻一代愿意为高潜在收益而冒险。
Portfolio built by Top 10 popular stocks in Robinhood
尽管数字是量化的,但很难判断哪个投资组合比另一个更好。这得由你自己的需要来衡量。一般来说,年轻一代有时间为高回报去冒险。老一辈可能倾向于购买更安全的高股息股票。但是应该适用于所有人的几个重要规则是分散投资和存足够的钱进行长期投资。
注来自《走向数据科学》的编辑: 虽然我们允许独立作者根据我们的 规则和指导方针 发表文章,但我们不认可每个作者的贡献。你不应该在没有寻求专业建议的情况下依赖一个作者的作品。详见我们的 读者术语 。
我的帖子:
我关于金融和科技的帖子
从 CRUD web 应用开发到语音助手中的 SDE——我正在进行的机器学习之旅
全栈开发教程:将 AWS Lambda 无服务器服务集成到 Angular SPA 中
全栈开发教程:用运行在 AWS Lambda 上的无服务器 REST API 提供交易数据
半监督学习中静悄悄的革命是如何改变行业的?
Photo by @penguinuhh
混合匹配、无监督数据扩充和 PATE 方法
作为一名辅修计算机科学的人类学学生,我想尽我最大的努力去理解这一发展,以及当它实现时会有什么样的后果。然而,首先,我们必须运行的变化和技术,使一个可行的半监督学习方法的实际方面。然后,我将跳转到一些技术,这些技术结合起来,可能会改变我们在机器学习中处理这一领域的方式。
这是我三天看三个问题的最后一天。
第二天:无监督数据增强(UDA)的半监督学习(SSL)取得了哪些进展,为什么它对人工智能领域很重要?(完成)
第三天:SSL 的悄然革命如何改变行业?
今天是最后一天,我将写下这场静悄悄的半监督革命。我将从这个术语是如何产生的开始;以前的惯例;以及 SSL 格局是如何变化的。之后我将很快结束发言。
谁创造了安静的半监督革命?
5 月 15 日,谷歌首席科学家 Vincent Vanhoucke 发表了一篇名为半监督革命的文章。据我所知,这是第一次提到以这种方式使用 SSL 的变化。
他首先谈到了半监督学习(SSL)之前的问题。由于要访问大量数据、有限的监督数据和大量未标记的数据,SSL 似乎是一个显而易见的解决方案。他在图表上展示了他的观点,这些图表通常来自监督和半监督实验。
Illustrative graph by Vincent Vanhoucke
根据 Vanhoucke 的说法,一名机器学习工程师经历了一段旅程,最终回到了图中所示的监督学习。
Illustrative graph by Vincent Vanhoucke
但是他接着说:
一个有趣的趋势是,半监督学习的前景可能会变得更像这样:
Illustrative graph by Vincent Vanhoucke
以前的惯例是什么?
对于工程师来说,SSL 被描述为一个兔子洞,几乎是一种成年仪式,最终只能回到数据标记上来。根据 Vanhoucke 的说法,以前的惯例是:
…首先学习未标记数据的自动编码器,然后对标记数据进行微调。几乎没有人再这样做了,因为通过自动编码学习到的表示往往会在经验上限制微调的渐近性能。
那么什么是自动编码器呢?我们来分析一下。
Autoencoder 是一种人工神经网络,用于以无监督的方式学习高效的数据编码。自动编码器的目的是通过训练网络忽略信号“噪声”来学习一组数据的表示(编码),通常用于降维。随着缩减侧,学习重构侧,其中自动编码器试图从缩减的编码中生成尽可能接近其原始输入的表示,因此得名。
- 输入空间的维度。高维空间(100 或 1000)。空间的体积增加太多,数据变得稀疏。例如,计算优化问题中的每个值的组合。如果你想要一个神秘的倾斜,这一点可以被称为维度诅咒。
渐近线在数学中用来指在无穷远处与曲线相切的直线。 计算复杂性中的渐近符号 是指定义域和值域为 Z+的函数的极限行为,对于定义域大于特定阈值的值有效。因此,这里我们用曲线来近似曲线。通常,优选地,我们寻找紧密跟踪原始曲线的曲线。
- 渐近性能是一种比较算法性能的方法。你可以抽象出底层的细节(例如精确的汇编代码);调查缩放行为(对于非常大的输入,哪种方式更好?).渐近性能:随着输入大小的增长,执行时间如何增长?
Vanhoucke 声称:
…即使是大幅改进的现代生成方法也没有改善这种情况,可能是因为好的生成模型不一定就是好的分类器。因此,今天当你看到工程师微调模型时,通常是从在监督数据上学习的表示开始的…
什么是生成方法?
生成学习是一种理论,涉及到新思想与学习者现有图式的积极整合。生成性学习的主要思想是,为了理解地学习,学习者必须主动构建意义。生成模型仅适用于概率方法。在统计分类中,包括机器学习,两种主要的方法被称为生成方法和鉴别方法。下面显示了生成分类器(联合分布):
是什么改变了 SSL 的前景?
昨天我写了一篇文章,名为谷歌人工智能和半监督学习的发展。文章首先经过了讲解无监督学习、监督学习和强化学习。然后,它继续解释半监督学习(SSL)以及如何利用无监督数据增强(UDA)对 SSL 进行研究。因此,如果你不熟悉这些术语,最好跳回那篇文章。
无论如何,有一些进步提到了向 SSL 的可用性增加的转变。你可能想看看这三个流行的:
- 提高精度的组合方法。MixMatch:半监督学习的整体方法
- 利用无监督数据扩充更好地处理未标记数据
- 维护隐私。PATE 方法(从私人训练数据进行深度学习的半监督知识转移,利用 PATE 进行可扩展的私人学习
有一些新的聪明的方法来给数据贴上自我标签,并表达损失,这些方法与自我标签的噪音和潜在偏见更加兼容。与前两点相匹配的两个最近的工作例证了最近的进展并指向相关文献: MixMatch:半监督学习的整体方法和非监督数据增强。
在 MixMatch 论文中,他们介绍了 MixMatch ,这是一种 SSL 算法,它提出了一种单一损失,统一了半监督学习的主流方法。与以前的方法不同,MixMatch 同时针对所有属性,我们发现它有以下好处:
- 在一项实验中,他们表明 MixMatch 在所有标准
图像基准上获得了最先进的结果(第 4.2 节),例如在具有 250 个标签的 CIFAR-10
上获得了 11.08%的错误率(相比之下,次优方法获得了 38%)。 - 他们在消融研究中表明,MixMatch 大于其各部分的总和。
- 他们证明了 MixMatch 对于不同的私人学习是有用的,使 PATE 框架中的学生能够获得新的最先进的结果,
同时加强了提供的隐私保证和实现的准确性。
一致性正则化通过利用分类器即使在被增强后也应该为未标记的示例输出相同的类分布的思想,将数据增强应用于半监督学习。MixMatch 通过对图像使用标准数据扩充(随机水平翻转和裁剪)来利用一致性正则化的形式。
MixMatch 是一种“整体”方法,它结合了主流 SSL 范例的思想和组件。
MixMatch 是由 Google Brain 团队的成员作为半监督学习方法引入的,它结合了当前半监督学习的主流范式的思想和组件。
通过对半监督和隐私保护学习的大量实验,我们发现在他们研究的所有设置中,MixMatch 与其他方法相比表现出显著改善的性能,错误率通常降低两倍或更多。
在未来的工作中,他们有兴趣将来自半监督学习文献的额外想法融入混合方法,并继续探索哪些组件会产生有效的算法。
另外,大多数关于半监督学习算法的现代工作都是在图像基准上进行评估的;他们对探索 MixMatch 在其他领域的有效性很感兴趣。
**使用 UDA 的 SSL。**由于获得无标签数据比获得有标签数据容易得多,所以在实际操作中,我们经常会遇到
的情况,即无标签数据的数量与有标签数据的数量差距很大。
为了使 UDA 能够利用尽可能多的未标记数据,他们通常需要一个足够大的
模型,但是一个大模型很容易使有限大小的监督数据过拟合。
为了解决这个困难,他们引入了一种新的训练技术,叫做训练信号退火。TSA 背后的主要直觉是,随着模型在越来越多的未标记示例上进行训练,逐渐释放已标记示例的训练信号,而不会过度拟合它们。
锐化预测。我们观察到,在问题很难并且标记的
例子的数量非常少的情况下,在未标记的例子和增强的未标记的例子
上的预测分布在类别间趋于过度平坦。
基于置信度的屏蔽。屏蔽掉模型不确定的例子。
【可扩展私学】同 PATE 。我将摘录 2018 年 2 月 24 日发布的论文摘要:
机器学习的快速采用增加了对基于敏感数据(如医疗记录或其他个人信息)训练的机器学习模型的隐私影响的担忧。为了解决这些问题,一种有前途的方法是教师集合的私人聚合,或 PATE,它将“教师”模型集合的知识转移到“学生”模型,通过在不相交的数据上训练教师来提供直观的隐私,并通过教师答案的嘈杂聚合来保证强隐私。
结论
使用 UDA 的 SSL 非常类似于根据您刚刚看到的内容重新创建,以便在计算的意义上理解视觉印象。MixMatch 结合了许多方法来使 SSL 更好地工作。PATE 是维护隐私所必需的。当学习必须在需要知道的基础上进行时,SSL 还可以提议保护隐私,这些数据可能是您事先不知道(或不允许知道)的。因此,在这种情况下,提高准确性非常重要,并且可能会使行业变得更好。
这是#500daysofAI 的第 41 天。
希望你喜欢这篇文章,如果有机会记得给我反馈。正如我在引言中提到的,我尽我所能去理解,我写作是为了学习。
祝你一切顺利。
什么是#500daysofAI?
我在挑战自己,用#500daysofAI 来写下并思考未来 500 天的人工智能话题。一起学习是最大的快乐,所以如果你觉得一篇文章引起了共鸣,请给我反馈。
2019 年学数据科学的感受
透过(决策树)看到(随机)森林
以下受文章 启发,2016 年 学习 JavaScript 的感受。 不要把这篇文章看得太重。这是讽刺,所以不要把它当作实际的建议。像所有的建议一样,有些是好的,有些是糟糕的。这一块只是一个观点,很像人们对数据科学的定义。
我听说你是要去的人。谢谢你见我,也谢谢你的咖啡。你懂数据科学吧?
嗯,我知道这件事。我去年去了PyData和 奥赖利地层 做了几个模型。
是的,我听说你上周给我们公司做了一个很棒的关于机器学习的报告。我的同事说这真的很有用。
哦,猫狗照片分类器?好的,谢谢。
反正我已经决定不能再忽视数据科学、人工智能、机器学习。多年来,我一直是一名分析师和顾问,在 Excel 工作簿中处理数字,制作数据透视表和图表。然而 我一直在看文章说人工智能会抢走工作,甚至像我这样的白领。
This is all you need to become a confident data scientist (as of 2013). Totally achievable, right? (SOURCE: Swami Chandrasekaran)
我在谷歌上搜索了如何成为一名数据科学家,找到了这张“路线图”,并了解了什么是生存危机。让我问你这个问题:我真的必须掌握这个图表中的一切才能成为一名数据科学家吗?
简短的回答,没有。没有人再使用这个路线图了。是 2013 年的。它甚至没有张量流,你可以在这个图表中完全画出一些路径。我认为“数据科学”在那个时候也变得更加分散和专业化。采取不同的方法可能更好。
好吧,这让我感觉好一点了。那我该回学校吗?我在某处读到很多数据科学家至少有硕士学历。我应该获得数据科学硕士学位吗?
天哪,你为什么要这么做?你必须警惕“数据科学”课程,它在很大程度上是一个更名的“商业分析”学位。此外,日常学术界往往落后于行业,可以教授过时的技术。为了跟上潮流,你最好去 Coursera 或 Khan Academy 自学。
哦。
如果你真的去上大学,也许去学物理或运筹学?很难说。有趣的是,我遇到的许多优秀的数据科学家都来自这些领域。你也许能找到一个好的“数据科学”项目。我不知道, 去和这个博士辍学者谈谈他的观点 。
那么,我该如何开始自学呢?LinkedIn 上的一些人说,那些对数据科学感兴趣的人应该从学习 Linux 开始。然后我去 Twitter,有人坚持认为数据科学家应该学习 Scala,而不是 Python 或 r
LinkedIn 上的那个家伙还差几根薯条就能吃到快乐套餐了。关于 Scala 的家伙,请不要去 Scala 的兔子洞。相信我。现在是 2019 年。Scala 并没有出现在数据科学社区。如果是,py spark就不是个事儿了。而且绝对不要听潮人的语言,就像那个 总在说科特林 的家伙。
还好吗?R 呢?人们似乎喜欢它。
R 擅长数学建模仅此而已。使用 Python,您的学习投资将获得更多回报,并且可以完成更大范围的任务,如数据争论和设置 web 服务。
但是 R 在Tiobe上的排名还是蛮高的,而且它有一吨的社区和资源。用了会疼吗?
看,你可以用 r。如果你只是对数学感兴趣,它可能会更好,用tidy verse它会更好。但是数据科学仍然不仅仅是数学和统计学。相信我,Python 会在 2019 年给你更多的里程。
好吧,那么……我猜我是在学 Python。
你不会后悔的。
Python 硬吗?当机器人接管时,我还能保持市场吗?
当然,Python 是一门非常简单的语言。你可以自动化很多任务,用它做一些很酷的事情。 但是你连 Python 都不需要。 数据科学不仅仅是脚本和机器学习。
什么意思?
嗯,这些都是工具。你使用 Python 从数据中获得洞察力。有时这涉及到机器学习,但大多数时候并不涉及。数据科学可以简单地创建图表。事实上,你甚至不需要学习 Python,使用 Tableau 就可以了。他们宣称,只要使用他们的产品 ,他们就可以 “让你组织中的每个人都成为数据科学家”。
Tableau is confident they can solve your data scientist staffing problem
等等,什么?所以我只需要买一个 Tableau 许可证,我现在就是一个数据科学家了?好吧,让我们对这个推销持保留态度。我可能一无所知,但我知道数据科学不仅仅是做漂亮的可视化。我可以用 Excel 做这个。
当然可以。你不得不承认这是巧妙的营销。绘制数据图表是一个有趣的阶段,它们省略了处理数据的痛苦和耗时的部分:清理、争论、转换和加载数据。
是的,这就是为什么我怀疑学习编码是有价值的。所以我们来谈谈 Python。
其实,坚持住。也许你可以学习 Alteryx。
什么?
还有一个叫Alteryx的软件,可以让你清理、争论、转换、加载数据。它很棒,因为它使用拖放界面来混合数据和…
Alteryx envisions a code-less “data science” experience with their product too
天哪,请停下来。不再有拖放工具。我想学 Python,不是 Alteryx 或者 Tableau。
好吧,抱歉。我只是想通过避免代码让你的生活更简单。也许我也这么做了,因为我们公司买了我们应该使用的许可证。但无论如何,学习 Python 需要学习几个库,比如操作数据框的 Pandas 和制作图表的 matplotlib。其实,划掉 matplotlib。 用阴谋诡计。它用的是 d3.js,好看多了 。
我知道这些单词中的一些。但是什么是数据框呢?
嗯,这是一种在包含行和列的表格结构中操作数据的功能。您可以在 Python 环境中使用数据框完成所有这些很酷的变换、透视和聚合。
等等,这和 Excel 有什么不同?我从大学毕业就开始做这些工作了。这是否意味着我已经是一名数据科学家了?
如果你对这样塑造自己的品牌感到舒服,当然可以。当你去参加聚会和写简历时,我会给那个自称的头衔加个脚注。
那么 Python 和 Excel 有什么不同呢?
Python 与众不同,因为你可以在一个Jupyter笔记本内完成所有工作。您可以逐步完成每个数据分析阶段,并让笔记本直观显示每个步骤。这几乎就像你在创造一个可以与他人分享的故事。毕竟,交流和讲故事是数据科学的重要组成部分。
听起来像幻灯片。我也已经这么做了。我好迷茫。
哦,我的上帝,不。笔记本更加自动化和简化,它使追溯你分析的每一步变得容易。但是仔细想想, 我刚刚想起有些人甚至不喜欢笔记本,因为代码不是很有用。 在笔记本之外更容易模块化代码,以防你需要把它变成一个软件产品。
那么现在数据科学也是软件工程了?
有可能,但我们不要因此而分心。有更紧迫的事情要先学。做数据科学,显然需要数据。
当然可以。
一个很好的起点是抓取网页,就像一些维基百科的页面,然后把它们转储到我们的硬盘上。
等等,我们又要完成什么呢?
嗯,我们正在收集一些数据进行实践。用 抓取网页并解析它美汤 可以给我们很多非结构化的文本数据来处理。
我糊涂了。我刚刚读完一本 130 页的关于 SQL 的书,我以为我会去查询表格而不是浏览网页。SQL 不是访问数据的典型方式吗?
我们可以用非结构化文本数据做很多很酷的事情。我们可以用它来对社交媒体帖子上的情绪进行分类,或者进行自然语言处理。NoSQL 非常擅长存储这种类型的零散数据,因为我们可以存储大量的数据,而无需担心如何使其可用于分析。
我听说过 NoSQL 这个词。那是 SQL 吗?反 SQL?等等,我觉得跟大数据有关吧?
井首, 《大数据》如此 2016 。大多数人已经不再使用这个词了,所以你这样说话就不酷了。像很多激动人心的技术一样, 它已经过了其 Gartner 炒作周期的巅峰 只在少数地方找到了自己的利基。但 NoSQL 基本上是“大数据”运动的产物,成长了像 MongoDB 这样的平台。
好吧,但是它为什么叫“NoSQL”呢?
NoSQL 代表“不仅仅是 SQL ”,支持关系表之外的数据结构。然而,NoSQL 数据库通常不使用 SQL,而是使用一种专有的查询语言。下面是 MongoDB 的语言与 SQL 的比较:
天哪,这太可怕了。你是说每个 NoSQL 平台都有自己的查询语言?SQL 怎么了?
我觉得丫。SQL 没有任何问题,除了它已经存在了几十年。非结构化数据热潮是一个机会,可以做一些不同的事情,并以以前不可能的方式进行大规模扩展。然而,我猜更多的人已经得出结论,将 SQL 保留在 周围是有价值的。这使得分析变得更加容易。事实上,许多 NoSQL 和“大数据”技术都争相以某种形式添加 SQL 层。毕竟,SQL 是一种非常通用的语言,即使有些人觉得它很难学。
唉,好吧。因此,我在这里收集的信息是,作为一名数据科学家,NoSQL 不再需要学习,除非我的工作需要。听起来好像我只知道 SQL 就很安全。
我越想越觉得,是的,我想你是对的,除非你想成为一名数据工程师。
数据工程师?
是的,数据科学家可以分为两种职业。数据工程师与生产系统一起工作,并帮助使数据和模型可用,但较少做机器学习和数学建模工作,这些工作留给数据科学家。这可能是必要的,因为大多数人力资源和招聘人员无法超越“数据科学家”的头衔。仔细想想,如果你想成为一名数据工程师,我会优先考虑学习 阿帕奇卡夫卡 而不是 NoSQL。阿帕奇卡夫卡现在很火。
在这里,这个文氏图可以帮助你。要获得一个“数据科学家”的头衔,你应该在 数学/统计 圈子里的某个地方,理论上与另一个学科重叠。
Data Science Venn Diagram
好吧,我现在还不知道我是想成为一名数据科学家还是数据工程师。我们继续吧。那么,我们为什么要抓取维基百科的页面呢?
很好地充当自然语言处理的数据输入,做类似创建 聊天机器人 之类的事情。
像 微软的 Tay ?这个机器人是否足够聪明,能够预测销售额,并帮助我以适当的库存数量推出新产品?是否存在成为种族主义者的内在风险?
理论上,可能会。如果您摄取新闻文章,也许您可以创建一些模型来识别导致商业决策建议的趋势。但是这真的很难做到。仔细想想,这可能不是一个好的开始。
Move over Gordon Ramsay, this bot is pushing the boundaries of culinary art. It even has a cookbook.
好吧,那么…自然语言处理、聊天机器人和非结构化文本数据可能不是我的强项?
可能不会,但请注意,现在有很多数据科学。谷歌和脸书等硅谷公司处理大量非结构化数据(如社交媒体帖子和新闻文章),显然他们在定义“数据科学”方面有很大影响。然后,我们剩下的人使用关系数据库形式的业务操作数据,并使用不太令人兴奋的技术,如 SQL。
对,听起来没错。我猜他们也将他们的非结构化数据天赋主要用于挖掘用户帖子、电子邮件和故事,用于广告和 其他邪恶目的。
就是这样。但是您可能会发现朴素贝叶斯很有趣,而且有些用处。你可以获取正文并预测它的类别。从头开始实现也很容易:
Categorizing bodies of text with Naive Bayes
你是对的,朴素贝叶斯有点酷。但除此之外,我看不出非结构化数据有什么价值。
然后我们将继续前进。因此,您正在处理大量的表格数据:电子表格、表格和大量记录的数字。听起来好像你想做一些预测或统计分析。
是的,我们终于有所进展了!解决现实问题。这是神经网络和深度学习的用武之地吗?
哇,沉住气。我打算建议从一些具有均值和标准差的正态分布开始。也许用 z 分数和一两个线性回归计算一些概率。
但是,我可以在 Excel 中完成所有这些工作!我错过了什么?
嗯……是的,没错,你可以在 Excel 中做很多这样的事情。但是当你写脚本时,你会得到更多的灵活性。
喜欢 VBA 吗?Visual Basic?
好吧,我要重新开始,假装你没说过。Excel 确实有很好的统计运算符和不错的线性回归模型。但是,如果您需要对每一类项目进行单独的正态分布或回归,那么用 Python 编写脚本要比创建长度可能变成距离到月球度量的可怕公式容易得多。
When you become advanced at Excel, you inflict pain on everyone who works with you.
也可以使用百变库scikit-learn。对于不同的回归和机器学习模型,您可以获得更多强大的选项。
好吧,很公平。所以我想这就进入了数学建模领域。说到数学,我该从哪里开始呢?
传统观点认为线性代数是许多数据科学的基础,这是你应该开始的地方。矩阵相乘和相加(称为点积)是你会一直做的事情,还有其他重要的概念,如行列式和特征向量。 3Blue1Brown 几乎是你能找到线性代数 直观解释的唯一地方。
所以…用一个数字网格和另一个数字网格相乘/相加是我会经常做的事情?这听起来真的没有意义,很无聊。能给我一个用例吗?
嗯……机器学习!当你 做一个线性回归 或者构建自己的神经网络的时候,你会做大量的矩阵乘法和随机权重值的缩放。
好吧,那么矩阵和数据帧有什么关系吗?它们听起来很相似。
实际上,等等……我正在重新考虑这件事。让我来回顾一下这句话。 在实用性方面,你将不需要做线性代数。
哦,来吧!真的吗?我到底学不学线性代数?
在实用性上, 没有你大概不需要学习线性代数 。像tensor flow和scikit-learn这样的库为你做这一切。很繁琐,反正也很无聊。最终,您可能希望对这些库的工作原理有一点了解。但是现在,只要开始使用机器学习库,完全忽略线性代数。
你的不确定性让我不安。我能信任你吗?
表现出一些感激之情!我从另一个兔子洞里救了你。不客气
唉。
还有,在我忘记之前。不要实际使用 TensorFlow。使用Keras因为它使张量流更容易使用。
说到机器学习,线性回归真的有资格成为机器学习吗?
是的,线性回归被归入“机器学习”工具包。
太棒了,我一直在 Excel 中做这个。那么我也可以称自己为机器学习从业者吗?
**叹气技术上来说,是的。但是你可能想拓展一下你的广度。你看,机器学习(不考虑技术)通常是两个任务:回归或分类。从技术上讲,分类就是回归。决策树、神经网络、支持向量机、逻辑回归和线性回归都执行某种形式的曲线拟合。每种模式都有利弊,视情况而定。
等等,所以机器学习只是回归?它们都有效地将曲线拟合到点上?
差不多。像线性回归这样的一些模型解释起来非常清楚,而像神经网络这样的更高级的模型就定义而言是复杂的,难以解释。神经网络实际上只是一些非线性函数的多层回归。当你只有 2-3 个变量时,这看起来并不令人印象深刻,但是当你有成百上千个变量时,这就开始变得有趣了。
好吧,既然你这么说,当然可以。而图像识别也只是回归?
是的。每个图像像素基本上都变成了一个带有数值的输入变量。这倒提醒了我,你得提防 维度诅咒 。这基本上意味着你拥有的变量(维度)越多,你就需要越多的数据来防止它变得稀疏。这是机器学习如此不可靠和混乱的众多原因之一,并且可能需要大量你可能没有的标记数据。
我现在有很多问题。
(开始)
像调度人员或运输这样的问题怎么办?或者解一个数独?机器学习也能解决所有这些问题吗?
当你研究这类问题时,有人会说这不是数据科学或机器学习。这就是“ 【运筹学】 ”。
对我来说,这些似乎是实际问题。所以运筹学和数据科学没有关系?
实际上,有相当多的重叠。运筹学已经给出了很多机器学习使用的优化算法。它还提供了许多像你提到的常见“人工智能”问题的解决方案。
那么我们用什么算法来解决这类问题呢?
嗯,绝对不是机器学习算法,知道这个的人太少了。有更好的算法已经存在几十年了。 树搜索、元启发式、线性规划和其他运筹学方法论 已经被使用了很长时间,并且在这些类别的问题上比机器学习算法做得好得多。
用树搜索解决调度问题
towardsdatascience.com](/sudokus-and-schedules-60f3de5dfe0d)
那么,为什么每个人都在谈论机器学习,而不是这些算法?
**叹因为那些优化问题已经圆满解决了相当一段时间了,方法从此没有上头条。信不信由你,几十年前,第一个人工智能炒作周期集中在这些算法上。如今,人工智能的炒作被重新点燃,源于机器学习及其很好地解决的问题类型:图像识别、自然语言处理、图像生成等。
那么,当人们提议使用机器学习来解决调度问题,或者像数独这样简单的事情时,他们这样做是错误的吗?
差不多吧,是的。机器学习、深度学习等等……无论今天被炒作的是什么,通常都不能解决离散优化问题,至少不能很好地解决。人们已经尝试过了,但是结果非常不理想。
那么,如果机器学习只是回归,为什么每个人都对机器人和人工智能危害我们的工作和社会如此大惊小怪?我是说…拟合曲线真的有那么危险吗?一个“AI”在刚做回归的时候有多少自我意识?
人们已经发现了回归的一些聪明的应用,比如在给定的回合中找到最佳的棋步(离散优化也可以做到),或者自动驾驶汽车计算转向哪个方向。但是,是的,有相当多的炒作,回归只能有这么多的应用程序和一个任务。
我仍在协调这种脱节。我一直在看关于 DeepMind 在象棋游戏中复制类人智能 的文章,现在 它在星际争霸 中击败人类玩家!这些机器学习算法正在所有这些游戏中击败人类玩家!这是否意味着他们下一步会取代我的工作?
有多少星际争霸玩家威胁要抢走你的工作?
(困惑的沉默)
你真的能说玩星际争霸和做你的工作有任何相似之处吗?
如果你没有受到人类星际玩家的威胁,你为什么要担心机器人星际玩家?他们被硬编码并训练来做好一件事:玩星际争霸。你也可以这样说一个人,他什么也没做,他们对你不再是威胁。
我们通过自动化消遣获得了什么?
towardsdatascience.com](/ai-research-and-the-video-game-fetish-71cb62ffd6b3)
我不确定是该松口气还是怀疑。首先是国际象棋,然后是星际争霸…也许接下来会是自动化分析和机器人做出战略性商业决策。但也许第三项是对前两项的一大飞跃。我再也不知道了。
某家伙写了一篇关于走向数据科学的文章,关于 深度学习触及其局限性 。你可能想读一下。
又一个人工智能的冬天来了吗?
towardsdatascience.com](/is-deep-learning-already-hitting-its-limitations-c81826082ac3)
好吧,那么我们是如何从数据科学转向人工智能的呢?我越是试图定义“数据科学”,我就越是…我就…我无法描述它。整件事是如此的疯狂和模糊。
在这里,我得到了同一作者的另一篇文章。不错的家伙。
大家专精,散了吧!
towardsdatascience.com](/data-science-has-become-too-vague-538899bab57)
谢谢。我需要出去走走,处理这些事情。如果我从中得到什么,我想我的 Excel 工作可以称为“数据科学”。不过,我不知道自己是否想拥有“数据科学家”的头衔。似乎它可以是任何东西。我可能会把时间投入到别的事情上。希望数据科学之后的“下一件大事”不会那么疯狂。
也许你应该跟随 IBM 一段时间?
为什么?
听说过量子计算 吗?
卡尔·波普尔如何让你成为像乔治·索罗斯一样优秀的数据科学家
数据科学之道
波普尔关于“可证伪性”和如何建立更好的机器学习模型的观点
数据科学之道 专栏探讨了几个世纪以来哲学家们是如何攻克机器学习和数据科学的关键问题的。
If Karl Popper were a modern data scientist, he would have used the concept of “falsifiability” when he implemented machine learning models.
卡尔·波普尔最著名的观点是科学通过“可证伪性”前进——这个观点认为一个人不能证明一个假设是真的,或者甚至通过归纳获得真理的证据(哎呀!),但一个人可以反驳一个假设,如果它是假的。
如果波普尔是一名数据科学家…
假设 Popper 是一名现代数据科学家,需要实现一个机器学习解决方案来预测一些感兴趣的现象。考虑到他的科学哲学,他会如何实施他的模型呢?
Popper 将实现一个因果模型。因果机器学习模型直接对建模者旨在预测的现象中起作用的因果机制进行建模。对因果机制进行建模使得能够在对系统进行干预的情况下进行稳健的预测,即使这些干预导致系统的行为方式与它在训练数据中的行为方式根本不同。术语“干预”指的是任何人为的“搞乱”你正在建模的事物的方式。例如,在金融建模中,干预的一个例子可能是新的税收政策。如果你有一个模型可以预测你的电子商务平台的销售收入,那么开展广告活动就是一种干预。
Popper 将通过以下迭代模型反驳算法建立模型:
- 基于如何改进您的模型的先前迭代的想法,您提出了一个更新的模型。
- 你使用新的模型来预测干预的结果。在选择关注哪种干预措施时,优先选择预测结果更令人惊讶的干预措施。
- 你实际上进行干预并观察结果。如果结果与预测不符——嘣!模型伪造。
- 重复步骤 1–3。一直走下去,直到找不到方法去证伪 model 的当前迭代。
你知道波普尔不会做什么吗? 他会而不是专注于优化某些函数的可能性或预测准确性。他知道模型平均来说可以预测得很好,但在重要的边缘情况下仍然预测得很差。
波普尔可能仍然是一个平庸的数据科学家
让我们面对现实吧,有时候你所需要的只是一个很好的预测。一个优秀的数据科学家能够识别何时是这种情况,何时不是。
然而,Popper 方法的另一个问题出现在步骤 1 中。在这一步中,Popper 必须从大量的候选模型中进行选择,这些模型尚未被之前迭代中的干预实验数据所证伪。
大多数数据科学家会根据来自所有这些先前实验的证据在多大程度上支持给定候选人来对候选模型进行排名,例如使用交叉验证,或者基于可能性的标准,如 AIC 或 BIC 。
不是波普,他的口头禅是:
“你无法证明一个假设(即模型)是真的,甚至无法通过归纳法证明它是真的,但如果它是假的,你可以反驳它。”
因为对波普尔来说,可证伪性才是最重要的,所以每一个候选模型都和其他模型处于同等地位。没有什么能帮助他喜欢一个模型。鉴于他必须搜索尚未被反驳的模型的巨大空间,这使他的算法的有效性受到质疑。
然而,我们不必像波普尔那样反对有证据的归纳推理。我们可以使用上面的模型构建算法,并为下一次迭代选择在前一次迭代中得到有力支持的模型。
波普尔如何让你成为像乔治·索罗斯一样优秀的数据科学家?
波普尔给我们的最有价值的想法是,通过设计可能失败的情况,尽最大努力打破你的模型,然后根据这些情况改进模型。
虽然你并不完全需要一个因果模型来做到这一点,但它肯定会使这个过程变得容易得多。如果没有预测干预效果的方法,就很难识别模型的故障模式。仅仅因为你不知道什么样的边缘案例破坏了你的模型,并不意味着一旦你的模型进入生产,这些边缘案例就不会出现。
金融投资是一个罕见的边缘案例可以毁掉你的领域。如果你认为财富是这种建模技术的证据,那么看看亿万富翁投资者乔治·索罗斯就知道了。早在“数据科学”出现之前,索罗斯就已经将数据科学应用于金融市场。
BIllionaire George Soros attributes his investment success to Popper’s philosophy
索罗斯也是波普尔在伦敦经济学院的学生,并称赞波普尔启发了他的“反身性通论”。这是因果理论——因果机制是宏观经济的抽象概念——是他投资策略的核心。他的策略可以总结为之上的迭代模型反驳算法。
我富有只是因为我知道什么时候我错了……我基本上是通过认识到自己的错误而生存下来的。乔治·索罗斯
如果对他有用,也许对你也有用。
延伸阅读:
- 卡尔·波普尔 —斯坦福哲学百科全书
- 归纳问题 —斯坦福哲学百科全书
- 索罗斯乔治。"易错性、反身性和人类不确定性原理."经济学方法论杂志20.4(2013):309–329。
最小二乘回归估计实际上是如何计算的
理解模型输出是如何计算的,有助于理解它们的解释
FWStudio from Pexels
普通最小二乘法是线性回归用来获得参数估计的一种方法。这需要拟合一条线,使得从每个点到回归线的平方距离之和(残差)最小。让我们在下面的图表中想象一下,红线是回归线,蓝线是残差。
下面,我将首先介绍一个例子,然后说明如何使用残差来估计线性模型的参数。然后,我将展示如何计算汇总输出中的每个值。总之,这将揭示普通最小二乘法的内部工作原理,并演示它们是如何结合在一起的。
根据 GPA 预测 ACT 成绩
目标是根据学生的 GPA 预测学生的 ACT 分数。我们首先制作一个包含 15 个 ACT 成绩和 GPA 的数据框架。然后,我们使用 lm 函数创建线性模型。
gpa = c(2.931,3.682,3.113,3.910,2.568,
3.292,3.684,3.835,3.180,3.516,
3.358,2.801,2.729,3.989,2.679)
act = c(28,31,26,36,27,31,28,34,29,32,28,24,30,33,26)
df = data.frame(cbind(gpa,act))mod = lm(act~gpa,data=df)
summary(mod)
act= 11.877+5.376 *GPA
我们看到 gpa 由低 p 值支持,这表明它是 act 的强预测因子。估计是 5.376,这意味着 gpa 每增加 1.0,我们预计 ACT 会增加 5.376 个点。让我们看看汇总表中这些不同的值是从哪里来的。
平方和
下图中每个点是 *yᵢ,*每个预测值是 ŷᵢ ,平均值是 ȳ 。
残差平方和(RSS/SSE)
eᵢ = yᵢ - ŷᵢ
第个残差是第个实际值和第个预测值之间的差值(蓝线)。各残差平方之和为 RSS。这是为了得到我们的 beta 估计而最小化的。
回想一下,ŷ = b₀ + b₁x
因此,eᵢ = yᵢ - ŷᵢ = yᵢ - b₀ - b₁xᵢ
RSS =σ(yᵢ-b₀-b₁xᵢ)
我们首先对 RSS 取相对于 b₀ 和 b₁ 的偏导数,然后将它们设置为零。
∂rss/∂b₀=-2σ(yᵢ-b₀-b₁xᵢ)
b₀ = ȳ - b₁x̄
∂rss/∂b₁=-2σ(yᵢ-b₀-b₁xᵢ)xᵢ
b₁=(σ(xᵢ-x̄)(yᵢ-ȳ))/σ(xᵢ-x̄)= sxy/sxx
让我们用上面的公式看看结果,从 b₁.开始
avg_act = mean(df$act)
avg_gpa = mean(df$gpa)
b1 = sum((df$gpa - avg_gpa)*(df$act - avg_act))/sum((df$gpa - avg_gpa)**2)
这得出 5.376。请注意,这与 lm 估计的 gpa 相匹配。太好了,让我们为 b₀.重复这个过程
b0 = avg_act - b1*(avg_gpa)
这得到 11.877,与截距估计值相匹配。很好,我们已经展示了如何计算参数估计,但现在我们需要测试它们的重要性。让我们先来看看与 RSS 密切相关的另外两个值。
平方和回归(SSReg)
σ(ŷᵢ-ȳ)
这将对预测值和平均值之间的平方差求和。换句话说,这衡量了回归线解释了多少平方和。回头参考前面的图来想象一下。
总平方和(SST)
σ(yᵢ-ȳ)
SST = RSS + SSReg
让我们检查一下这个等式对我们的例子是否成立。
rss = sum(((df$act - fitted.values(mod)))**2)
ssreg = sum(((fitted.values(mod) - avg_act))**2)
sst = sum(((df$act - avg_act))**2)
all.equal((rss+ssreg),sst)
将 RSS、SSReg 和 SST 与摘要输出相关联
残差标准误差
假设我们的误差是独立的,同方差的,正态分布,均值为 0,方差为σ。残差可用于创建误差方差的无偏估计。剩余标准误差是这个σ估计量的平方根。这让我们知道我们的点离回归线有多远。
n = nrow(df)
p = 1
rse = sqrt(rss/(n-p-1))
这里,p 是非截距预测值的数量。在我们的 SLR 例子中,我们只有一个预测器,所以分母变成 n-2。
性病。(参数估计的)误差
var(b₀| x)=σ[(1/n)+(x̄/sxx)]
sxx = sum((df$gpa - avg_gpa)**2)
sigma_squared = rss/(n-p-1)var_b0 = sigma_squared*((1/n)+(avg_gpa**2/sxx))
se_b0 = sqrt(var_b0)
Var( b₁ |X) = σ /SXX
var_b1 = (rss/(n-p-1))/(sxx)
se_b1 = sqrt(var_b1)
t 值
t 统计量的计算方法是将β估计值除以它们的标准误差。分子是标准的正态变量,分母是具有 n-p-1 个自由度的卡方变量的平方根。因此,这些统计数据遵循具有 n-p-1 个自由度的 t 分布。
t_b0 = b0/se_b0
t_b1 = b1/se_b1
2*pt(t_b0,n-p-1,lower.tail=F)
2*pt(t_b1,n-p-1,lower.tail=F)
多重 R 平方
R = SSReg/SST = 1 - RSS/SST
换句话说,R 是回归线(SSReg)对总方差(SST)解释的方差的度量。
调整后的 R 平方
ᵃᵈʲ = 1 - (RSS/n-p-1)/(SST/n-1)
重新排列调整后的 R 方程,分子中会留下 n-1,分母中会留下 n-p-1。因此,即使在简单的线性回归环境中,调整后的 R 也总是小于 R 的倍数。
F 统计量
f = MSReg/MSE
MS 指均方差。这些值的计算方法是将 SSReg 和 RSS 除以各自的自由度 1 和 n-p-1。因为这是两个卡方变量的比率,所以新的统计数据遵循具有 1 和 n-p-1 个自由度的 f 分布。
f = (ssreg/1)/(rss/(n-2))
pf(f,1,n-p-1,lower.tail=F)
结论
我们已经研究了普通的最小二乘法,以及如何用它来计算参数估计。此外,我们已经展示了如何使用与 RSS 相关的值来计算测试统计信息和诊断信息。
如果检测结果为阳性,是否会感染艾滋病病毒?
解释了条件概率的一个惊人结果。
你曾经得到过让你害怕的医学测试结果吗?
可能是妊娠试验阳性(或阴性)?
也许是艾滋病毒检测呈阳性?
也许是别的什么?
吓到你了吗?嗯,应该是这样的。但也许没有以前那么多。如果得到这样的检测结果,就要谨慎了。但是,与其彻底崩溃,最好还是简单地再做一次测试。
让我们来解释一下为什么这些结果可能没有听起来那么可怕。让我们以艾滋病毒测试为例。
快速的谷歌搜索告诉我,截至 2018 年,美国大约有 3.28 亿人。其中,110 万人为艾滋病毒阳性。
艾滋病毒测试也相当不错。许多消息来源说他们是 99.5%正确的。
“99.5%正确”是什么意思?
这意味着艾滋病毒感染者检测结果呈阳性的比例为 99.5%。这被称为敏感性。
这也意味着未感染艾滋病毒的人得到阴性检测结果的比例也是 99.5%。这被称为特异性。
永远记住,灵敏度和特异性不需要是同一个数字!
让我们开始计算。
事件定义和计算
我们首先需要定义一些事件。
- H 描述某人感染了艾滋病毒的事件
- NH 描述某人未感染 HIV 的事件
- T 描述测试结果为阳性的事件
- NT 描述测试结果为阴性的事件
We can divide our population into infected (H) and not infected (NH) individuals. We can also divide our population into positively tested (T) and negatively tested (NH) individuals.
这意味着一个给定的个体,让我们称他为汤姆,可能是 HIV 阳性( H )或者不是( NH )。此外,他的测试结果可能是阳性( T ),也可能是阴性( NT )。永远记住,医学测试是不完美的,只是因为有人被感染,这并不意味着测试结果这样说,反之亦然!
汤姆感染艾滋病毒的概率由 P(H) 给出,他没有感染艾滋病毒的概率由 P(NH) 给出。因为它们是仅有的两个选择,而且是互补的,所以这两个概率之和是 1。
他的测试结果呈阳性的概率由 P(T) 给出,呈阴性的概率由 P(NT) 给出。同样适用于 P(T) 和 P(NT) 。
H and NH are complimentary events and so are T and NT.
我们来计算一下汤姆感染艾滋病病毒的概率和汤姆不被感染的概率。这意味着我们在寻找事件发生的概率 H 和 NH 。
汤姆是个相当随便的美国人,我们对他一无所知。所以为了计算出他被感染的概率,我们用美国被感染的总人数除以人口数量。
The probability P(H) of Tom being infected and the probability P(NH) of Tom not being infected.
到目前为止,很容易。你还和我在一起吗?因为现在会变得有点棘手。
我们现在对联合活动感兴趣,也就是说,我们将开始混合活动。
Our whole population can be divided into those four groups where the top left for example denotes the event of both T and NH.
我们记得,根据“99%正确”的定义,被感染并得到阳性检测结果的人的比例是 99.5%(这是敏感性)。
同样,未被感染而得到阴性检测结果的人的比例也是 99.5%(这是特异性)。
这意味着我们通过将 0.995 乘以被感染或未被感染的概率来获得联合概率,如下所示:
如果一项测试有 99.5%的正确率,那么它也有 0.5%的错误率。这意味着,没有被感染但检测结果呈阳性的人的比例是 0.5%。然后,我们可以通过下式计算出某人既是 HIV 阴性又是阳性检测结果的概率
我们还需要 P(T) 。查看联合概率的图表有助于我们理解如何计算它。
This is how we can calculate P(T). Note that this is only possible because the two subsets are disjoint (i.e. they have no overlaps).
太好了!我们来计算一下 P(T) 。
厉害!我们快到了。现在,我们需要的是条件概率的定义。
条件概率
条件反射意味着我们“减少”我们的空间。因此,我们不看全部人口,而只看我们控制的那一部分。在我们的例子中,我们知道 Tom 的测试结果是阳性的,所以我们想要以 t 为条件的事件。因此,我们的“新群体”只是测试结果为阳性的群体。所以我们在寻找给定T时 H 的概率。这就是所谓的条件概率。
每当我们知道,我们想要以之为条件的事件,事实上是真的,我们就以某事为条件。在我们的案例中,Tom 已经拿到了他的结果,结果显示他是 HIV 阳性。这意味着 T 是真实事件!
好吧。我们快完成了。我们只需要输入数字,就可以得到汤姆实际上是艾滋病毒阳性的概率,即使他已经得到了阴性测试结果。
40.4%。
就是这个号码。
一个检测结果,汤姆真正感染艾滋病毒的概率“只有”40.4%。
是不是概率很低?没有。
比 99.5%好吗?地狱耶!
让你吃惊了吗?我敢打赌。
我们一会儿会谈到直观的解释。首先,我来回答你更迫切的想法和恐惧。
反过来怎么样?
我知道你现在可能在想什么。你可能在想,“等等,…如果我得到了一个阴性测试结果,这是否意味着我仍然有很高的几率是 HIV 阳性?”
让我们仔细检查一下这个。我们正在寻找给定 NT 的事件 H 的概率。
这真是太低了!所以你很幸运。如果你的测试结果是阴性,你可以非常确定你没有感染病毒。
直观的解释
我记得我第一次必须计算相似数字的概率(把美国和德国互换,调整数字)。
你无法想象我有多困惑,花了多少时间寻找错误。但是不用担心,我们的计算是正确的,直观的解释也相当简单。
想象一下我们测试了美国的每一个人。有 3.28 亿-110 万= 3.269 亿人没有被感染。其中,0.5%的人会得到错误的肯定结果。也就是 163 万人。这远远超过了感染艾滋病病毒的人数。
所以我们没事了。我们的计算是正确的。只是这个数字 99.5%可能没有听起来那么靠谱。
每当我们有两个高度相关但概率非常小的不同事件( H,T )时,条件概率通常会返回不直观的结果。为了说明这一点,我对德国(0.1%感染者)和两个幻想国家 risk land(50%感染者)和 Dreamland(0.001%感染者)做了上述计算。
Infection rates and probabilities that a person is infected if the test results say so.
感染率越低,拿回阳性检测结果就越不容易被感染!
抓狂还是不抓狂?这是个问题。
让我们回到汤姆身上。
- 汤姆应该抓狂吗?大概不会。
- 他会抓狂吗?大概是的。
- 如果他抓狂了会没事吗?当然是了。这完全取决于他。
但是如果我是汤姆,我会再做两到三次检查来确认我的感染状况。
机器学习如何帮助识别药物的有效性和不良反应
通过采用 ML 算法建立用于处理神经药物的文本综述的系统,以有洞察力的和视觉上信息丰富的表示形式提供有效性或不良反应的概述。
Photo by Kendal James on Unsplash
你有没有在网上查找你的普通感冒药,却被它下面列出的副作用数量吓坏了?或者浏览评论部分来验证它们,但被列出的评论数量淹没,如果你有一整天的时间,你可能无法阅读?或者希望有一种简单的方法来知道有多少使用它的人对结果感到满意?
我们大多数人都去过那里,做过那种事。作为人类,我们倾向于选择简单明了的信息,这样我们就可以有效地理解它,同时利用最少的时间和资源。
这同样适用于上述情况,在这种情况下,需要一个全面的、视觉上信息丰富的系统来在一个地方总结关于药物的所有信息,这有助于用户在选择特定药物之前做出明智的决定。
ML 如何帮助这一过程?
以博客或专门网站形式发布的用户药物评论信息具有巨大的分析潜力。然而,这些数据大多是文本数据,这意味着在用于分析之前,需要对其进行结构化和清理。
一个完整的端到端系统会将这些非结构化数据考虑在内,并将其转换为可用的特征,然后由合适的算法使用这些特征来确定该药物在给定的药物评论下是否有效。
因此,最终系统的目标是:
- 提供药物的有效性和不良反应的概述,从单独的自动分类综述中汇总成三个不同的类别,即有效、无效和不良。
- 直观地展示和比较药物的不良反应,进一步深入了解每种药物的评论,并按类别进行排名。
下面我们来分解一下文章中的开发过程。
阶段 1:收集和预处理数据
刮评论:
为了开发一个决定性的系统,一个子集的广泛审查数据可在互联网上被考虑。用于治疗癫痫、癫痫发作和双相情感障碍的神经药物的评论是使用 scrapy 搜集的,scrapy 是一个用于开发定制网络爬虫的 Python 库。
最终数据集由七种药物中每一种的平均 200 篇评论组成,然后以 80:20 的比例分成训练和测试数据集。
Examples of scraped reviews
清理评论:
- 使用自然语言工具包(nltk)中的
sent_tokenize
将评论标记成句子。 - 文本的标准化,包括小写转换、分离变形词和纠正拼写错误的词。
- 使用 nltk 获得单词的词根形式。
review = “But since I started alternating, I haven’t had a seizure”
pre_processed_review = preprocess(review)
print(pre_processed_review)['but','since','I','start','alternate','I','have','not','had','seizure']
在这一步中保留停用词、否定和标点符号,以尽可能保留评论中包含的信息。在这一步结束时,清理后的句子就可以被归入适当的类别了。
标注训练数据集:
这句话可以分为三类:
- 有效:指使用该药物后,患者健康状况得到改善的综述。
- 无效:这些综述暗示患者的病情没有变化或恶化,但没有提及使用药物后的任何不良反应。
- 不良反应:综述中明确提到患者使用药物后的不良反应。
建立了一个自动标注器,它根据三个参数来评估句子。
- 由一系列“问题”单词组成的字典,这些单词通常出现在反类别句子中。
problems='hallucinations weakness hairloss tired hair loss nausea shakiness tremor tremors stones weight pounds flu flus lbs drowsiness dizziness appetite manic maniac cold vomiting seizures nauseous vision inflammation tingling numb numbness swollen swelling depression attacks blisters skin rash diarrhoea headache headaches head severe fever sleep pain stress numb'
2.句子中单个单词的 POS(词类)标记,使用 nltk 库生成。POS 标记流程和标记的详细描述可在此处找到。
review = 'laying down is excruciating and im in the process of running test'[('laying', 'VBG'), ('down', 'RP'), ('is', 'VBZ'), ('excruciating', 'VBG'), ('and', 'CC'), ('im', 'NN'), ('in', 'IN'), ('the', 'DT'), ('process', 'NN'), ('of', 'IN'), ('running', 'VBG'), ('test', 'NN')]
3.每个句子的复合 VADER 情感得分。VADER 是一个 python 模块,用于根据极性(积极或消极)和强度(得分)对评论的情绪进行评分。复合得分是一个介于-1 和 1 之间的整数值,用于评估文本中传达的情感。值 0 是表示中性情绪的标度的中心点。
from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer
def analyze_sentiment(df):
sentiments = []
sid = SentimentIntensityAnalyzer()
for i in range(df.shape[0]):
line = df[‘Review’].iloc[i]
sentiment = sid.polarity_scores(line)
sentiments.append([sentiment[‘neg’], sentiment[‘pos’],
sentiment[‘neu’], sentiment[‘compound’]])
df[[‘neg’, ‘pos’, ‘neu’, ‘compound’]] = pd.DataFrame(sentiments)
return df
Original reviews with VADER Sentiment Scores and category labels.
因此,我们开发了一个初步的评论标注方案,并通过人工标注句子对其进行了进一步的完善。
Pro-tip by Richard Socher highlighting the effectiveness of manual labeling.
被自动标注器错误分类的评论由两个独立的标注器手工标注,冲突由公正的第三个标注器解决。该数据集随后由医疗卫生专业人员进行验证。
训练集现在准备好输入到分类算法中。
阶段 2:选择正确的方法
矢量化:
矢量器用于将每个单词转换成向量,其大小等于整个文档集合(评论)中单词的唯一计数。这种方法被称为“单词袋”模型。该模型将文本转换成机器学习算法所需的数字特征形式。
例如,对某种药物的评论写着“这种药物使我变得更糟”,而另一篇评论说“这种药物使我变得更好”。评论中的独特词的数量被发现是 7 个(“这个”、“药物”、“已经”、“制造”、“我”、“更差”、“更好”)。
因此,审查的方向是
- 这种药让我变得更糟了
- 这种药让我变得更好。
我们可以使用计数矢量器方法(创建单词*评论大小的稀疏矩阵)或术语频率-逆文档频率(TF-IDF)方法(测量单词的频率以及该单词在集合中的稀有度)。
你可以在这里了解更多关于这两种方法及其实现的信息。
创造二字和三字:
在自然语言处理中,文本文档中的每个单词被称为一个“元”。因此,共现单词的组合被称为 n 元语法,其中 n 是所考虑的组合的长度。
例如,“双相情感障碍”将是我们的语料库中经常出现的组合。因此,它可以用一个双词来表示,而不是单个单词“双相”和“障碍”,因为这两个单词可能不会频繁地作为单独的单词出现。
bigram = gensim.models.Phrases(words, min_count=5, threshold=100)
trigram = gensim.models.Phrases(bigram[words], threshold=100)
bigram_mod = gensim.models.phrases.Phraser(bigram)
trigram_mod = gensim.models.phrases.Phraser(trigram)def make_bigrams(texts):
return [bigram_mod[doc] for doc in texts]def make_trigrams(texts):
return [trigram_mod[bigram_mod[doc]] for doc in texts]
可以使用 Gensim(如上所述)或通过使用 scikit-learn 的特征提取模块在矢量化过程中自动生成二元或三元模型,将二元或三元模型作为特征获取。
选择算法:
评论需要分为三类,即有效、无效和不利,因此我们需要使用多类分类器而不是二元分类器。
为了进行对比分析,使用了四种多类算法进行类别预测。
- OneVsRest SVM 分类器:
它涉及为每个类拟合一个 SVM 分类器,同时将所有其他类视为一个类,有效地将问题转化为一个二元分类问题。
此处显示了吴恩达球场的 OneVsRest 分类图解(通过 stats.stackexchange 此处)。 - 逻辑回归多类分类器
- 随机森林分类器
- 基于逻辑回归的 bagging meta-estimator:
这种集成技术使用数据的随机子集来拟合基本类型的单个分类器,然后聚合它们的预测以获得单个预测。
下面给出了使用 scikit-learn 训练和测试上述分类器的代码。
创建特征选择:
算法的性能通过反复试验的方式针对各种特征选择进行了测试。因此,通过结合矢量化技术、被认为是特征的词的数量和评论的情感分数,产生了各种特征组合。下面显示了一个示例
from sklearn.feature_extraction.text import TfidfVectorizervectorizer = TfidfVectorizer(ngram_range=(1, 2), max_features=15000)
vector = vectorizer.fit_transform(corpus)df2 = pd.DataFrame(vector.toarray())
df_final = pd.concat([df2, reviews], axis =1)
Top 15000 word vectors + VADER Sentiment Scores.
这里,我们使用 TF-IDF 将前 15,000 个出现的单词及其二元模型(因为 ngram_range 设置在 1-2 之间)转换为特征向量。每个评论的向量与 VADER 情感分数相结合以获得特征,这些特征将被馈送到分类算法以决定该评论的类别。
类似地,如下创建 7 个其他这样的特征集:
- FS-1:计数矢量器
- FS-2:计数矢量器+ VADER 情感分数
- FS-3:计数矢量器前 10000 个特征+ VADER 情感得分+ n 元语法范围 1–3
- FS-4:计数矢量器所有特征+ VADER 情感分数+ n 元语法范围 1–3
- FS-5:tfidf 矢量器
- FS-6:tfidf 矢量器+ VADER 情绪得分
- FS-7 : Tfidf 矢量器前 10000 个特征+ VADER 情感得分+ n 元语法范围 1–3
- FS-8 : Tfidf 矢量器前 15000 个特征+单词标记化分析器+ VADER 情感分数+ n 元语法范围 1–3
阶段 3:可视化结果
我们以三种格式呈现系统结果:综述分类器、使用 TextRank 的每个类别的摘要以及用于药物比较的综述的交互式可视化绘图。
f1 评分评估:
reviews.groupby("Category").count().CategoryAdverse 1089
Effective 1276
Ineffective 335
我们使用 sklearn 的 f1_score 度量模块中的加权 f1 得分度量来评估性能,因为它具有在多类分类问题中考虑类不平衡的额外优势。它计算每个类的 f1 分数,并通过考虑每个类的支持(如上所示的实例数量)来平均它们。
Various approaches, feature selections, and their respective weighted f1-scores
使用特征选择 8 和逻辑回归方法获得大约 0.74 的 f1 分数。
通过 TextRank 对评论进行排名
TextRank 算法使用 TF-IDF 向量的相似性图来计算每个节点的重要性。与大多数其他评论最相似的节点或评论被认为是其所属类别的“中心”。
Top reviews for the effective category with similarity scores
在这里,有效类别的评论是针对特定药物进行排名的。短语“最佳药物”、“帮助了我很多”、“没有它就无法生活”最能反映有效类的主题,因此使用 TextRank 将包含它们的评论排在顶部。
类似地,将不良类别评论与不良反应字典进行比较,并为药物引起的不良反应生成发生排序图。
Occurrence-ordered graph for adverse category reviews.
使用散景的交互式可视化
webapp 使用 Bokeh(python 中的一个交互式可视化库)来呈现交互式条形图,以便为用户显示药物的并排比较。
bokeh 服务器用于启动服务,该服务响应 webapp 上的更改,以触发更新绘图数据的回调。这些更改由 webapp 的浏览器进行同步,并相应地更新绘图。
要运行散景服务器,通过运行命令在 app.py 中调用一个方法
bokeh serve myapp.py
可视化在本地主机端口 5006 呈现,该端口可以集成到 app.py 中
Bar graph dynamic update in Bokeh using checkboxes.
这里给出了使用散景进行交互式可视化的完整代码。
该代码包含三个主要函数make_dataset
、make_plot
和update
,分别用于创建数据框及其值、静态绘图和基于复选框状态(选中或未选中)更新数据。最后,使用curdoc()
将情节和控制元素放在一起,并将输出呈现给 web 浏览器。
摘要
我想创建一个以用户为中心的 web 应用程序,帮助患者了解更多关于过去使用过类似药物的其他人的经历,并省去他们在在线论坛上阅读数百篇评论的麻烦。
在未来,该系统可以通过提供对评论的认证的支持、考虑其他领域的评论以及通过使用神经网络来提高效率而在许多方面得到改进。
感谢我出色的队友们,是他们努力将这个想法变成现实。
有什么建议可以随意评论。我希望听到您的反馈!
这个网络应用现在在 Heroku 上,预测者在这里。
来自《走向数据科学》编辑的提示: 虽然我们允许独立作者根据我们的 规则和指南 发表文章,但我们并不认可每个作者的贡献。你不应该在没有寻求专业建议的情况下依赖一个作者的作品。详见我们的 读者术语 。