TowardsDataScience 博客中文翻译 2020(四百四十八)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

移动定位数据如何帮助您减少新冠肺炎的风险

原文:https://towardsdatascience.com/how-mobile-location-data-could-help-you-limit-exposure-to-covid-19-cb821b560809?source=collection_archive---------66-----------------------

随着纽约市进入重新开放的第一阶段,这里是过去 6 周热门购物区的人流高峰。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

鉴于最近的抗议活动,人们可能会担心手机追踪。我们希望确保我们使用的数据是真正匿名的。除了帮助人们在跑腿时减少新冠肺炎暴露,我们无意分析步行交通。

出于任何目的走出家门已经成为让自己暴露于新冠肺炎的邀请,但是我们可以采取什么措施来限制我们的风险呢?

在线购物平台已经超载了大部分社会隔离的订单,使得在 3 月底和 4 月初几乎不可能获得送货,特别是在外围行政区。有时选择是有限的,无论是去银行,洗衣服,还是为接下来的几个星期采购物品,这样的旅行是不可避免的。

但是,除了起床去杂货店或邮局之外,我们还能做些什么来避免在街区周围排队呢?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

从左到右杰克森高地、联合广场、减压阀公园区域的移动位置数据

随着纽约市确诊病例的减少,天气开始感觉像夏天,抗体检测仍然容易出错,新冠肺炎检测仍然供不应求。回归“正常生活”的症结在于感染者和易感者在互不知晓的情况下混杂在一起导致新病例的涌入。

正如我们在新加坡和韩国看到的那样,在没有缓解高暴露情况的明确战略的情况下重新开放,随后又出现了新的病例。4 月下旬,新加坡成为南亚病例最多的地方。韩国在重新开放的第一个星期后,新病例激增,与一个多月前的情况相当。

除了重新开放和恢复封锁的来回摆动,我们对行人交通的意识是否有助于平坦化曲线?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

数据分析 NYC 和 Predicio 使用过去一个月的匿名移动位置数据来了解我们城市中一些人口最稠密的零售区的客流量如何每小时、每周波动,以便您可以使用这些见解来获得更安全的购物体验并缩短您的旅行时间。

Predicio 为您带来了用于分析的匿名移动数据,这是一家新兴的基于位置的行为智能初创公司,提供符合 GDPR 和 CCPA 标准的位置数据,这些数据来自用户同意共享其位置的应用程序。

我们首先通过在大纽约地区 10 x 10 英里半径范围内每小时 100,000 个匿名移动位置点的随机样本进行研究来查看数据,以在一个月的过程中每周二每小时生成我们的可视化结果。

在我们感兴趣区域的 100,000 个数据点中,我们查看了感兴趣点周围四分之一英里半径内的步行交通密度,并生成了这些可视化结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们还想让人们看到,一天中,每小时的行人流量是如何相互比较的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在我们感兴趣点周围四分之一英里的移动数据的统一样本中,步行交通计数

由于直方图每天波动很大,我们合并直方图,取上个月的中值客流量。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4 月 21 日至 5 月 15 日期间,我们感兴趣点周围四分之一英里内的中值客流量

正如人们所看到的,取中值步行交通,这消除了在我们的一般模式中边缘观察的异常值,给出了与我们的交通假设相关的更平滑的分布,因为它与正常的睡眠时间表相关。

我们推断最不拥挤的时间是商店开门的时间和商店关门前的晚上。

我们得出这一结论的基础是,我们感兴趣的地点每周二的营业时间是上午 9 点到晚上 8 点,然后从每小时的客流量中扣除。随着商店临近开门时间,我们看到一个小时前开始的客流量激增。从开放时间到下午,客流量确实有所波动,但与下午 7 点(关门前一小时)相比,客流量仍然很高。

人们不喜欢晚上去跑腿是有道理的。谁知道商品是否会脱销,更糟糕的是,如果位置拥挤,人们可能无法在商店关门前完成任务。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4 月 21 日-5 月 15 日,从我们的兴趣点开始,四分之一英里半径内的 25 天内的日常波动

我们观察数据的其他方法是观察更长的时间跨度,以一天为基础,以我们发现的模式为基础。

在左边和底部的图中,我们没有把时间分成几天,而是在视觉上看到了连续的几个小时。然后,我们使用 ARIMA 模型进行了一些时间序列分析,以获得在几天、几周和几个月内重复模式的总体感觉,并对不同时间跨度内发现的模式进行了实验。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在连续几个小时内拟合 ARIMA 模型。X 轴代表我们的样本人数,Y 轴代表从 4 月 21 日上午 12 点开始的时间。(即。第 25 小时是 4 月 22 日凌晨 1 点)

如你所见,很大一部分工作是从噪音中分离出信号。我们还对观察数据的位置进行微调的一种方法是,更好地将我们的移动数据点隔离到我们感兴趣的点所在的区块内。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

聚焦在宾州车站,看着一个街区

以下是我们如何与谷歌地图为宾州车站过滤掉宾州车站所在街区以外的所有其他步行交通的周二平滑图进行比较:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来自谷歌地图的宾州车站

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

可以看出,由于各种原因,如某些用户在手机上更活跃,以及我们有限的样本强化了我们的结果,基于我们的数据,步行流量存在较大差异。

如果你想知道我们是如何得到视觉效果的,下面将以教程的形式向你展示我们分析的技术层面。

在这里获取数据

的 Predicio 数据门户中,我们按小时提取数据,过滤感兴趣的地理半径,选择一个特定的位置作为关注点,然后做进一步的分析。下面展示了我们是如何做到的,以及如何操作位置信息!

只要有经度、纬度和时间,就可以使用任何位置数据。这里有两个类似的开放数据集可供尝试:纽约市关于行人交通的开放数据门户统计了穿过布鲁克林大桥的行人数量,或者是一个预先配置的数据集,其中包含人的数量和利兹市议会提供的八个特定的高流量位置

根据您拥有的数据,您可能需要专注于您想要关注的内容,并将其转换为适当的日期时间。以下代码浓缩了您可能需要进行的一些争论。

以下是您可能决定用来组织数据的示例步骤:

1.缩小关注范围,将你的辩论功能只应用在这个领域。

2.创建一个新的数据框,仅过滤我们感兴趣点的距离。

3.绘制每小时的热图,并保存截取的截图。

def wrangle(X): X = X.copy()
    X = X.sample(<number to pass in>, replace=True) X['date_EST'] = pd.to_datetime(X['timestamp'], unit='s')
    X['date_EST'] = X['date_EST'].dt.tz_localize('UTC')\
                                 .dt.tz_convert('US/Eastern')
    X['date'] = X['date_EST'].dt.date
    X['hour']  = X['date_EST'].dt.hourreturn X

在我们的分析中,我们在目标位置周围每小时 14 x 14 英里的半径范围内采集了 100,000 个样本。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

然后,我们使用 wrangle 函数处理我们的 2,400,000 个样本,以获得正确的日期时间格式。

由于过滤过程需要花费大量时间,我们将循环包装在 TQDM 中,以查看过程的进度条。

df_container = []
total_rows = 0
cols = ['timestamp', 'lat', 'lng']for i in tqdm(range(24)):
    i = str(i).zfill(2) for j in range(5):
        try:
            df = pd.read_csv(f'<file_to_read_in \
                         {<dynamic number to process,i>} \
                          rest_of_file_name
                         {<dynamic number to process, j>}>', \
                          delimiter = '\t', \
                          error_bad_lines=False, \ 
                          usecols = cols)
            #keeping track of the total amount of rows for reference
            rows, _ = df.shape
            total_rows += rows #selecting only data that is in the 
            #area of interest while reading the data in
            df = df[(df['lat'] > <latitute min>) & \
                    (df['lat'] < <latitute max>) & \
                    (df['lng'] < <longitude min>) & \
                    (df['lng'] > <longitude max>)] df = wrangle(df)
            df_container.append(df) except:
            continuedf_sample = pd.concat([df for df in df_container])

现在我们有了一个带有适当时间的数据帧,我们将使用 Geopy 创建一个新列,显示我们与感兴趣位置的距离,从而精确定位我们的位置。

lat = <your latitude>
lng = <your longitude>df_sample['distance_in_km'] = [distance.distance((lat, lng), (i,j)).km for i, j in tqdm(zip(df_sample['lat'], df_sample['lng']))]

然后,我们创建了一个新的数据帧,该数据帧仅隔离到感兴趣点的距离小于 0.5 公里或四分之一英里半径的点。

df_point_of_interest = df_sample[df_sample['distance_in_km'] < 0.5]

为了在 matplotlib 中创建直方图,我们将数据帧绘制成一组,如下所示:

df_point_of_interest.groupby('hour') \
                    .count() \
                    .reset_index() \
                    .plot.bar(x='hour', y='timestamp', \
                              color = 'orange', width=0.9, \
                              figsize=(10,6));

将数据过滤到一个块内的引脚点

我们隔离特定位置的方法是在绘图软件中绘制多边形,类似于连接点,然后将多边形形状转换为. shp 文件,如下所示。我们展示了一个宾州车站的例子:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

为了仅过滤多边形内的移动数据点,我们将经度和纬度坐标地理编码到 geopandas 数据帧中,然后创建一个新列来保存我们的点是否在形状中的条件的结果。

最后,我们执行数据帧过滤,仅提取形状内的数据帧行。

gdf = geopandas.GeoDataFrame(df,
      geometry=geopandas.points_from_xy(df['lng'], df['lat']))gdf = gdf.assign(**{'within_shape': gdf.within(i) for i in shapefile_df['geometry']})new_df = gdf[gdf['within_shape'] == True]

以下是我们筛选的结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

将我们的数据隔离在一个街区内

通过过滤我们的数据,我们可以安全地排除我们感兴趣范围之外的数据。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

从左至右,布朗克斯区、曼哈顿熨斗区和宾州车站的一些受欢迎的购物目的地

使用热图可视化数据

为了生成上面的热图,我们使用了 follow,这是一个围绕 fleet . js 的包装器,可以制作漂亮的交互式地图,可以在任何浏览器中查看。

我们想出的生成热图的脚本的工作方式如下:我们介绍我们的脚本,每小时循环一次视觉图像,分为以下多个部分:

1.对于每个小时,创建一个仅针对特定小时过滤的数据帧

2.热图接收经度和纬度坐标的数组以及其他参数中的叶子图设置。

3.在一个 url 名称下保存叶子地图,然后用 Selenium,进入 url 并截图保存。

在 0 到 23 小时之间的 for 循环中,我们创建一个新的 dataframe,只过滤有问题的小时,然后生成一个图。

folder_path = <path to save our images to>for i in tqdm(range(24)):
    options = webdriver.ChromeOptions()
    options.add_argument('--headless')
    options.add_argument('--no-sandbox')
    options.add_argument('--disable-dev-shm-usage') # open it, go to a website, and get results
    wd = webdriver.Chrome('chromedriver',options=options)
    path = os.getcwd() # filtering dataframe per hour
    hour = df_point_of_interest[df_point_of_interest['hour'] == i]

对于绘图,我们首先实例化一个地图对象,设置地图的中心,指定地图主题,然后指示缩放级别。下面的代码片段是上面 for 循环的延续。

 # instantiating the map
    point_of_interest_map = folium.Map(location=[lat, lng],  \
                                       tiles='Stamen Toner', \
                                       zoom_start=14)

对于热图对象,我们传入一个经度和纬度列表,然后指定热图的半径、最大缩放并添加到我们刚刚实例化的地图中。下面的代码片段是上面 for 循环的延续。

 # adding mobile points to map
    HeatMap(data= hour[['lat', 'lng']] \
            .groupby(['lat', 'lng']) \
            .count().reset_index() \
            .values.tolist(), \
            radius=10, \
            max_zoom=13) \
            .add_to(point_of_interest_map)

最后,我们为。html,然后在那个位置保存我们的叶子图。下面的代码片段是上面 for 循环的延续。

 mapfile = f'point_of_interest_hour_{i}' # saving map as default Folium html
    point_of_interest_map.save(f'{mapfile}.html') # creating pointer towards file location
    tmpurl=f'file://{path}/{mapfile}.html' # getting html map into memory and giving it time to load
    wd.get(tmpurl)
    time.sleep(random.randint(5,8)) # saving it as screenshot to covert from html to png
    wd.save_screenshot(f'{shared_folder_path}{mapfile}.png')
    wd.quit()

我们使用 Selenium web driver 访问网页并截图,保存,然后退出。下面的代码片段是上面 for 循环的延续。

 # opening the screenshot in memory
    im = Image.open(f'{shared_folder_path}{mapfile}.png') # getting the height
    width, height = im.size # crop from top left coordinate at (0,0)
    # crop to the bottom right at(with, height)
    im = im.crop((int(150), int(150), int(width), int(height)))

到目前为止,我们的输出看起来像下面的彩虹和黑白图像。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们保存的叶子图(左)然后被注释(右)

因为我们希望我们的可视化效果更有感染力,所以我们首先在 Photoshop 这样的照片编辑程序中做了一些风格上的决定,然后我们自动化了这个过程,在 Python 中批量执行注释。

我们使用 Pillow,一个图像库来改变热图的色调和饱和度,从彩虹渐变到洋红色和青色。我们还将黑色和灰色的地图背景缓和为深蓝色,并应用了文本。我们计划在以后的文章中展示一个关于图像处理的教程。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

上面这张图片也使用 Pillow 进行注释,是在 Datashader 中生成的,data shader 可以很好地处理大型数据集。Datashader 与 Dask、Holoviews、Bokeh 和 Geoviews 集成在一起,可以创建动态的、可缩放的地图,覆盖在地图瓦片上。这个默认的代码片段用于生成静态可视化,然后通过 Pillow 编译成. gif 文件:

agg = ds.Canvas().points(hour_df, 'lng', 'lat')
    utils.export_image(tf.shade(agg,cmap=bgyw),filename=img_file_name, background="black", fmt=".png")

我们和你一样,仍然被所有城市照亮的数字的力量所包围。随着纽约市在未来几周开始重新开放,我们希望你保持安全。

谢谢你的来访!

非常感谢你和我们一起学习。如果您想就此项目展开对话,请随时联系我们。

鸣谢:感谢 Jef Ntungila 实现了高效的辩论、统计分析、绘图和优化。

MonetDB 如何利用现代 CPU 性能

原文:https://towardsdatascience.com/how-monetdb-x100-exploits-modern-cpu-performance-9b3a395b5a2b?source=collection_archive---------31-----------------------

现代 CPU 经历了重大的发展。但是 MonetDB 如何利用这种发展来最大化其性能呢?

在过去的三十年里,计算机处理器有了显著的发展。这种发展不仅包括它所拥有的晶体管数量的增加,还包括架构的演变。因此,应用程序需要适应 CPU 的工作方式,以最大限度地发挥其潜力。与 CPU 本身一样古老,数据库系统一直是现代工业的支柱。但是数据库社区已经设法将 CPU 能力发挥到极限了吗?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

克里斯蒂安·威迪格在 Unsplash 上拍摄的照片

尽管 CPU 得到了积极的发展,但现有的数据库系统无法利用这一优势,因为它们只能实现低指令/周期 (IPC)效率。他们主要使用一个火山查询执行模型,这是造成这种低效率的原因。volcano 模型使用一种称为“一次一个元组”的处理模型,它在一个 CPU 周期内执行一个元组。因此,它引入了解释开销,并通过执行循环流水线阻碍了 CPU 执行并行执行的能力。在 MySQL 数据库系统中的观察表明,实际计算只占总执行时间的 10%[2]。剩下的 90%是解释开销,比如创建和查找哈希表,获取 MySQL 数据的第 n 个字段,复制数据进行处理。

解决这些效率低下的问题

记住这些背景,现在让我们深入了解 MonetDB 如何处理这些低效问题。MonetDB 是一个列式数据库,它试图通过消除数据库系统中存在的开销并使用不同的记录处理模型来利用最大的 CPU 能力。一般来说,MonetDB 一次执行多个记录,这样既能实现循环流水线,又能减少太多的开销。

按列执行

MonetDB 引入了一种称为二进制关联表(BAT)的列式数据布局。单个 BAT 数组在单个数据库列中保存所有值。通过这样做,我们现在可以将操作符应用到这个 BAT 数组中,而不是单独应用到每个数据项。此外,在数据阵列上运行相同的操作,CPU 现在可以应用循环流水线。

我们在这篇文章中讨论了很多循环流水线。但是什么是循环流水线呢?请看下图。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片来自:https://www . Xilinx . com/support/documentation/SW _ manuals/Xilinx 2015 _ 2/SD SOC _ doc/topics/calling-coding-guidelines/concept _ piping _ loop _ unrolling . html

在一个过于简单的定义中,我们可以看到一个 CPU 指令由三个阶段组成:读取、计算和写入(查看这个维基百科页面中关于 CPU 周期的详细解释)。正如我们所见,循环流水线使 CPU 能够开始执行下一次迭代,而无需等待上一次迭代完成。放入数据处理的上下文中,循环流水线将使 CPU 能够开始读取下一个数据项,同时仍然计算当前数据的结果。因此,整个环路将具有更低的延迟。

当我们使用 BAT 数组时,这种循环流水线是可能的,因为我们有一个数组的概念来循环。然而,如果我们一次计算一个元组,这是不可能的,因为在一个元组上循环是没有意义的!在这种情况下,执行将按顺序进行,其中一个元组需要等待前一个元组完成后才能执行。

MIL 代数

MonetDB 为其查询语言引入了 MIL (MonetDB 指令语言)代数。它可以是 RDBMS 方面的关系代数。然而,与关系代数相反,密耳代数没有自由度。在 MIL 代数中,操作员有固定的参数和数据布局来处理数据。MIL 上的操作员将把该操作员的功能映射到 BAT 中的整个数据项。

X100 发动机

到目前为止,看起来 MonetDB 实现已经解决了我们指出的所有问题。但是,我们需要注意,MonetDB 是通过执行全列具体化来执行查询的。这意味着它将首先尝试在 CPU 缓存中具体化输入。但是,随着正在处理的数据的大小不断增加,CPU 缓存将无法容纳这一完整的列具体化,而将使用主内存。这使得系统现在受到内存带宽的限制,因此它将无法保持它所获得的高 CPU 效率。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片来自:https://semi engineering . com/enabling-higher-system-performance-with-NV DIMM-n/

为了解决这个问题,MonetDB 开发了一款名为 X100 的改进型引擎。它引入了一种平衡的方法,避免了一次一个元组的处理,但管理了物化,使其不会占用内存带宽。这是通过仅根据向量而不是整个列来实现的。向量是整个列项目的片段。应该设置向量的大小,使其适合 CPU 缓存。通过这样做,内存带宽限制将不会阻碍高 CPU 效率的实现。

技术性能分析

为了分析矢量化查询处理的性能优势,我们将看到在 MonetDB/X100 到 MonetDB/MIL 和 MySQL 上执行的 TPC-H 基准测试的实验结果。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片来自:彼得·A·邦茨、马钦·祖科夫斯基和尼尔斯·内斯。2005.MonetDB/X100:超级流水线查询执行。在 CIDR,第 5 卷。225–237.

从实验中我们可以得到的第一个观察结果是 MonetDB/X100 能够在每个元组很少的 CPU 周期内运行所有原语。例如,乘法原语每个元组只运行 2.2 个周期,而 MySQL 上每个元组运行 49 个周期。每个执行原语所需的周期越少,整体性能越快。

第二个观察是关于内存基准限制。由于 MonetDB/X100 仅体现为向量,因此将由图元处理的数据从 CPU 缓存中检索,而不是从主内存中检索。这使得 MonetDB/X100 能够实现 7.5GB/s 的带宽。另一方面,MonetDB/MIL 达到了仅 500MB/s 的内存带宽限制,因为图元需要从主内存中检索数据。作者还提到 MonetDB/X100 应该对缓存的数据进行操作,而列向量布局的实现并不意味着优化内存布局。

最后,作者指出了向量大小对整体性能的影响。向量的大小应该相对较小,以便可以放入缓存中。但是,如果我们把它设置得太小,我们将失去 CPU 并行性,并增加解释开销。在极端情况下,将向量大小设置为 1 将导致一次一个元组的操作。另一方面,作者还报告了当向量大小太大,即 CPU 缓存无法容纳时的性能下降。

结论

我们看到精心设计的数据库如何能够最大限度地发挥现代处理器的潜力,并比没有解决这个问题的数据库性能好得多。MonetDB 通过以一次一个向量的方式执行数据来利用循环流水线功能。不仅增加了 CPU 中的并行执行,而且通过根据向量而不是整列来执行具体化,避免了内存带宽瓶颈。

MonetDB 是一个长期的研究课题。如果你有兴趣了解更多关于 MonetDB 的知识,你可以在 google scholar 上查看他们的出版物。您也可以查看主页查看其当前状态。这也是一个开源项目,你也可以在其中做出贡献。你可以在Github 页面访问他们的镜像库。

参考文献:

[1]彼得·亚历山大·邦茨等人,2002 年。Monet:面向查询密集型应用的下一代 DBMS 内核。阿姆斯特丹大学[东道主]。

[2]彼得·邦茨、马尔钦·祖科夫斯基和尼尔斯·内斯。2005.MonetDB/X100:超级流水线查询执行…Cidr,第 5 卷。225–237.

数据科学家挣多少钱?

原文:https://towardsdatascience.com/how-much-do-data-scientists-make-2f58132fe5cf?source=collection_archive---------20-----------------------

我在硅谷的五年数据科学生涯

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来自 Unsplash 的图像

今天,我们来谈谈数据科学的薪水。

显然,这是一个很大的——通常是禁忌的——问题,可以问任何人,所以本着完全透明的精神,我将告诉你自从我毕业以来,我在所有数据科学职位上赚了多少钱。

首先,我们来讲一些基础知识。

你的薪酬将在很大程度上取决于你为之工作的公司,比如他们的规模,他们愿意给你多少资金,以及许多其他因素。这也取决于你-你的经历,你的职业发展,以及多少钱对你真正重要(取决于你申请的职位)。

关于我将要介绍的数字的背景,让我们来看看一些行业统计数据。如今,Glassdoor 列出的数据科学平均年薪为 112,000 美元。Indeed 的平均工资为 12 万美元,而 PayScale 的平均工资略低,为 9.5 万美元。

在天平的另一端, levels.fyi 的数据科学工资中位数为 15 万美元,旧金山湾区的工资中位数为 23.8 万美元。出于好奇和完全的怀疑,我试着提交了一份 40 万美元的假工资,他们还是接受了,所以谁知道呢?

请看这篇关于 2022 年数据科学家薪酬的深度分析!

大学毕业后的第一份数据科学薪水

2015 年大学毕业后,我有两份不同的工作邀请等着我。

第一份来自一家名为 Workday 的公司,他们向我提供了 95000 美元的基本工资和 4 年内 60000 美元的股票。就总薪酬而言,这相当于每年 11 万美元。他们需要填补的职位实际上是性能方面的软件工程师,这就是为什么我最终没有接受这份工作。

第二份工作邀请来自于 Inflection,他们正在寻找一名市场分析师,基本工资为 85,000 美元,外加 5000 美元的签约奖金。

那么,为什么我最终接受了一份比另一份少 25000 美元的工作呢?

嗯,当我大学毕业后在 Workday 面试时,他们实际上没有问我任何技术问题。采访很随意——我们谈笑风生,谈论的大多是我过去做过的项目。

最终,虽然我对这份工作真的很满意(大学毕业后赚六位数对我来说是疯狂的),但我认为营销分析师的角色对以后过渡到数据科学更有帮助,我也更兴奋地从我的老板那里学到了东西。

如果你对我如何获得大学毕业后的第一份数据科学工作感兴趣,请查看我的新毕业生数据科学指南和我在 youtube 上的视频 l 和一份没有经验的数据科学工作

第一数据科学家职位工资

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来自 Unsplash 的图像

作为一名新毕业生,我在旧金山湾区一年挣大约 85000 美元,这绝对是一个生活非常昂贵的地方。我税后的实得工资和所有的东西大约是每月 4000 美元,所以,你可以想象,我没有太多的积蓄。

很快,我意识到这是我生存所需的最低量。作为一个没有见过那么多钱的职场新人,看到这些大数字在现实生活中变得少了很多可能会有点扭曲,但我认为这对一个新毕业生来说是一个好机会。

然而,在拐点工作了大约三到四个月后,我开始觉得这家公司并不真正适合我。我没有学到很多东西,我的老板在头两周就离开了,所以几个月后我决定离开去寻找其他机会。

在这一点上,我为没有在 Workday 担任那个职位而自责,但我最终在 Jobr 接受了一份新工作,这实际上是我找到这个职位的地方。他们向我提出了一个数据科学家的职位(特别是从事推荐算法的工作),最终,有人出价 8 万美元,并拥有 0.5%的股权,因此我的基本工资将减少 5000 美元。

Equity 的工作基于当时对公司的评估,在 1000 万美元左右。通过那次评估,Jobr 筹集了 200 万美元,所以我 0.5%的股权份额意味着我有权在四年内获得大约 5 万美元,而且这一价值还有可能增加。

在我的雇佣合同中,他们还加入了一项条款,如果他们提高了首轮融资,一旦首轮融资通过,我的基本工资将升至 10 万美元。

在这一点上,我有点觉得不接受这份工作是愚蠢的,因为没有人真正有兴趣雇用我。

创业收购:我赚了多少?

所以这就是运气发挥作用的地方。在我的工作岗位上工作了六个月后,Jobr 被 Monster 以 1250 万美元的价格收购,Monster 当时正在查看我公司的 Tinder-for-jobs 类应用程序。使用这个值,你会认为我中了头彩,我的股票份额在 62,500 美元左右。可惜没有。

如果你不熟悉收购,基本上当一家大公司收购一家小公司时,会有很多律师、经纪人、投资者和其他中间人参与其中。总的来说,你可以预期大约三分之一你原本应该得到的金额会被一群不同的人得到,即使它超出了公司提出的评估(就像在这个案例中一样)。

税前,我最终拿回家大约 40,000 美元,在 Jobr 工作的第一年大约 150,000 美元。

总而言之,我想这里的教训是,不断发展你的技能很重要,因为这是你被雇佣的原因。钱来得更晚(再加上一点点运气!),但它有助于你在当前的环境中首先为成功做好准备。

所以收购之后,earnout 也给了出去。基本上,收入目标是为某些指标设定的,如果你达到了这些指标,你最终可以从收购中获得更多。按照我合同上写的方式,我基本上可以在收购后每年再收到 4-5 万美元。

我们最终预测,我们将达到其中的 90%左右,所以第一年后,我的实得收入最终约为每年 15 万美元

2017 年,Jobr 的整个公司与母公司协商加薪,所以我的基本工资增加到了13 万美元,这样我每年的总薪酬为 17 万美元。

我在 Nextdoor 的最后一份数据科学家薪水

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片来自 Pixabay

2018 年,我大学毕业的第三年,最后又跳槽了。我在 Jobr 认识的所有人都已经离开了,包括我现在的联合创始人谢恩。工作文化已经改变,我真的想找到另一家真正适合并支持我需求的公司。

我知道,除非我去大公司面试,否则我的总薪酬可能会减少,但此时我的主要精力是找到一个我真正喜欢的地方。

我报名参加了招聘,在我设定了基本工资(15 万美元)的要求后,Nextdoor 最终找到了我。事后看来,既然我已经对谈判和面试有了更多的了解,我就不建议用录用了。一旦你把你的薪水设定在某个门槛,公司在和你谈判时就会用这个门槛,设定一个低于他们实际能分配给你的薪水期望值。

这样,最好在面试结束前不要期望薪水,但我仍然认为,如果你并不想去申请 X 个职位,那就去一个好地方找工作。

所以和 Nextdoor 在一起,我经历了整个过程(包括现场面试),所以我在和大家见面的时候对公司是有好感的。我的出价最终约为 145,000 美元,这比我在招聘信息中的预期要低。

对我来说,这是一个巨大的信号,表明他们的意图是从低价格开始,这样我们就可以谈判。最后,我谈妥了高达 155,000 美元,外加 20,000 美元的签约奖金,所以我第一年的总薪酬是 175,000 美元。我的报价也包括一些股权,但对于像 Nextdoor 这样的长期独角兽来说,这很难计算,因为你真的不知道他们什么时候会退出。

目前,我在 InterviewQuery,年薪肯定不到 17.5 万美元。如果我选择了另一份数据科学工作,根据我的职业发展来估计,我可能会获得大约 19 万美元的基本工资,如果是在脸书、谷歌或亚马逊等公司,可能会更多。

数据科学工资:技巧和窍门

如果你正准备进入谈判过程,或者如果你只是想打破数据科学的工资数字,这里有一些有用的规则,可能会改变你看待事情的方式。

永远不要拿自己和别人比较。

老实说,这只是一个总体上不公平的比较。试图将不同的数据科学薪水与其他拥有不同运气、经历和职业轨迹的人联系起来,会对你自己造成伤害。

确定自己的市场价值。

普遍的共识是,你的价值在于你可以被这个领域的任何人取代。因此,举例来说,如果你作为一名数据科学家从事商业智能分析,那么你基本上可以被一名薪水较低的商业智能分析师取代。

通过这种方式,你必须真正了解你的角色需要什么,以及你如何成长,是否包括成为一名经理、技术主管等。

弄清楚钱对你意味着什么

当我每天上下班的时候,我并不觉得我每小时能挣 10 万美元,或者 20 万美元,或者其他什么。

理解你的目标(尝试退休或经济独立,还是更专注于学习)非常重要,因为它最终决定了你可能会为哪种公司工作,并因此决定了工作环境和文化。

如果你对不同公司在数据科学领域工作的差异感到好奇,一定要看看我们博客上的 Start Up v. FAANG Companies 文章

有经验你会赚更多的钱

毫无疑问,这也肯定取决于你的面试,因为你需要有效地沟通你的经验能带来多少价值。

然而,我也见过很多这样的例子,人们拥有相似的技能,但是其中一个人年龄更大,经验更丰富,因此收入更高。目前,经验仍然是决定一个人应该挣多少钱的第一标准。

高薪不会让你留在数据科学领域

我知道,我知道-这听起来有点不现实,对吧?当然,钱能改变一切!

但老实说,除了最初能够为自己提供食物和住所的轻松,你内心的幸福并没有随着数字的变化而真正改变。你仍然每天都要去上班,你的日常生活很可能还是老样子。

不断变化的事情将围绕着你的位置,所以努力工作,最终,一定要享受你正在做的事情。

感谢阅读

  • 如果你有兴趣通过实践磨练你的数据科学技能,请查看 面试查询
  • 查看我的 Youtube 频道 获取更多数据科学面试指南、商业 vlog 帖子和解决问题的技巧&。
  • 如果你有兴趣阅读更多面试指南,可以看看这篇关于脸书和 LinkedIn 等科技公司的研究科学家职位的深度阅读。

原载于 2020 年 9 月 21 日 https://www.interviewquery.com**

汽车的品牌对其价格的影响有多大?

原文:https://towardsdatascience.com/how-much-does-a-cars-brand-affect-its-price-14b762d2324?source=collection_archive---------33-----------------------

作为一名即将从大学毕业的学生,我已经准备好开始#成人生活,其中一部分就是买一辆新车。当然,我很快意识到

我没有钱,而且

(b) 新加坡的汽车贵得令人望而却步。

因此,我做了任何处于我这种情况的人都会做的事情——我决定分析新加坡的汽车价格,而不是真的买车(注意:这不会带来同样的满足感)

原则问题

作为我的第一个独立数据分析项目之一,在开始这个项目时,我只有两个简单的问题:

**1。品牌对汽车价格的影响有多大?**我爸爸总是谈论“宝马”的溢价,我想知道这是不是真的。一辆“豪华车”是否人为抬高了它的价值…?多少钱?

2。给定某些参数,我们能多准确地预测汽车的价格?这个项目的第二个潜在部分可能涉及建立一个简单的网络应用程序,给出汽车的“公允价值”,给定某些参数,因此建立一个模型来预测价格是我想要实现的东西。

TL;博士;医生

我意识到,在这个节骨眼上,你们中的一些人可能不想浏览整篇文章,所以我就把我的结论放在这里(如果你想知道技术细节,可以向下滚动,看看漂亮的图表)

1。制造溢价效应我们缩小了汽车的规格,并比较了“正常规格”的溢价(宝马等。)采用非高端品牌(丰田等)。)使得。品牌在最高速度和油耗与价格的相关性上有最显著的交互作用。这是有道理的,高端品牌的购买者可能并不真正关心燃料成本,仍然会购买高油耗的汽车。

2。预测模型该模型的预测 R 2 R^{2} R2值为 0.837,与调整后的 R 2 R^{2} R2值 0.857 相差不远。这意味着该模型能够用给定的变量预测大约 84%的汽车价格。剩余的异常值主要是超级跑车(如法拉利 SF90),其价格很可能由于与之相关的显著溢价而被夸大(超出了“正常”的豪华品牌,如宝马)

预想的步骤

在决定着手这个项目时,我认为有三个关键步骤要做。这些步骤恰好与一个典型的 数据分析 (wow buzzwords)项目相匹配

  1. 数据收集
  2. 数据清理
  3. 数据分析

带着这些步骤,我走向了伟大的未知世界!

第一步:数据收集(又名:完成了吗?)

任何数据项目的第一步总是要有要分析的数据。我意识到我需要一个好的数据源,为我提供所有我需要的关于汽车的基本信息。我父亲(我汽车知识的主要来源)经常谈到神秘的 SGCarMart。

前往该网站时,我惊喜地发现,它包含了一个重要汽车信息的大型存储库。价格、车型、特征、引擎大小——SGCarMart 拥有一切!现在唯一的问题是把数据转换成一个好的,可操作的。csv 文件。

网页信息+a . CSV =网页报废

在我的工作/研究经历中,以及在我参加的在线课程中,数据总是一点点地来到我面前。csv 文件,所以我第一次面临需要获得自己的信息。

最初,我决定走与 rvest 一起废弃的通常路线:

然而,我最终决定使用 Web Scraper ,因为它附带了一个非常方便的选择器图,允许我准确地规划出我想要如何浏览页面和收集数据。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

选择器图形向您显示精确的报废图——方便!!

选择 2000 毫秒的延迟(这样我就不会被 SGCarmart 阻止了— 手指交叉),它走了。我总共运行了四次 scrapper,挑选出同一品牌/型号的不同变体(因为 SGCarmart 以不同的风格组织了它们的价格/规格/功能标签)。大约 4 个小时后,我完成了,我的房间是废弃的数据凌乱的

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

urgh hhh 太乱了

第二步:数据清理(又名:我宁愿清理我的房间,对不起妈妈)

据福布斯报道,数据科学家花 60%的时间清理数据——我知道我要吃苦头了。

第一步是将单独的报废文件合并在一起,并删除没有价格的汽车(网站上的一些汽车尚未上市,因此没有价格)。

接下来,我需要从数据集中移除所有的随机伪像。出于某种原因,SGCarmart 在一些图形中包含了随机的“β”字符,因此这些字符必须被删除。

基本的清理工作完成后,是时候进行下一部分的数据清理了…虚拟编码。我决定根据变量中唯一观察值的数量对一些类别进行编码,而不对其他类别进行编码。假设我计划生成一个线性回归模型,lm函数将能够处理factors,因此我可以放心地将它们作为因子。

这里需要注意的是——我对柱面类型的编码肯定可以做得更有效率,但是,我只是在打出代码的中途才意识到有这么多不同类型的柱面,于是决定继续完成剩下的部分。我知道努力不够——下次我会做得更好。

3.数据分析(又名:这实际上是所有人关心的)

令人惊讶的是,数据清理并没有花费我预期的那么长时间。解决了这个问题,现在是项目中最性感的部分——分析数据!我做了一个快速的dfSummary,只是为了对数据有一个大概的了解。(我喜欢使用 dfSummary 只是为了对数据有个粗略的感觉)

dfSummary来看,我们正在检查的各种发动机参数和特性存在很大的差异。此外,还有一些栏目缺少数值的问题。由于“NAs”不是很多,我决定从zoo包中执行一个NA.approx()来填充缺失的值

问题 1:品牌/品牌如何影响车价?

第一个问题是,品牌的“地位”对汽车的最终价格有多重要,我必须想出汽车的分类。在咨询了众多来源(也就是一些谷歌和 Reddit)后,我决定将它们分成两大类:标准版和高级版。我主要感兴趣的是知道一个著名品牌的汽车是否有溢价。如果是,多少钱。(我还为在新加坡不受欢迎的汽车创建了一个“其他”类别,因此这些汽车并没有特别的恶名)

标准

福特、雪铁龙、本田、现代、吉普、起亚、马自达、三菱、斯巴鲁、铃木、丰田、大众、日产

溢价

奥迪、法拉利、捷豹、兰博基尼、雷克萨斯、玛莎拉蒂、迈凯轮、奔驰、保时捷、宝马、沃尔沃

在研究“状态”的相互作用之前,我首先想了解汽车价格和我打算在线性回归模型中使用的各种特性之间的相关性。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

只看最上面一行(当前价格),看起来大多数功能都与价格有一定的正相关性(除了油耗,除非你喜欢你的车耗油,否则油耗与价格有明显的负相关性)。这看起来很有希望,下一步是确定这些相关性的相互作用。

为此,我决定用一个scatterplotMatrix。我过滤掉了标有“其他”的汽车制造商,只比较受欢迎的“标准”和“高级”汽车制造商。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(再次查看当前价格的最上面一行~其他规格)不出所料,在所有不同的功能中都观察到了交互作用(这是通过非平行回归线观察到的。无效模型将导致平行回归线)。

“但是等等,”你可能会假设说,“当然会有交互!高档汽车制造商自然会生产更多的特殊规格汽车,使回归线交叉!”你是对的。意识到这一点,我因此再次运行的阴谋,但这一次限制它的范围,使 V12 超级跑车等的影响。会被移除。我将发动机规格收紧到“正常”范围,查看速度为150–260,发动机 CCs 为1000–3500,马力为200–500的汽车。我还收紧了油箱和消耗变量,以标准化的措施。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

再次查看该图,似乎发动机 CC 和最高速度回归线大致平行。我猜,如果你只看速度或 CC,制造溢价可能并不那么重要。(附带说明:由于道路税是根据 CC 计算的,因此 CC 在新加坡环境中特别敏感。这可能因此解释了 make 具有的非效应)。

纵观其他变量,我发现一个特别有趣的是燃料消耗。“标准”(蓝色)回归线下降得相当快(表明普通人可能不太喜欢高油耗的汽车)。相比之下,“优质”(粉色)的线条几乎保持笔直。我猜如果你花 200+k 买一辆超跑,燃料价格/消耗真的不重要。

结论: 老实说,剧情并不是最确凿的。最初很清楚,品牌确实会影响变量之间的相关性。但是,当我们做一个“苹果对苹果”的比较(强制比较低规格的高级车和类似规格的标准车)时,在某些因素中,相互作用的影响明显减少了。然而,我敢断定在一定程度上造成了问题。但是高档品牌也倾向于生产更多规格更好的高档汽车

问题 2:建立评估“公允价值”的模型

上述图表显示,汽车品牌对价格和个人特征之间的相关性有影响。然而,汽车品牌对价格和所有特征之间的相关性有什么影响呢?

为了找到答案,我建立了一个多元线性回归模型(这也允许我以后创建一个“公允价值”模型)

创建了模型之后,我用测试集对其进行了测试,以找到 R 平方值。

0.857 的 R 平方值意味着约 86%的价格变化可以用模型来解释。用简单的英语来说(但老实说不是最准确的理解方式,这意味着我们放入模型的各种特征解释了为什么价格是现在的价格。

不过,这个值高得令人怀疑,我怀疑可能有一些过度拟合的情况。回归模型通常的经验法则是每个变量有 10-15 个观察值。我的数据(大约 545 个观察值和 8 个变量)很好地符合这一点,但仍然有我想挠的痒痒。

测试过度拟合的一个好方法是使用预测的 R 平方值,并将该值与实际的 R 平方值进行比较。如果这些值相差很大,可能会出现过度拟合。我是通过托马斯·霍珀的一篇有用的帖子做到这一点的。更多关于使用预测 R 平方的理论,请参考那个博客。

令人高兴的是,预测的 R 平方值实际上与实际的 R 平方值相差不远。我对过度合身的担心被适当地消除了。回到 make premium 的问题,然后我为模型创建了一个表来查看特定的交互。

查看多变量回归模型的输出(该模型考虑了所有特征和价格之间的关系),似乎品牌对最高速度和燃料消耗的影响最显著。

因此,我们可以得出结论,在多元回归模型中,make 继续对价格和其他变量之间的相关性产生影响,对最高速度和油耗的影响最为显著。

问题 2b:残差正态性

我还想探索我的模型的残差的正态性,这很容易通过 Q-Q 图来完成:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

该图不遵循正态分布,在两个尾部都有异常值。然而,尽管正态性假设很重要,篇论文认为,鉴于中心极限定理,正态性假设对于大型数据集(通常称为> 200,但当然取决于上下文)来说不太重要。对于我的数据集> 200,我对残差缺乏正态性感到更舒服。

当然,我仍然想探索异常值,并将残差映射回原始数据集,以便找出这些异常值是什么。

正如预期的那样,大多数异常值是价格令人难以置信的高性能汽车。这些跑车的价格可能没有被模型捕捉到的原因可能可以归因于买家情绪的一个(本质上不可测量的)特征。前两名是法拉利。法拉利的价格标签很可能不仅仅是它的发动机排量和油耗,还很可能受到你的钱包看起来有多鼓和你看起来有多酷的影响。

这个小研究的结论被总结在 tl 中;博士:但我会在这里重复一遍,以防你第一次没听到!

1。制造溢价效应我们缩小了汽车的规格,并比较了“正常规格”的溢价(宝马等。)采用非高端品牌(丰田等)。)使得。品牌在最高速度和油耗与价格的相关性上有最显著的交互作用。这是有道理的,高端品牌的购买者可能并不真正关心燃料成本,仍然会购买高油耗的汽车。

2。预测模型该模型的预测 R 2 R^{2} R2值为 0.837,与调整后的 R 2 R^{2} R2值 0.857 相差不远。这意味着该模型能够用给定的变量预测大约 84%的汽车价格。剩余的异常值主要是超级跑车(如法拉利 SF90),其价格很可能由于与之相关的显著溢价而被夸大(超出了“正常”的豪华品牌,如宝马)

个人结论:对于那些喜欢从头到尾阅读的人

***1。收集数据。*后悔没有早点学习 Regex。我是在使用 Webscraper 收集数据后才学习 Regex 的,我可能已经使用 Regex 和 Webscraper 在数据收集期间进行了预清理,这可能会加快数据清理过程。

***2。可视化多元模型的困难。*我花了最多的时间试图找出如何最好地呈现多元回归模型。最后,我放弃了,继续展示一份jtools的汇总表。我相信有更好的方法来做到这一点,并会在下一个项目中努力改进。

*3。常态假设。*在提出这个模型并绘制 Q-Q 图之后,我最初吓坏了,因为我意识到这是超级不正常的。这促使我去阅读更多关于正态性的东西,我想意识到正态性很重要,但对模型的准确性来说并不关键,这是令人欣慰的。在中,统计专家的用词为“对于中到大样本量,残差的非正态性不应该对通常的推断过程产生不利影响,这是中心极限定理的结果”

感谢阅读~希望有助于你以后买新车时更好的决策!请注意(希望如此)第 2 部分,我将尝试使用 SHINY 创建一个 web 应用程序,帮助您使用我们创建的模型找到您想要购买的汽车的合理价格!

最初发表于https://zachlim98.github.io/me/2020-10/sgcarmart1*。*

图像积分快多少?

原文:https://towardsdatascience.com/how-much-faster-is-image-integral-90ba0008497a?source=collection_archive---------32-----------------------

使用 Google Colab 比较暴力和图像积分

在我寻求学习更多关于计算机视觉和 python 的过程中,我一直在阅读 Viola-James 物体检测框架,这里的论文对此做了最好的总结

在这篇文章中,他们描述了图像积分的概念,这是一种描述图像的数组的总面积表,他们的观点是——暴力计算积分比提前计算图像积分并从数组中取出数字要慢得多。这种计算经常在计算机视觉应用中使用。

我很好奇——快了多少?这篇论文发表于 2001 年,我们现在的处理器肯定要快得多(20 年后),这不会有什么不同吧?嗯,我是非常错误的

跟着一起: Google Colab 笔记本

图像积分

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图像转换成图像积分。来源:Stackoverflow.com

使用左上角作为索引 0,0 (x=0,y=0),水平和垂直计算积分。

在积分图像(右侧)中,索引(x=1,y=0)是 5,它是原始图像(so,4+1=5)中的(0,0)和(1,0)中包含的值的总和

同样,integral image index (2,2) = 9,也就是左上 2x2 块之和:4+4+1+0 = 9。

我举了几个更简单的例子:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源:图片由作者提供。灵感来自vinsol.com

图像设置

让我们浏览一下图像的设置、上传和转换等。首先,导入您的库:

设置您的库

我要用这张哈巴狗的照片:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

资料来源:Unsplash.com

很好,现在图像已经上传了,接下来要做一些事情:将它转换成黑白图像,然后转换成一个 numpy 数组:

黑白转换,然后转换成 numpy 数组

我们将使用 open cv (cv2)中的图像积分函数。它用零填充积分,所以我们将删除下面第 2 行中的那些。

从第 4 行开始,我们将定义一个强力函数进行比较,它所做的只是对行和列求和:

使用 OpenCV 并定义强力函数

多次 CPU 迭代

我将进行三种类型的迭代,并记录执行每种计算所需的时间。我们将每个迭代运行 500 次,以尽量减少可变性。

在对图像做深度学习的时候,500 次大概是一个很低的数字;图像计算大概是几百万到几十亿的量级。

我们还将选择上图中的位置(1000,1000)进行计算。

迭代 1——强力推进图像积分

这是“控制”时间:

迭代 2-重复图像积分计算

这里,我们将在每次重复时重复 cv.integral,而不是只计算一次:

结果呢?121.8x!即使我们每次重复重新计算积分。

Image Integral is: 121.8 times faster

迭代 3-使用预先计算的图像积分

这类似于对一幅图像计算一次积分,然后对同一幅图像进行数百次计算。

结果= 33073.65x. 比三十三个 快一千个倍。

Image Integral is: 33073.65 times faster

GPU 计算

当然,所有深度学习的学生都是 GPU 的忠实粉丝,但在这种情况下,它不会成功。

有 GPU 开销,如 CUDA 初始化、内核调用、内存分配,使这个过程慢得多。重复做 500 次非常慢,我不得不减少到 50 次,这样我就不会永远无所事事。

结果?CPU 图像积分计算一次(上面的迭代 3)几乎比 GPU 快 37,000 倍。

GPU 计算实际上比所有 CPU 迭代都要慢。

如果你错过了上面的,这里是 Colab 笔记本

参考

[1] Viola-Jones 对象检测框架,维基百科,2020 年 10 月访问

[2] OpenCV-Python ,2020 年 10 月访问

[3] CuPy ,2020 年 10 月访问

你的基因数据值多少钱?

原文:https://towardsdatascience.com/how-much-is-your-genetic-data-worth-3bb7a8b4ae5c?source=collection_archive---------28-----------------------

50%的美国公民表示,95 美元足以让他们交出自己的基因秘密

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片来自皮克斯拜

像脸书和谷歌这样的科技巨头目前正从我们的数据中获得天文数字的利润。个人在线信息的价值在 1 美元到 100 美元之间,截至上个月,脸书拥有 24 亿用户。这只是基于你在网上浏览和互动的内容。想象一下,一家公司可以用你的整个基因组,甚至只是部分基因组做些什么。从与医疗保险公司分享到创造个性化的药物,可能性是无穷无尽的。

随着技术的进步,基因组测序的成本持续下降,我们对基因组的看法将会改变。目前,通过 Veritas 对你的整个基因组进行测序需要 1999 美元,然而作为一种宣传噱头,以显示未来几年成本将降低多少,他们在 2018 年的有限时间内提供了 199 美元的服务。随着获取基因数据越来越容易,你的基因组将不再是健康或疾病的指标,而是被视为你的财产——一种你可以选择分享或保留的商品。

如今,像 23andMe 这样的公司通过向客户收取费用来发现更多关于他们基因组的信息。将来,随着公众开始意识到他们基因数据的真正价值,这种情况可能会逆转。那么,你的基因组值多少钱?上周发表在《PLOS 综合》上的一项研究报告了最近的一项调查结果,发现 50%的参与者愿意以平均 95 美元的价格出售他们的基因数据。

基因组数据监管调查(GDGS) 基于美国不同地区的 2,020 名参与者。他们首先观看了一段信息丰富的视频,该视频提供了关于基因组数据库的事实信息,例如基因分型的当前市场成本和隐私风险。看完视频后,参与者被问及他们期望从一家大公司得到什么来交换他们的基因数据。

  • 11.7%的人乐于免费分享他们的基因组
  • 37.8%的人不愿意放弃他们的数据,无论多少
  • 50.5%的人愿意有偿分享他们的数据

想要出售数据的参与者随后提供他们乐意接受的费用,平均价格约为 130 美元。鉴于这大约是消费者基因分型的当前市场价格,这并不奇怪。然而,他们随后被问及愿意为个性化的调查结果报告支付多少钱。平均 35 美元使净支出下降到95 美元

调查还发现,在“卖家”中,购买他们数据的公司类型并不重要。在考虑的五个类别(技术、政府、医院、制药、大学)中,销售意愿没有显著差异。

交易破坏者是数据将如何被使用和监管。

在向参与者提出的各种治理政策中,根据请求删除数据的能力是最重要的因素,72.2%的人表示这将增加他们的参与意愿。紧随其后的是保证数据不会被出售或与其他组织共享(69.8%),以及保证公司会为数据的每次特定使用请求许可(67.9%)。

GDGS 首次调查公众对大公司使用基因数据的看法,这与之前基于学术机构使用此类数据的研究形成了鲜明对比。这些过去的研究都发现超过 50%的人愿意免费分享他们的数据,2015 年的一项调查甚至发现一个机构关于数据使用和分享的政策并没有影响参与意愿。

新的发现表明,当涉及到我们自己的基因数据时,公众舆论正倾向于更严格的管理政策。这可能是因为随着这个话题越来越受欢迎,被媒体和新闻机构广泛报道,普通人对这个话题越来越了解。

23andMe 正试图站在公众一边,对他们如何使用数据非常透明,并在你注册时提供选择“退出”他们的研究项目的选项。然而,他们还通过与葛兰素史克(GlaxoSmithKline)和 T2(America)阿米尔(Amirall)等公司联手,在数百万美元的交易中引领个性化医学研究。随着从我们的基因数据中获利的潜力进一步增长,科技巨头想要参与这一行动将变得不可避免,用不了多久,任何人都可以通过提供泄露一切的唾液样本获得报酬。

大型科技公司多年来一直在我们不知情的情况下利用我们的数据,直到最近才被迫采用更透明的数据共享模式。这项研究表明,令人欣慰的是,随着人们越来越意识到他们对自己基因组的权利,遗传数据不太可能出现同样的情况。

你的数据有多少价值?

原文:https://towardsdatascience.com/how-much-juice-is-there-in-your-data-d3e76393ca9d?source=collection_archive---------51-----------------------

应用于 Kaggle 的信息论答案,带代码

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

97 %。根据 Gartner 的数据,这是组织未使用的数据的百分比,构成了所谓的“黑暗数据”。

数据已经取代石油成为世界上最有价值的资源,但几乎所有的数据仍未被组织使用。Gartner 估计,87%的组织“商业智能和分析成熟度较低”。

对这一悖论的一种可能解释是,并非所有数据都是生而平等的。从一个组织到另一个组织,以及在同一个组织内从一个项目到另一个项目,数据的价值可能有很大的不同。

为了在商业智能和分析方面进行必要的投资,组织应该能够准确地预测这样做的业务影响,并且这样的未来投资应该能够产生足够高的 ROI。

如果没有勘探地球物理学的机器学习等价物,数据就不可能成为新的石油

假设数据总是有价值的,并试图通过试错法提取这种价值作为人工智能项目的一部分,无论是由 AutoML 平台驱动,充其量都是非常浪费的,在最坏的情况下会产生负 ROI。

根据石油类比,这就相当于假设无论在哪里看都有石油在地下*,并且驱动从地下提取的石油量的唯一因素是使用的提取技术*。

多年来,地球物理学和经济学交叉的整个研究领域,即勘探地球物理学,一直致力于降低石油生产中的商业风险。勘探地球物理学依靠归纳推理(与演绎推理相反)来检测给定位置有价值地质矿床的存在并估计其数量,而不会产生建设开采场地的前期成本和风险。

同样,为了降低投资人工智能项目的商业风险,在进行任何预测建模之前并独立于预测建模,开发量化数据价值的归纳推理方法至关重要,这一阶段我们称为预学习

评估数据集的演绎方法包括首先分配资源以使用数据集,然后监控一段时间的业务影响,而归纳方法包括使用数学推理从感兴趣的数据集推断任何预测模型可以实现的最高性能,成本低廉,且无需训练任何预测模型。

在本文中,我们总结了使 能够预学习 的理论基础,并且我们说明了如何使用开源的 kxy python 包来量化各种数据集中的汁液。

果汁是从什么开始的?

数据中的汁液指的是数据中对解决手头特定问题有用的信息量。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(左)Unsplash 上 Rinck Content Studio 的照片|(右)Instagram 用户@skwoodlekids 的插画

就像桔子汁(或地下的油)独立存在一样,无论是否被提取,也无论如何被提取,重要的是要认识到每个数据集在概念上都可以被认为是一个(可能是空的)部分,可以用来解决手头的问题,以及无用的剩余物。

在这方面,有两点值得强调。首先,什么是有用的(resp。没用)是问题特定的。数据集对解决特定问题无用的部分可能对解决另一个问题有用。

其次,数据集中对解决给定问题有用的东西并不依赖于解决问题的特定方法。同样,给定橙子中包含的果汁总量是可以从橙子中提取的最大液体量,不管它是如何压榨的,数据集中的果汁总量是可以从数据集提取的最大效用量,以解决特定问题,不管使用什么机器学习模型来解决问题。

为了奠定预学习的基础,我们需要正式定义“问题”和“有用”的含义。

我们关心的问题是分类和回归问题,对输入或输出的类型没有限制。具体来说,我们考虑使用输入向量×输入向量 来预测业务结果 y 。选择 y 是我们有兴趣解决的业务问题的固有属性,而输入 x 代表我们考虑用来解决问题的数据集。

像往常一样,我们通过将它们建模为随机变量来表示我们对 yx 的值的不确定性。说我们的数据集对于解决感兴趣的问题是有用的,相当于说输入 x 是关于标签/输出 y 的信息。

幸运的是,信息量和关联的概念被信息论完全形式化了。你会在这里找到一本关于信息论的初级读本。出于本文的目的,如果我们将随机变量的熵表示为 h(z) 连续变量的熵表示为微分,分类变量的熵表示为香农,就足以回忆起关于xy信息量的规范度量是它们的 互信息, 定义为

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

互信息的一些关键性质

互信息I(y;x)* 明确定义了输出是分类的还是连续的,以及输入是连续的、分类的还是两者的组合。关于为什么会出现这种情况的一些背景阅读,请查看本书的和其中的参考文献。*

它总是非负的,当且仅当 yx 是统计独立的(即 yx 之间没有任何关系)。

此外,互信息通过无损特征变换是不变的。的确,如果 fg 是两个一一对应的映射,那么

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

一个更一般的结果,被称为数据处理不等式,陈述了应用于 x 的变换只能减少其与 y 的互信息。具体来说,

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

并且当 f 或者是一对一映射,或者 yx 是统计独立给定的 f(x) 时,等式成立

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这意味着包含在 x 中的关于 y 的所有信息都完全反映在 f(x) 中,或者换句话说,转换 f 保留了所有果汁,尽管有所损失。

因此,当互信息被用作量化数据集中汁液量的代理时,有效的特征工程既不减少也不增加汁液量,这是相当直观的。特征工程只是将输入和/或输出转换成一种表示,使训练特定的机器学习模型变得更容易。

从互信息到最大可实现的性能

虽然它反映了数据集中果汁量的本质,但通常以比特或 NAT 表示的互信息值很难与业务分析师或决策者交流。

幸运的是,它可以用来计算使用 x 预测y 时所能达到的最高性能,对于各种性能指标(R、RMSE、分类精度、每样本对数似然等。),进而可以转化为业务成果。我们在下面提供了一个简短的总结,但是你可以在这里找到更多的。**

我们考虑一个具有预测概率的预测模型 M

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

其中 f(x) 是模型对与输入 x 相关联的输出的预测。当 y 为分类时,该模型为分类器,当 y 为连续时,该模型为回归模型。

最大可实现 R

在加法回归模型中

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

R 的总体版本定义为

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在我们的模型下,上面公式中的比率代表了不能用输入来解释的输出方差的分数。

虽然方差是高斯分布不确定性的良好度量,但与熵不同,它是其他分布不确定性的弱度量。

考虑到熵**(在 nats 中)(自然)标准差**的对数具有相同的单位/标度,我们将 R 概括如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

注意,当 (y,f(x)) 为联合高斯(如高斯过程回归,包括带有高斯加性噪声的线性回归)时,上述信息调整后的 R 与原始 R 相同。

更一般地,这种信息调整的 R 适用于回归和分类,具有连续输入、分类输入或两者的组合。

直接应用数据处理不等式给出了任何模型预测所能达到的最大 R:******

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

重要的是要强调这个最优 R 不仅仅是一个上限;通过任何预测分布为真(数据生成)条件分布 p(y|x) 的模型来实现。

最小可实现 RMSE

上述模型的均方根误差的总体版本为

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

同样,我们可以把它的信息调整概括定义为

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

数据处理不等式的直接应用给出了最小的 RMSE 任何模型使用x预测都能达到:******

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

最大可达真实对数似然

类似地,我们模型的每次观察的样本对数似然性可以定义为

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

其人口当量,我们称之为每个观测值的真实对数似然,即

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

满足不等式

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这个不等式源于吉布斯不等式和数据处理不等式。更多详情见此处

请注意,上述不等式适用于回归和分类问题,并且上限是通过使用真条件【p(y | x)】作为其预测分布的模型来实现的。

术语 -h(y) 表示在没有任何数据的情况下可以实现的每个观测的最佳真实对数似然,并且可以被视为天真的对数似然基准,而互信息术语I(y;x)** 代表可归因于我们数据的提升。****

可达到的最大分类精度

在输出 y 可以取高达 q 的不同值的分类问题中,也可以通过使用 x 来预测 y. 的模型来表达可以实现的最高分类精度

让我们考虑一下功能

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

对于给定的熵值 h ,通过预测采用 q 不同值的任何离散分布的结果可以实现的最佳精度,并且具有熵值 h 由下式给出

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

其中函数

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

是的反函数

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

并且很容易进行数值评估。你可以在这里找到更多细节

下图为各种q 提供了上述功能的说明。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 1:预测具有 q 个可能结果的离散分布的结果时可达到的精度。

更一般地,使用预测分类输出 yq 不同值的分类模型 可以达到的精度满足不等式:**

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

熵项 h(y) 反映了由总是预测最频繁结果组成的简单策略的准确性,即

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

鉴于互信息项I(y;x)******

总而言之,在分类和回归问题中,几乎任何基于群体的性能度量所能达到的最高值都可以表示为真实数据生成分布I(y;x)*** 和输出的可变性的度量(如其熵***【h(y)、方差或标准差))当天真(无输入)预测策略不具有无效性能时。**

无模型互信息估计

最后,我们可以解决房间里的大象。显然,这都归结为估计互信息I(y;x)* 在真实数据下生成分布。然而,我们并不知道真正的联合分布***【y,x】。如果我们知道它,我们就能获得最好的预测模型——具有预测分布的模型——真条件 p(y|x)**

幸运的是,我们不需要知道或学习真正的联合分布【y,x】;这就是我们前面提到的归纳推理方法发挥作用的地方。****

我们采用的归纳方法包括测量足够宽范围的数据属性,间接揭示其中的结构/模式,并推断与观察到的属性一致的交互信息,而不做任何额外的任意假设。我们凭经验观察的属性越灵活,我们在数据中捕获的结构就越多,我们的估计就越接近真实的互信息。

为了有效地做到这一点,我们依靠一些技巧。

****招数一:在 copula-uniform 对偶空间中工作。

首先,我们回忆一下,x 之间的互信息是一对一映射不变的,特别地,当 yx 为序数时, yx 之间的互信息等于

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们不是直接估计 yx 之间的互信息,而是估计它们的 copula-uniform 对偶表示之间的互信息;我们称之为在 copula-uniform 对偶空间中工作的**

这允许我们完全绕过边际分布,并以一种单位/比例/表示自由的方式进行推断——在对偶空间中,所有边际分布在[0,1]上都是一致的!

技巧二:通过成对 Spearman 等级相关性揭示模式。

我们通过估计原始空间中的所有成对 Spearman 等级相关性来揭示我们的数据中的结构,为两个序数标量 xy 定义如下

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

它衡量两个变量单调相关的倾向。它的人口版本仅仅是 copula 的函数——统一的对偶表示法vxy 并读作******

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

换句话说,使用 Spearman 的秩相关,我们可以在对偶空间中工作,同时有效地估计原始空间中感兴趣的属性。

如果没有这个技巧,我们将需要估计边际 CDF,并明确地将概率积分变换应用于输入,以便能够在对偶空间中工作,这将违背第一个技巧的目的。

毕竟,假设两个变量之间的互信息不依赖于它们的边际分布,那么不得不估计边际分布来计算它将是一种耻辱。

招数三:扩大输入空间捕捉非单调模式。

对于回归问题,成对 Spearman 秩相关完全捕获“输出随着特定输入减少/增加”类型的模式,对于分类问题,“我们可以根据特定输入取大值还是小值来判断编码输出的一位是 0 还是 1”。

为了捕捉这些单调关联类型之外的模式,我们需要求助于另一个技巧。我们注意到,对于任何不是内射的函数 f ,我们有

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

由此可见,与其估计I(y;x)* ,我们可以估计I(y;x,f(x)) 对于任意内射函数 f 。*****

yx 之间的成对 Spearman 秩相关性揭示了 yxf 之间的单调关系,因此可以选择 yf(x) 之间的成对 Spearman 相关性

f 的一个很好的例子就是函数

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

其中 m 可以选择为样本均值、中值或众数。

的确,如果y =x对于某个均值为零且偏斜为零的随机变量x,那么y 与**【x,*** 之间的 Spearman 秩相关关系可以通过对称性*,发现为*,不能揭示其中的结构另一方面,【y】【x】(同 m=0 ),也就是 1 ,更能体现出的信息量有多大*********

选择 f 捕捉“当输入偏离标准值时,输出趋于减少/增加”类型的模式。使用相同的技巧可以捕获更多类型的模式,包括周期性/季节性等。

诀窍四:用最大熵原理把所有东西放在一起,以此来避免武断的假设。

*****综上,我们定义 z=(x,f(x)) ,我们估计向量 *(y,z)的 Spearman 秩自相关矩阵即 S(y,z)。

然后,我们使用与通过斯皮尔曼秩自相关矩阵【S(y,z)】、* 观察到的模式相匹配的所有 copula 密度中具有最高熵的 copula 密度作为 (y,z) 的 copula 统一表示的密度,即,除了通过 S(y,z) 观察到的模式之外,对于每个模式最不确定。*****

假设 (y,z)d 维的,得到的变分优化问题为:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

然后,我们使用学习的联合 pdf 来估计所需的互信息,如

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

理解最大熵变分问题

在没有 Spearman 秩相关约束的情况下,上述最大熵问题的解是标准均匀分布的 pdf,对应于假设yx统计独立,且具有 0 互信息。这很直观,因为我们没有理由相信 x 是关于 y 的信息,直到我们收集到经验证据。******

当我们观察 S(y,z) 时,变分最大熵问题的新解偏离均匀分布刚好足以反映 S(y,z) 所捕捉到的模式。因此,不应该期望我们的方法过高估计真实的互信息I(y;x)* 。*****

此外,只要 S(y,z) 足够有表现力,我们可以通过选择函数 f 来控制,所有类型的模式都将反映在【S(y,z)* 中,并且我们估计的互信息不应被期望低估真实的互信息I(y;x) 。*****

应用于正在进行的 Kaggle 竞赛

我们构建了 KxY 平台,以及附带的开源 python 包,通过专注于高 ROI 项目和实验,帮助各种规模的组织削减其人工智能项目的风险和成本。特别令人感兴趣的是本文中描述的方法的实现,以量化数据中的果汁量。

kxy 包可以从 PyPi ( pip install kxy )或 Github 安装,也可以通过我们在 DockerHub 上预先配置的 Docker 映像来访问——有关如何开始的更多详细信息,请阅读 this 。一旦安装完毕, kxy 包需要一个 API 密匙来运行。您可以通过填写我们的联系表或发送电子邮件至 demo@kxy.ai 来申请。

我们以房价高级回归技术 Kaggle 竞赛为例。该问题包括使用 79 个解释变量的综合列表预测房屋销售价格,其中 43 个是分类变量,36 个是顺序变量。

我们发现,当使用独热编码方法来表示分类变量时,可以实现近乎完美的预测。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

关于房价高级回归 Kaggle 竞争的可实现性能分析的代码片段和输出。

事实上,当我们以贪婪的方式一次选择一个解释变量,总是在尚未选择的变量中选择产生最高增量果汁量的变量时,我们发现仅用 79 个变量中的 17 个,我们就可以实现近乎完美的预测——在 R 意义上。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

贪婪变量选择分析的代码片段。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

写这篇文章时 Kaggle 排行榜截图。

下图说明了全变量选择分析的结果。有趣的是,当前 Kaggle 排行榜的榜首已经设法产生了 0.00044 的 RMSE,这是使用前 15 个变量可以实现的最佳结果和使用前 16 个变量可以实现的最佳结果之间的某个位置。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

标签。Kaggle 房价高级回归技术竞赛 KxY 无模型变量选择分析结果。

你可以在这里找到用于生成上述结果的代码。

脚注:

【】假设观测值(输入、输出)可以看作是从同一个随机变量 (y,x) 中独立抽取的。特别是,问题不应该表现出任何时间依赖性,或者观察值(输入、输出)应该被视为来自静态和遍历时间序列的样本,在这种情况下,样本大小应该足够长,以跨越多个系统的内存。

[ ]前一个脚注的要求具有非常实际的意义。整个推理管道依赖于对 Spearman 秩相关矩阵 S(y,z) 的精确估计。当观测值可以被视为同分布样本时,对【y,z】的可靠估计只需要很小的样本量,就能指示真实的潜在现象。另一方面,当观察呈现时间依赖性时,如果使用我们的数据的不相交子集来估计【y,z】产生非常不同的值,则时间序列不是平稳的和遍历的,或者它是平稳的和遍历的,但是我们没有足够长的历史来表征 S(y,z); 无论哪种方式,估计的 S(y,z) 都不会准确地表征真实的潜在现象,并且不应该应用分析。

数据科学入门需要了解多少数学知识?

原文:https://towardsdatascience.com/how-much-math-do-you-need-to-know-to-get-started-with-data-science-789b24d212fc?source=collection_archive---------12-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

安托万·道特里在 Unsplash 上拍摄的照片

明确、直截了当的回答。

在我开始数据科学之旅之前,这是我最迫切的问题之一。这也是认真考虑开始数据科学之旅的人心中的一个问题。在本帖中,我为你提供一个明确的答案。

我不是专业的数据科学家。但我已经走过了第一步。我坚信这句话-

“你是引导比你落后一步的人的最佳人选”。

由于出身于物理专业,我有坚实的数学基础。我修过线性代数、微分方程、高等微积分等课程。

虽然我学到的概念一直萦绕在我的脑海中,但数学趣闻的细节却随着时间而褪色。我非常担心。

我需要复习我在线性代数和微积分课程中学到的所有东西吗?为了学习数据科学,我需要牢固掌握这些课程中的所有数学公式吗?我对这些主题的准备程度应该像我参加这些课程的考试前几天晚上那样吗?我能记住 勒让德多项式 的生成函数吗?

这些问题充斥着我的大脑,我很困惑。我非常认真地有条不紊地学习数据科学。所以我想手动操作。

我读了很多关于数据科学的书,而不是读/看关于数据科学的视频。这是一个错误(稍后将详细介绍)。

每个人给的建议

浏览任何博客,对 Reddit 上任何询问数据科学先决条件的帖子的任何回复,你得到的答案都是一样的

  1. 从可汗学院了解线性代数基础知识。
  2. 从可汗学院了解微积分基础知识。
  3. 以吉尔伯特·斯特朗教授的线性代数 MOOC 为例,由麻省理工学院开放式课程提供。
  4. 以麻省理工学院开放式课程提供的多变量微积分 MOOC 为例。

这些是你在网上任何地方都能得到的建议。有些人以麻省理工开放式课程提供的机率课程结束课程。

有些人提到了 Grant Sanderson 当之无愧的著名的线性代数和微积分播放列表(后面会有更多)。

但差不多就是这样了。

我发现了什么

我真的很喜欢麻省理工开放式课程提供的任何课程。我在高中的时候看过那里的微积分视频,在大学二年级的时候从那里学到了很多热力学知识。而且我真的认为麻省理工开放式课程提出的课程有很高的价值,应该是值得认真学习的资源。

而且,这些课程的问题是——它们需要非常长的时间来完成。我提到的课程是为整个学期设计的。

那些课程计划在六个月内完成。把几个结合起来,你就有了一个本科课程的工作量。这对你不好,因为-

  1. 如果你是在职专业人士或大学生,你会把所有的额外时间都花在学习数学上。
  2. 如果你没有课程或者没有工作责任,你就把时间花在学习数学上——你没有做任何数据科学。

不管怎样,你只花了 5-6 个月学习数学。换句话说,你损失了 5-6 个月的时间,而这些时间本可以用来学习数据科学

这样,你在数据科学的学习上落后了 5-6 个月。

(注:如果你在读高中,或者你是大学新生,我建议你这样做。因为你有很多时间。你可以全面地做到这一点。此外,您可能还没有涉及其他来源的数学。)

但是,如果你是一名大四学生、研究生或在职专业人士,5-6 个月的数据科学进展就会丢失,这是相当大的损失。

我的两分钱

已经获得了 IBM 的数据科学专业证书,经历了吴恩达的机器学习课程,并且通过 fast.ai 库训练了一个 CNN,我可以有把握地说,你肯定不需要知道课程材料教授的所有主题就可以入门

开始你的数据科学之旅,你不需要知道麻省理工大学本科课程的所有内容。

(注:我说的是出发。我的理解是,你需要了解这些课程中教授的数学知识,更需要了解这个领域中真正的优秀。)

但是,您可以在需要时学习数学和数据科学主题,而不是一开始就学习所有的数学知识而不了解它在数据科学中的作用。

我在研究数据科学的过程中发现,你需要在众所周知的概念上有坚实的基础,比如导数、向量、矩阵等等,而不是被大量的概念所束缚。(一整节即将开始!)

我的两分钱包括我最近学到的一些关于知识和学习的基本知识: 学习是一个迭代的过程

这是一个非常受欢迎的概念,我们在明确定义的步骤中学习。我们完成一步,从中获得知识,然后进入下一步,从中学习,如此循环。但是,正如许多认真的学生所知道的那样,这一概念并没有抓住全貌。

每当你学东西时,你都是通过一遍又一遍地复习内容来做到这一点的。完成某件事的第一步后,你可能会认为你知道第一步。但你没有。

你会进入下一个阶段。一旦到了那里,你就会意识到在第一步中有一些缺口。你回去弥补差距。接下来的步骤也是如此。因此,你反复回到第一步(和后面的步骤)去扎实地学习一些东西。有些人遵循这一点,但不欣赏这一过程。他们通常称之为“修订”。这个反复的过程需要时间。

我们可能对这一进程的机制有不同意见,但我认为我们都同意这需要很多时间。而且起步早的人会有优势。

正如我前面提到的,当你花六个月的时间学习数学时,你就失去了六个月学习数据科学的时间。不要那样做。今天开始*。*

总结一下:学习是迭代的,边做边学。做得越多,学得越多。你分配给实际工作的时间越多,你学到的就越多。你应该从今天开始学习数据科学。一路学习数学。

别人怎么说

我承诺在标题中提供明确的答案,我完全打算信守承诺。

但在此之前,让我快速向你重复一下其他人的想法。

Sylvian Gugger ,计算机科学教师和深度学习实践者,与 fast.ai 合作,在博客中说

做深度学习需要高等数学吗?

简而言之,答案是否定的。长时间的回答是否定的,任何告诉你相反情况的人都只是想吓唬你。在深度学习的一些理论研究领域,你可能需要高等数学,但在餐桌上每个人都有空间。

哈佛商学院教授大卫·佩尔金斯也支持的观点,也就是说要真正做机器学习,而不是花太多时间通过学习数学来准备,而不是像我们这样学习机器学习。在他的书中,**

珀金斯指出了教育中的两种不幸倾向:一种是他所谓的“元素论”——学习一门学科的组成部分,却从来没有把它们放在一起。另一个是以实际学习为代价来培养“学习”某事的倾向。“你不可能通过一年的击球练习学会打棒球,”[…]

Rachel Thomas,fast . ai的联合创始人在的采访中讲述了-

我强烈推荐大家阅读保罗·洛克哈特的文章,《一个数学家的哀叹》。他谈到了一个噩梦般的世界,在这个世界里,孩子们在读研究生之前不允许唱歌或制作音乐,他们的童年是用手抄写乐谱度过的。

如果你花了几个月甚至几年的时间为学习数据科学做准备,你就会这么做。

好吧,你到底需要多少钱?

你真的准备好开始了吗?

要开始学习数据科学,你不需要了解研究生水平的数学。重要的是,你在矩阵乘法和导数等基础知识上有坚实的基础。你需要高中水平的数学有坚实的基础。没有更多的。

问自己这些问题-

  • 你知道什么是矩阵吗?
  • 向量到底是什么?
  • 为什么 sin(x)的导数是 cos(x)?
  • 线性方程绘制时到底是什么样的?当你改变 y = mx + b 中 m 的符号后,一条线向哪个方向倾斜?
  • 如果将 y = x 中 x 的次数从 3 变为 4,绘制的线会如何变化?
  • 为什么我们要把矩阵和向量相乘?我们计划实现什么?
  • 斜率是什么意思?关于一条曲线,它的曲线在某一点是正的,你能知道什么?
  • 到底什么是方差?(提示:名字说明了一切)
  • 为什么我们需要这样定义标准差?为什么我们要把它平方,然后求它的平方根?这给了我什么优势?你能把这个和你使用这个技巧的其他主题联系起来吗?(提示:笛卡尔平面中的距离,物理实验中的误差等。)
  • 你知道三种不同的平均值吗——均值、中值和众数?你能想出现实生活中三种不同的用例来描述每一种吗?

如果你能自信地回答这些问题中的大部分,你就是黄金。今天就开始学习数据科学吧!

此外,如果你看看谷歌为他们的机器学习速成班列出的先决条件和准备工作,你会发现他们提到了非常基础的东西。

如果你结巴了…

无法回答问题?感觉有点脱离现实?

别担心。再过你就要开始学习数据科学了。**

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

强烈推荐资源 3blue1brown 的 Logo。来源:维基共享资源

资源

这里有一些我推荐的资源,可以提升你的技能或建立清晰的数学直觉。不是每个人都能接触到高质量的数学老师。

我在初中和高中学到的东西我称之为“考试数学”。在麻省理工开放式课程、可汗学院等的帮助下,我自学了真正的数学。但那是另一回事了。

我假设你在高中或大学接触过数学和基础统计学(相当于三到五个介绍性章节)。

  1. 观看 Grant Sanderson 的名为“线性代数的本质”的伟大系列,感受一下当你乘矩阵、计算行列式等等时到底发生了什么。
  2. 3blue1brown 的另一个重要资源是一个名为“微积分本质”的系列。这就像线性代数课程,但微积分。
  3. 浏览可汗学院的统计播放列表。对于数据科学初学者来说,这已经足够了。
  4. 德斯莫斯免费提供了一个惊人的图形计算器。建议你玩玩。看看函数是什么样子的。如果你给它们加上常数,或者翻转符号,看看它们是如何变化的。对数据科学家来说,感受一下多项式绘制时的样子是一项非常有价值的技能。只有通过练习,你才能获得成功。

其他资源

很多人认为,如果你可以无缝地浏览两本书,你的数学背景就足以学习数据科学。那些书是-

  1. Gareth James 等人的《R 中的统计学习与应用导论》(ISLR)
  2. 【所有的统计:统计推断简明教程】拉里·乏色曼

(这两本书的页面上都提供了免费下载链接)

如果你在高中或大学学过数学,但你已经落伍了,想要重新学习,我建议你在 Coursera 上学习两门课程:

  1. 机器学习的数学:线性代数
  2. 机器学习的数学:多元微积分

它们由伦敦帝国理工学院提供,并免费审核(你可以免费观看所有视频,但必须付费访问作业和测验)。这些课程很特别,它们明确地把重点放在传授直觉上,与这些主题的传统大学课程非常不同。我强烈推荐他们。

可汗学院播放列表中的这些主题也非常好。事实上,他们的多元微积分课程是由格兰特·桑德森教授的!

不要被误导-个人笔记

如果你四处打听,你会发现对这件事有很多不同的看法。我请你不要被误导。

在我早期,我在网上向一些统计背景的人寻求帮助。我说我想学习回归算法。他们建议我在开始机器学习之前阅读 1000 多页。我意识到我要花几个月的时间来涵盖这些材料,并且我将落后几个月开始我的数据科学研究。这是不可接受的。

我在看视频,读关于研究数据科学的文章,而不是真的研究它!不要犯这种错误(这就是我在第一节讲的)。

所以,我忽略了这个建议,我开始学习数据科学。我意识到,以我的物理本科背景,我对数学主题的覆盖足以应对数据科学初学者可能遇到的任何事情。我完全能够理解吴恩达在 Coursera 的机器学习课程、fast.ai 的深度学习课程以及学习 ISLR 时遇到的数学方程和概念。我还获得了 IBM 颁发的数据科学专业证书。

我在前一节提供了一个问题列表。把能够回答这些问题看作是一个试金石。如果你仍然怀疑自己开始数据科学研究的能力,不要犯和我一样的错误。开始学习数据科学,亲自看看吧!

您可以免费学习数据科学课程。吴恩达的机器学习课程完全免费。

如果你认为你的数学不够好,停下来一段时间,从我提到的来源学习数学。

作为一名学生,我总是想知道引擎盖下发生了什么。我想知道为什么 3x 的导数是 9x,当我们说 i = -1 是什么意思?我花了几个小时寻找这些问题的答案。

如果你像我一样关注课程和课堂之外的数学,作为一个数据科学的初学者,你会很容易地通过任何你会遇到的事情。

参考

[1]:Bat 教育:教育者的七项原则

结尾注释

如果你现在对开始数据科学犹豫不决,我希望我能把你推到另一边。

我是一个注重数学严谨性的人,这是非常重要的。这篇文章关注的是你需要知道的入门知识。我鼓励你在这个过程中参加麻省理工学院的线性代数和多变量微积分课程。

我的目标是劝阻您在开始数据科学之旅时,不要往脑子里装太多的数学概念和主题,而是尽快开始研究实际的数据科学。

我的理解是,拥有坚实的数学基础对于在数据科学领域取得成功至关重要。

与我联系-

和平!

数据科学家实际赚多少钱?

原文:https://towardsdatascience.com/how-much-money-do-data-scientists-actually-make-2408675c79cb?source=collection_archive---------21-----------------------

深入探讨数据科学家的薪酬。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

乔治·特罗瓦托(Giorgio Trovato)在Unsplash【1】上的照片。

目录

  1. 介绍
  2. 初级数据科学家
  3. 中级数据科学家
  4. 高级数据科学家
  5. 额外补偿
  6. 摘要
  7. 参考

介绍

数据科学家这一有利可图的角色肯定能提供丰厚的薪水;然而,一些公司可能会对这一角色有不同的看法,这使得美国乃至世界各地的薪酬差异很大。即使是在同一家公司,根据职位的资历,工资的范围也可能相差几千英镑。我面试了几家公司,虽然我不能说出它们的具体情况和各自的薪水,但我可以证明网上公开记录的薪水范围。我将概述数据科学职位的三个主要资历层次及其薪资范围。此外,我将根据工作描述中所需的技能,对能提供或多或少收入的角色进行评论。我将从一个著名的网站上报告工资,并根据我的经验评论一个通用的工资。

薪水总是一个敏感的话题,不管你是不被允许谈论它,还是不想谈论它。我们的社会非常忌讳讨论薪水,我完全不同意这一点。我知道有些公司确实在努力公开他们的工资。然而,如果你不自信地提出一个你认为有点高,但相对来说仍然很低的薪水,然后发现公司计划提供比你建议的高出几千的薪水,你真的会被雇主冤枉。但是,既然你先提出工资,公司就省了一大笔钱,他们这样做似乎是不可思议的错误。这几乎就像是雇主希望他们的员工和同事不知道他们的工资水平,以保护他们,但这适得其反,因为你会有,比如说,10 名员工,他们有着相同的经历,但工资水平差异很大,这最终会泄露出去,然后感情会受到伤害。

我能给任何谈判薪资的人(不仅仅是数据科学家)的最重要的建议是,知道自己的价值,对自己诚实,不要满足于低工资。不要求几十万块钱,而是看平均工资,问问自己,到目前为止,我在事业上、教育上做了什么才能做得更好。作为对我建议的补充,我想给读者一份来自我个人经历的报告工资和一般工资期望的总结报告。我所有的薪水都是以美元计算的。

如果您想了解更多关于三个不同子职位的数据科学薪酬,以及对额外薪酬的评论,请继续阅读下面的内容。

初级数据科学家

像初级数据科学家这样的角色不会持续很长时间,所以如果这个工资范围达不到你的标准或期望,也不用担心。因为数据科学在劳动力中是一个相当新的职位,或者至少是一个正式的头衔,大多数初级职位只包括你的第一个职位,这很可能会持续一年。之后,你可以向普通的中层数据科学家职位努力。但是我们不要想太多。因为确实有最新的(它将包括更新的日期和年、月、日)和关于工资的一般流行信息,我将使用它们作为我的主要工资参考。

这是初级数据科学家的平均工资:

确实报道了初级数据科学家的薪资近似值【2】——86000 美元

他们也有 32,000 美元到 168,000 美元的范围,这似乎有点离谱。所以,我就给一点自己的投入。从概括的角度来看,我认为您可以期待一个更具体和更窄的范围:

我报告的初级数据科学家的薪资近似值——90,000 美元

然而,我确实知道一些初级职位的薪水要低得多,但是如果可以的话,我还是会尝试申请其他职位,尤其是如果你有硕士学位的话。

中级数据科学家

中级数据科学家也可以被认为是拥有 1-3 年经验的普通数据科学家,有些人会说是 2-3 年。第一年结束后,你不仅会对自己的数据科学能力更有信心,也会对自己的谈判能力更有信心。有些公司提供的价格可能比我下面要介绍的要少或多;然而,大致了解你知道自己的价值是什么也很重要。面试时,不要害羞地说出你认为可以或可能做出的成绩,而是告诉他们你知道你应该做出的成绩。除了多年的经验之外,还要考虑其他特征,这一点很重要,但也包括:

projects you have worked on — impact on the businesseducationboot campsadditional coursescompany successlocation/city

确实报道了数据科学家的薪资近似值【3】——12.1 万美元

对我来说,这个报告的汇总工资似乎有点高;然而,有三年工作经验的人可能比有一两年工作经验的人更重要,或者来自更大、生活成本更高的城市的报告。

我所报告的数据科学家的薪资近似值——110,000 美元——115,000 美元

我相信,如果你在第一年后就想找一份工作,11 万美元左右更为准确。

高级数据科学家

数据科学领域的高级职位通常需要三到无限年的时间。还有其他一些职位有时会比高级职位和薪水更高,比如:

  • 首席数据科学家
  • 首席数据科学家
  • 数据科学家经理

确实报道了高级数据科学家的薪资近似值【4】——15.1 万美元

我相信这个报道的工资有点太高了;然而,如果你在纽约、旧金山和洛杉矶等城市,工资可能会超过这个平均值。

我报告的高级数据科学家的工资大约为 135,000 美元到 140,000 美元

我认为,如果你刚刚达到那个水平,这是对高级职位更公平的期望。

和所有这些报告的薪水一样,我假设你会从上一个职位跳槽到下一个职位,所以你会处于薪水范围的低端。

相反,一旦你已经在一个高级职位上,例如,转到另一个高级职位,你可以期望超过所有这三个角色的平均水平。

额外补偿

增加薪水的其他方法是拓宽你的技能。一些通常有利可图的技能包括但不限于:

  • 气流
  • 机器学习操作
  • 与软件架构的集成
  • 数据科学的自动化
  • 云计算
  • 演示技巧
  • 软件工程

除了薪水,还有其他形式的报酬需要注意。这些形式通常包括奖金(年薪的 5-15%)和股票。

摘要

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Unsplash【5】上由 Myriam Jessier 拍摄的照片。

当然,有很多网站和个人经验信息可以概括数据科学家的工资,但它总是在变化,并基于各种因素。你能做的最好的事情就是做你的研究,评估你在职业生涯中的位置,然后去争取一份符合你期望的薪水。

我希望你喜欢我的文章。欢迎在下面评论。感谢您的阅读!

参考

[1]Giorgio trova to 在 Unsplash 上拍摄的照片,(2020)

[2]的确,的确报道了初级数据科学家的工资近似值,(2020)

[3]确实,确实报道了数据科学家的工资近似值,(2020)

[4]的确,的确报道了高级数据科学家的工资近似值,(2020)

[5]Myriam Jessier 在 Unsplash 上拍摄的照片,(2020)

这些机器学习术语你能回忆起多少?(在媒体上学习游戏化)

原文:https://towardsdatascience.com/how-much-of-these-machine-learning-terms-can-you-recall-learning-on-medium-gamified-a280a53a0737?source=collection_archive---------52-----------------------

挑战你自己,而我试着制造中等的乐趣

介绍

机器学习是一个广泛的领域,包含各种其他子领域,如计算机视觉、自然语言处理、语音识别等等。

尽管机器学习有许多分支子领域,但一些关键术语在所有子领域中都是通用的。

本文介绍了一些常见的机器学习术语,并以游戏化的方式对这些术语进行了描述和解释。

通过阅读这篇文章,你可以获得以前看不到的机器学习词汇的知识,或者重温你在机器学习实践中可能遇到的术语

游戏规则

  1. 每一节都以单词开头,供您定义
  2. 花一两分钟时间,确保你能够回忆起作品的定义
  3. 请随意写下您的描述,以便与我的进行比较
  4. 当你写下你对这些术语的定义时,向下滚动页面查看我对这些术语的定义和解释
  5. 尽可能地学习,甚至在评论区随意添加一些你的定义。
  6. 玩得开心
  7. 欣赏来自 Unsplash 的图片

1.激活功能

在向下滚动之前,思考或写出你对激活功能的描述。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由 Tachina LeeUnsplash 上拍摄

我们开始吧……

3

2

1

激活函数是将神经元的结果或信号转换成标准化输出的数学运算。

作为神经网络组件的激活函数的目的是在网络中引入非线性。包含激活函数使神经网络具有更大的表示能力和解决复杂的函数。

激活功能也被称为“挤压功能”。

常见激活功能的示例如下:

  • Sigmoid 函数
  • 热卢
  • Softmax 函数

记住你的解释不一定要和我写的一样,只要你包括或记住了一些要点。

现在,你已经知道如何理解这篇文章了……从某种意义上来说,它就像抽认卡。

下一个。

2.整流线性单位

这是你思考或写作的时间,不要太长……

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

蒂姆·高Unsplash 上拍摄的照片

3

2

1

一种转换神经元值结果的激活函数。

ReLU 对来自神经元的值施加的变换由公式 y=max(0,x) 表示。ReLU 激活函数将来自神经元的任何负值钳制为 0,而正值保持不变。

这种数学变换的结果被用作当前层的输出,并被用作神经网络内的连续层的输入。

消失梯度的问题上,ReLU 是限制或避免消失梯度对神经网络的影响的标准解决方案。

如果你得到了前一个任期,那么这应该是在公园散步。

3.Softmax

如果不是,也没关系,花一两分钟考虑一下。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Icons8 团队Unsplash 上的照片

你现在知道该怎么做了。

3

2

1

一种激活函数,用于导出输入向量中一组数的概率分布。

softmax 激活函数的输出是一个向量,其中它的一组值表示一个类或事件发生的概率。向量中的值加起来都是 1。

如果你喜欢这篇文章的格式,请留下你的评论。

4.Glorot 统一初始化器

这个有点难,放心踏出

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

本杰明·戴维斯在 Unsplash 上拍摄的照片

这么快就回来了…好了,我们走吧

3

2

1

Glorot 统一初始化器是一种神经网络的权重初始化方法,用作解决神经网络内不稳定梯度的解决方案。

它根据某个范围内的值分布初始化网络的权重,平均值评估为零,方差恒定。分布的最大值是范围的正值,最小值是范围的负值。

范围=【值,-值】

用于确定分布范围的值来自以下公式:

值= sqrt(6/fan _ in+fan _ out)

fan_in 是输入到层的数目, fan_out 是层内神经元的数目。

更多关于纸张 这里

4.损失函数

既然我们在中途,这里有一个简单的术语。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由布鲁斯·马尔斯Unsplash 上拍摄

告诉你这很容易

3

2

1

损失函数是一种量化机器学习模型表现得有多好的方法。量化是基于一组输入的输出(成本),这些输入被称为参数值。参数值用于估计预测,而“损失”是预测值和实际值之间的差异。

5.优化(神经网络)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

马修·施瓦茨在 Unsplash 上的照片

3

2

1

神经网络中的优化器是一种算法实现,通过最小化经由损失函数提供的损失值来促进神经网络中的梯度下降过程。为了减少损失,适当地选择网络内的权重值是至关重要的。

优化算法的示例:

  • 随机梯度下降
  • 小批量梯度下降
  • 内斯特罗夫加速梯度

6.多层感知器(MLP)

这是一个老的学期,让我们看看你是怎么做的……

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

马修·班尼特在 Unsplash 上的照片

多层感知器(MLP)是几层感知器一个接一个地连续堆叠。MLP 由一个输入层、一个或多个称为隐藏层的 TLU 层以及一个称为输出层的最终层组成。

3

2

1

7.三重威胁

  • 学习率
  • 学习率计划表
  • 学习率衰减

保持冷静,你能行的

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

麦迪逊·拉弗恩Unsplash 上拍摄的照片

记住这都是关于学习的,所以如果你想不起来几个也没关系。

3

2

1

学习率是神经网络不可或缺的组成部分,因为它是一个决定网络权值更新水平的因子值。

学习率时间表:在神经网络的训练过程中可以使用恒定的学习率,但这会增加达到最佳神经网络性能所需的训练量。通过利用学习速率表,我们在训练期间引入学习速率的适时减少或增加,以达到神经网络的最佳训练结果。

**学习率衰减:**学习率衰减减少了梯度下降过程中向局部最小值移动的步长的振荡。通过将学习率降低到与训练开始时使用的学习率值相比更小的值,我们可以将网络导向在最小值附近的更小范围内振荡的解。

8.神经类型转移

这是最后一个

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

弗雷德里克·图比尔蒙特在 Unsplash 上拍摄的照片

3

2

1

神经风格转移(NST) 是一种涉及利用深度卷积神经网络和算法从一幅图像中提取内容信息并从另一幅参考图像中提取风格信息的技术。在提取样式和内容之后,生成组合图像,其中所得图像的内容和样式源自不同的图像。

NST 是一种图像风格化的方法,这是一种涉及使用输入参考图像来提供具有从输入图像导出的风格差异的输出图像的过程。

我希望这篇文章的内容对你有用。

要联系我或找到更多类似本文的内容,请执行以下操作:

  1. 订阅我的 YouTube 频道 即将上线的视频内容 这里
  2. 跟我上
  3. 通过 LinkedIn 联系我

您的神经网络的预测有多少可以归因于每个输入特征?

原文:https://towardsdatascience.com/how-much-of-your-neural-networks-prediction-can-be-attributed-to-each-input-feature-62581efd9b38?source=collection_archive---------16-----------------------

用 PyTorch 实现的具有集成梯度的深度神经网络。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由 img.lyUnsplash 上拍摄

众所周知,神经网络是黑盒预测器,数据科学家通常不知道哪个特定输入特征对预测影响最大。如果我们想了解模型实际学到了什么,这可能是相当有限的。有了这种理解,我们就可以发现我们的学习算法或数据处理管道中的错误或弱点,从而能够改进它们。

我们将在本项目中实施的方法称为集成梯度,在以下文章中有所介绍:

在本文中,作者列出了一个好的属性方法应该遵循的一些理想的公理,并证明了他们的方法 Integrated gradients 满足这些公理。其中一些公理是:

  • 灵敏度:如果两个样本仅在一个特征上不同,并且通过神经网络具有不同的输出,那么这个特征的属性应该是非空的。相反,如果一个特征根本不影响输出,那么它的属性应该为零。
  • 实现不变性:如果两个网络的所有输入都有相同的输出,那么它们的属性应该是相同的。

更多的公理可以在上面链接的文章中详细找到。

积分梯度很容易实现和使用,它只需要计算神经网络输出相对于其输入的梯度的能力。这在 PyTorch 中很容易做到,我们将在下面详细介绍如何做到这一点。

该方法:

我们将我们的神经网络表示为函数 F:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们对特征向量 x 的属性感兴趣,并且还引入了基线特征向量 x’。该基线 x '允许我们对原因的“不存在”进行建模,并且其通过神经网络的输出应该接近于零。

积分梯度法的计算如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

其中 x_i 是向量 x 的第 I 个特征。

示例:

合成示例:

让我们生成一个合成数据集,尝试更好地理解这种方法。

我们将数据生成流程设定为:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这可以用 python 来实现,如下所示:

**def** build_dataset(size):
    pos_size = 32
    neg_size = 32
    noise_size = 32
    pos_cols = [**"POS_%s"** % i **for** i **in** range(pos_size)]
    neg_cols = [**"NEG_%s"** % i **for** i **in** range(neg_size)]
    noise_cols = [**"NOISE_%s"** % i **for** i **in** range(noise_size)]

    pos = {i: np.random.uniform(-1, 1, size=size) **for** i **in** pos_cols}
    neg = {i: np.random.uniform(-1, 1, size=size) **for** i **in** neg_cols}
    noise = {i: np.random.uniform(-1, 1, size=size) **for** i **in** noise_cols}

    df = pd.DataFrame({**pos, **neg, **noise})

    df[**"target"**] = df.apply(
        **lambda** x: sum(
            [x[k] * (i + 1) / pos_size **for** i, k **in** enumerate(pos_cols)]
            + [-x[k] * (i + 1) / neg_size **for** i, k **in** enumerate(neg_cols)]
        ),
        axis=1,
    )

    coefs = (
        [(i + 1) / pos_size **for** i, k **in** enumerate(pos_cols)]
        + [-(i + 1) / neg_size **for** i, k **in** enumerate(neg_cols)]
        + [0 **for** i, k **in** enumerate(noise_cols)]
    )

    **return** np.array(df[pos_cols + neg_cols + noise_cols]), np.array(df[**"target"**]), coefs

我们可以看到,所有特征的系数并不相同,有些是正的,有些是负的,有些是零。

我们在这个数据上训练一个多层感知器,如果模型正确地学习了数据模式,那么我们期望发现特征 x_i 的属性大约等于:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

因为它是与基线相比,我改变输出的特性的数量。

并且:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

因此,让我们实施综合梯度,并检查我们的实证结果是否有意义。

首先,我们在 PyTorch 中通过拟合训练数据来训练回归模型。然后我们选择 x '全为零。

为了计算积分,我们使用一种近似法,通过从 x 到 x’计算小间隔的 dF 值,然后对 dF * size_of_interval 求和。使用以下函数实现整个过程:

**def** compute_integrated_gradient(batch_x, batch_blank, model):
    mean_grad = 0
    n = 100

    **for** i **in** tqdm(range(1, n + 1)):
        x = batch_blank + i / n * (batch_x - batch_blank)
        x.requires_grad = **True** y = model(x)
        (grad,) = torch.autograd.grad(y, x)
        mean_grad += grad / n

    integrated_gradients = (batch_x - batch_blank) * mean_grad

    **return** integrated_gradients, mean_grad

使用 torch.autograd.grad 可以轻松计算梯度。在我们的函数中,所有要素的运算同时进行矢量化。

现在我们已经得到了积分梯度,让我们检查它是否符合我们的预期:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们可以看到,属性的估计值(橙色)与我们的预期值(蓝色)非常接近。该方法能够识别特征如何影响输出,以及哪些特征对目标没有影响。

图像示例:

现在让我们做一个图像分类的例子,我们将使用在 ImageNet 上训练的 resnet18 应用于我的猫的照片。我们将使用与上述完全相同的过程,每个图像像素将被视为一个输入特征。我们将得到一个结果,其中每个像素由它对图像分类的影响程度表示为一只虎斑猫。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

我们可以看到,对“虎斑猫”输出神经元影响最大的像素位于猫的面部。

结论:

积分梯度是了解每个输入要素对神经网络输出的影响的好方法。该方法解决了现有方法的一些缺点,并满足一些公理,如敏感性和实现不变性。
在处理神经网络时,这种方法可以成为一种很好的工具,以便更好地理解它们的预测,甚至检测训练算法或数据集是否存在一些问题。

代号:https://github.com/CVxTz/IntegratedGradientsPytorch

多少 Python 编程才够开始学习数据科学?

原文:https://towardsdatascience.com/how-much-python-programming-is-enough-to-start-learning-data-science-c8f4fb098075?source=collection_archive---------24-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

杰森·斯特鲁尔在 Unsplash 上的照片

您是否对数据科学感兴趣,但因为没有任何编程经验而不确定自己能否成功?或者不确定编程多少才够入门?

不要担心!在本文中,我将解释开始学习数据科学所需的基本 python 编程概念。即使你不选择 python 来学习数据科学,主题也是一样的。

设置环境

第一步是设置正确的环境,学习 python 最好安装 Anaconda。使用 Anaconda 有一些好处。

  • 它配有 Jupyter 笔记本和 Spyder IDEs
  • 您可以选择通过命令提示符或使用 Navigator(基于 UI)来访问 ide
  • 它有超过 1500 个数据科学包
  • 设置和开始使用极其简单快捷
  • 易于创建多个环境,当您处理许多对库具有不同对比依赖关系的项目时,该特性尤其有用

在这里安装来自的蟒蛇。您可以使用这里的链接开始使用 Anaconda,这将涵盖所有基本的命令和特性。如果你更喜欢视频,我制作了一个关于 Anaconda 入门的视频,请看下面:

在开始任何主题之前,请尝试熟悉您将要使用的 IDE,比如启动 IDE、关闭 IDE、清除内存、执行脚本等等。

变量和字符串数据类型

成功安装该工具后,下一步是了解如何声明变量,并了解更多关于字符串数据类型以及可以对字符串数据类型执行的操作的信息。

理解字符串数据类型在 python 中的工作方式很重要。Python 中的字符串数据类型被认为是一个字符数组,可以使用方括号通过指定索引来访问字符串中的字符

您应该熟悉的一些字符串操作是

  • replace()-用于用新值替换字符串中的特定值
  • Split() —用于根据分隔符将字符串拆分为两个或更多部分
  • 连接-用于连接多个字符串的加号运算符
  • Trim() —用于删除字符串前后多余的空格
  • Lower()和 Upper() —用于更改字符串的大小写,从大写改为小写,或者从小写改为大写
  • 使用索引来过滤字符串子集
  • 使用“IN”和“NOT”检查字符串中是否存在短语

参考 python 教程这里来学习 python 编程语言的这些概念和特性

数字、布尔和运算符

了解 python 中的三种数值数据类型——整型、浮点型和复杂型。还介绍了将数据从一种数字格式转换为另一种数字格式的方法,以及它如何反映在数据中。例如,定义一个整数,把它转换成浮点数,然后检查这个值发生了什么变化。

Boolean 表示真或假。它们通常用于评估表达式/条件,如 Is A > B?

对于运算符,它们用于在变量或值之间或者变量和值的组合之间执行运算。python 中的一些操作符是,

  • 赋值运算符
  • 比较运算符
  • 算术运算符
  • 逻辑运算符
  • 按位运算符
  • 身份和成员运算符

从教程这里了解所有的 python 操作符,并通过试用它们来实践

集合数据类型(列表、元组、集合和字典)

python 中有四种集合数据类型。对于初学者来说,所有这些数据类型可能看起来非常相似,但是它们中的每一种都有独特的特性,使其与其他类型不同,并使它们对于特定的用例来说是特殊的。它们的一些独特特征是,

列表

  • 使用“[”和“]”括号声明
  • 可以使用索引来访问元素
  • 它们是可变的,这意味着它们可以被改变
  • 它们可以被分类
  • 列表元素可以是任何数据类型
  • 用例:这是 python 中最流行的集合数据类型,因为它提供了更多的灵活性。

元组

  • 使用“(”和“)”括号声明
  • 元组是不可变的,这意味着它们一旦被定义就不能被改变
  • 它们是有序的,可以使用索引来访问
  • 元组比列表快得多
  • 元组的元素可以是任何数据类型
  • 用例:这应该在元素列表不能或者不应该被改变的场景中使用

设置

  • 使用“{”和“}”括号声明
  • 它们是可变的
  • 它们没有排序,也没有访问特定元素的索引,因此不能有任何重复
  • 虽然集合本身是可变的,但是它们不能有可变的元素,就像“列表不能是集合中的元素”
  • 集合的特点是它们允许像并集和交集这样的运算
  • 用例:当需要比较不同的值列表时,比如确定公共元素的数量,那么最好将它们定义为一个集合

字典

  • 使用“{”和“}”括号声明
  • 这些元素存储为类似于 JSON 格式的键值对
  • 它们是可变的
  • 它们是无序的,但是可以使用键访问这些元素
  • 用例:当你想在一个键和值之间有一个映射,比如一个客户的联系号码,那么最好将它们声明为一个字典。同样,字典数据类型可以用来存储更复杂的数据结构

查看教程这里的可以更好地理解上面的集合数据类型以及可以在这些集合数据类型上执行的操作。

条件语句(If-Then-Else)和控制流语句(For 和 While 循环)

用 python 实现这些是必须知道的。正如在任何数据科学项目中一样,将会有一个用例要求我们遍历一个项目列表或一个数据帧,我们需要为其实现循环功能。类似地,总是需要检查一个条件。因此学习下面的实现——使用 python

  • 如果-那么-否则
  • For 循环
  • While 循环

对于编程新手来说,“For 循环”和“while 循环”之间的基本区别是,“For 循环”将迭代通过特定的元素列表,在这里变量将被初始化、检查并自动递增,而在“While 循环”的情况下,它将迭代直到满足 While 循环中指定的条件,还需要明确提到初始化和递增。当我们确定迭代次数时,最好使用“For Loop”。在“While 循环”中,如果你没有提到循环中的 increment 语句,那么它将成为一个无限循环。

函数和λ函数

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由沙哈达特·拉赫曼Unsplash 上拍摄

函数用于避免代码重复,降低复杂性,提高可读性。python 中的函数是用“def”定义的,通常以“return”语句结束。当一组语句需要在项目的不同部分执行多次时,最好将它们定义为一个函数,并在需要时调用它们。这些函数可以接受任意数量的参数作为输入,并且在调用函数时,参数的数量必须完全匹配,也就是说,如果函数需要两个参数,那么在调用函数时,我们需要传递两个参数,不能多也不能少。

Lambda 函数类似于一个函数,它可以接受任何参数,但只有一个表达式。与函数不同,lambda 函数可以保持匿名。对于 lambda 函数,将使用关键字“lambda ”,语法为“lambda arguments: expression”。

这些基本概念刚好够开始学习数据科学。如果你喜欢教程视频,那么看看我在 python basic 上制作的数据科学所需的视频系列,它有 7 个模块,每个模块大约 20-30 分钟,每个模块结束时都有锻炼练习,教程的总长度不到 3 小时。以下是 python 基础教程系列的链接,请订阅更多与数据科学相关的内容。

最后声明

这只是你编程之旅的开始。这些概念对于开始学习数据科学非常有用,也有助于打破你的学习障碍。只要记住继续你的学习之旅。

“智力的增长应该从出生开始,只有在死亡时才停止”

-阿尔伯特·爱因斯坦

如何更有效地标注训练数据

原文:https://towardsdatascience.com/how-much-time-can-you-save-with-active-learning-b4886f5da462?source=collection_archive---------53-----------------------

通过主动学习节省时间和精力

如果你曾经参加过任何从零开始的机器学习项目,你可能知道大量的时间通常花在对数据进行标记上。标记数据的数量和质量通常决定了项目的下一步以及最终结果。

选择标记哪些数据的传统方法是简单地选取一个你有标记能力的随机样本

在这篇文章中,我想探索一种更有效的选择标记数据的方法,称为主动学习,基于这样一种想法,一些数据点可能比其他数据点给模型带来更多的信息价值。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由 Unsplash 上的 NeONBRAND 拍摄

主动学习

主动学习的主要原则是让模型选择哪些数据实例应该由人工注释者(通常称为 oracle)标记*,这样可以用更少的标记数据获得更好的性能。*

让模型做到这一点的最常见的场景被称为基于池的采样,其中有大量未标记的数据可用。从这个池中,模型使用某个查询策略绘制要标记的实例。在标记了查询的实例之后,用新添加的数据重新训练模型,并再次重复该过程。

可能最简单的查询策略,也是我在实验中使用的策略,是不确定性采样。该策略查询模型预测最不确定的实例。如果我们想象一个二元分类问题,这些将是后验概率最接近 0.5 的实例。

多类分类问题中,有几种方法进行不确定性采样:

最小置信度采样 选择最可能的标签具有最小置信度的实例(其概率离 1.0 最远)。

边缘采样 选择最可能和第二可能标签之间差异最小的实例。

熵采样 选择熵最高的实例(统计概率使用 此公式 )。

实验

我决定做一个实验,比较所有的三种多类方法,以及基本的随机抽样。为此,我使用了 DBPedia Classes 数据集,这是一个多类文本分类的通用基准数据集。

从数据集中,我随机选择了 5000 个实例到我们的未标记数据池中。这些数据将被使用不同的策略进行查询,然后被标记为。标注本身并不需要实际执行,因为数据集已经包含了标签。因此,标签只是在需要时简单地分配给实例。

接下来,我创建了一个具有一个卷积层的简单模型,在输入中使用手套词嵌入。我需要这个模型非常轻量级,因为它会在每次查询后被反复重新训练。

用于每个查询策略的模型。

主动学习需要总是从已经标记的一小部分数据开始,因此在实际开始查询之前,模型至少要经过一点训练。这个小数据集被称为种子。我设置了 100 个实例的种子,这些实例是从我们的池中随机选择的,被标记并用于每个策略。

下一个参数是批量大小,它在主动学习的上下文中意味着在模型重新训练之前,应该一次查询和标记多少个实例。理想情况下,我们将使用批处理大小 1,这样模型在每个标记的实例后重新训练,从而最大化查询的有效性。这通常是不可能的,因为训练本身计算量很大,需要一定的时间。在这个实验中,我使用的批量为 50。

总的来说,我用这个批量做了 98 次迭代,它和 100 个实例的种子一起贯穿了我们已经建立的整个池。每一次迭代,模型的准确性都在一个单独的测试集上进行测量。每种策略的结果如下图所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

准确度给定标记数据的数量,使用不同的查询策略。图片作者。

正如您所看到的,所有三种查询策略都以非常相似的方式执行,并且都比随机抽样要好。我们还可以看到,在大约 4500 个标记实例之后,所有的查询策略(包括随机抽样)都达到了相同的精度。这仅仅是因为我们即将到达池的末端,这里几乎所有的数据都被贴上标签,而不管策略如何。

现在让我们试着将结果转换成现实生活场景。如果我们项目的目标是达到例如 85%的准确度,那么可以通过使用随机抽样标记 1900 个实例,或者使用最小置信度抽样标记 1150 个实例来实现。这意味着花费在标记数据上的时间减少了 39.5%。

定义项目范围的另一种方式是,我们有能力标记例如 2000 个数据实例。通过这种方式,我们将使用随机抽样达到 85.96%的准确度,使用最小置信度抽样达到 88.4%,这意味着通过标记相同数量的数据,准确度提高了 2.44%。

结论

结果似乎很有希望,但是,我们必须意识到,它们可能因数据集而异。值得一提的是,主动学习可能会有一些缺点。

其中之一是在项目开始时为主动学习设置基础设施可能需要一些时间(尽管一些框架已经可用),并且重新训练模型的过程可能在计算上要求很高

另一个是你最终得到的带标签数据的分布偏向于已经用于查询的模型。如果您现在出于某种原因决定更改模型,那么数据将不再来自随机分布,这对您的新模型来说可能比实际情况更糟。

总的来说,我希望我给了你一个关于积极学习的好的概述,并且当你开始你的下一个项目时,你会考虑到它。

该实验的代码可在这本 kaggle 笔记本中找到。

启发主动学习文献调查

感谢您的阅读!

[## 通过观察偏差和方差来系统地调整你的模型

有没有想过是否有比盲目猜测超参数或…更系统的方法来调整您的模型

towardsdatascience.com](/systematically-tuning-your-model-by-looking-at-bias-and-variance-4986662315b2) [## 零射击学习字母字符(代码实验)

是否有可能识别培训中未提供的字母字符?

towardsdatascience.com](/zero-shot-learning-the-alphabetic-characters-an-experiment-with-code-d1a0f23f4b4c)

抚养孩子实际上会花费你多少钱?

原文:https://towardsdatascience.com/how-much-would-raising-kids-actually-cost-you-299a589d004?source=collection_archive---------50-----------------------

建立一个交互式计算器来帮助计划生育

概述

在这篇文章中,我们将开发一个交互式计算器,它可以用来估算一个家庭抚养孩子的年度总成本,按费用类别(如食物、衣服等)细分。).

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果对方法论不太感兴趣,您可以立即在这里使用计算器。

这个计算器是基于利诺等人的美国农业部报告,题为“家庭在孩子身上的支出”,该报告估计了抚养一个孩子到 17 岁的增量成本。

它考虑到了:

  • 你目前有几个孩子
  • 你最终想要几个孩子
  • 这些孩子的预期出生时间
  • 你家在哪里
  • 您家庭的收入水平

还没有考虑大学费用**,尽管未来的帖子会尝试这样做。**

请注意,我已经将美国农业部报告中的原始数据表转录到一个谷歌表格中,可以在这里访问,如果这对任何人都有帮助的话。

背景&动机

作为一个住在纽约的即将 30 岁的人,我的朋友群中关于“钱”的对话越来越频繁,越来越重要,并形成了相当有意义的人生决策。我差点因为密尔沃基失去了一个好朋友,因为他和他的妻子在考虑(在几个因素中)在密尔沃基和在纽约相比养育一个孩子的成本节约。朋友小组中的其他人已经开始倡导搬到波士顿、新泽西,甚至慕尼黑。

作为一个终生的纽约人和保持我们的朋友群体地理完整性的强烈倡导者,我希望利用我作为应用统计建模师和数据科学家的专业技能来弄清楚一旦我们有了家庭,我和我的朋友们是否(以及如何)能够负担得起继续在纽约生活。

我想有一个游戏计划

这是相当广泛的(但值得!)事业。它包括建立预测生命周期收入和支出轨迹的模型,个人债务和投资的演变,以及将个人财务状况的这些不同但相互关联的方面整合在一起的整体框架。(后续帖子即将发布!)

在这篇就职文章中,我想从分解一个至关重要的、改变生活的、重新安排优先次序的生活事件开始:生孩子。

最终产品

最终,我们会得到三个交互式图表:

  1. 随着时间的推移,您家中的孩子数量

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2.一段时间内您与孩子相关的总支出

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3.按类别分列的与儿童有关的支出细目(如食品、住房、教育等。)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

方法学

在一个高层次上,这种方法是基于 Lino 等人的美国农业部报告“家庭在孩子身上的支出”这似乎是该主题的权威来源(参见关于数据来源的注释部分)。

对于我们的计算器,我们将:

  1. 收集用户输入
  2. 计算给定时间点家庭中孩子的数量
  3. 使用美国农业部的估算,计算每个孩子的花费
  4. 在每个孩子的基础上说明有多个孩子节省的费用,如旧衣服、大宗购买食品/家庭用品、共用卧室等。

收集用户输入

我们希望我们的估计考虑到:

  • 我们住在哪里——生活成本以及生孩子的成本会因居住地不同而有很大差异——例如,在波斯顿抚养孩子与在印第安纳州的农村抚养孩子会有很大不同
  • 我们家庭的收入等级不出所料,美国农业部发现,收入较高的人能够负担得起并确实在育儿活动上花费更多
  • 我们目前有几个孩子
  • 我们期望未来有多少孩子
  • 那些孩子的时机

举个例子,让我们以一个具有以下特征的已婚夫妇家庭为例:

  1. 位于纽约市
  2. 年收入 12 万美元
  3. 有两个孩子,一个两岁半,一个五岁
  4. 打算多生两个孩子
  5. 期待他们的下一个孩子(他们的第三个)在未来 3 年内出生,但不会早于一年
  6. 期待在那之后再等一两年,生下他们的第四个也是最后一个孩子

他们会输入以下内容:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

请注意,地区和家庭收入类别直接取自美国农业部的报告。据我所知,没有更详细的数据,例如城市或收入十分位数级别的数据。

计算家庭中的孩子

根据上面的输入,我们可以计算出这些年来家庭成员中 18 岁以下儿童的数量:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们假设一个家庭的下一个孩子正好在“X 年内,但不会早于 Y 年”问题中输入的 X 和 Y 数字之间。

每个孩子的费用

美国农业部为有两个孩子的家庭中的一个独生子女提供了按孩子年龄和费用类别分列的支出估算。

例如,以下是它对东北部城市已婚夫妇家庭的估计:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

参见 Lino 等人的《2015 年家庭在儿童身上的支出》第 25 页,在此处找到。我还将报告中的表 1-7 转录到了谷歌表单中,可以在这里访问

我们可以这样理解,对于一对年收入超过 107,400 美元的夫妇,他们有两个分别为 2 岁半和 5 岁的孩子,他们在 2020 年与孩子相关的总支出预计为:

  1. 两岁半的孩子要 21610 美元
  2. +5 岁儿童 21,610 美元(尽管两个孩子属于不同的年龄组,但他们的总费用相同,这纯粹是巧合)
  3. =两个孩子每年总共 43220 美元

我们可以验证这确实与我们的计算器显示的一致(注意,2020 年是闰年,所以我们比 43,338 美元高一点,但 2019 年和 2021 年都正好是 43,220 美元):

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2020 年是闰年!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2021 年有合适的,43220 美元的数字

针对多个孩子进行调整

美国农业部的估计是针对两个孩子的家庭,所以我们将根据报告中提供的指导调整到一个孩子或三个以上孩子的家庭(见表 1-7 的注释):

要估算一个独生子女的费用,将相应年龄类别的总费用乘以 1.27。要估算一个有三个或三个以上孩子的家庭中每个孩子的费用,将每个适当年龄类别的总费用乘以 0.76。对于一个家庭中所有孩子的花费,这些总数应该相加。

我们根据“计算家庭中的孩子”这一步的输出结果,将它合并到我们的计算器中。

你自己试试!

自己试试计算器,让我知道你对潜在改进的想法。

[## 抚养孩子的成本计算器

根据你要生几个孩子、你住在哪里以及你的家庭收入来估算抚养孩子的成本。根据美国农业部的“家庭儿童支出”报告。](https://gameplan-app-21.herokuapp.com/apps/child-expenditures)

关于数据源的说明

如前所述,该方法基于这份美国农业部报告:

Lino、k . Kuczynski、n . Rodriguez 和 t . Schap(2017 年)。2015 年按家庭分列的儿童支出。杂项出版物编号 1528–2015。美国农业部营养政策和促进中心。

作者使用了 2011-15 年消费者支出调查访谈(CE)的数据,他们声称这是“全国范围内最全面的家庭支出信息来源”。

该样本由 23,297 个已婚夫妇家庭和 7,030 个单亲家庭组成,并通过使用 BLS 加权方法进行加权,以反映感兴趣的美国人口。

这似乎是该话题的权威来源。它被谷歌上所有关于“抚养孩子的成本”的热门搜索所引用,例如:

  • Investopedia 关于抚养孩子成本的文章,此处
  • 专注于金融咨询民主化的金融科技公司 SmartAsset 有一篇文章在这里
  • 给我带来最大安慰的是莱曼·斯通,他是一个无可挑剔的推特粉丝,在人口统计学方面(以及其他方面)非常有价值,在 2019 年有一长串引用它的帖子。

感谢您的阅读,并随时联系我们!

这就是我第一次基于计算机视觉的实习的情况!

原文:https://towardsdatascience.com/how-my-first-internship-was-all-like-364187922d44?source=collection_archive---------48-----------------------

“永远不要以为你什么都知道。请教和寻求帮助,大多数人都会拜倒在自己的石榴裙下,分享自己的技能。”托尼·克拉克

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源: shutterstock

毫无疑问,获得你的第一份实习,并开始在一些很酷的行业驱动的项目中工作,是每个毕业生都想参与的最激动人心的冒险。为你的工作获得报酬增加了更多的刺激。让我告诉你,我最近一直是这个旅程的一部分,在这篇文章中,我将讨论我的发现和工作。

我在印度本加卢鲁的一家快速发展的初创公司实习。我在那里做了一个半月的深度学习和计算机视觉实习生。

目录:

  1. 招聘人员是如何找到我的?
  2. 电话面试和招聘流程。
  3. 分配的项目。
  4. 我学到了什么。
  5. 欣赏
  6. 结论。

我是如何被接近的?

因此,我在计算机科学的 B.Tech 项目的第二年,为我的学期考试而学习。让我先告诉你,我有点痴迷于我的 LinkedIn 个人资料,我一天在那里徘徊 5 次。晚上,我打开手机,看到一条与 LinkedIn 相关的通知,看到这家初创公司的招聘人员向我寻求他的初创公司的带薪实习生职位,因为他对我的 LinkedIn 简介印象深刻。这个领域是深度学习和计算机视觉。当我在现场工作了一段时间后,我变得很兴奋,在短暂的聊天中,他问我我的 G ithub 个人资料链接和简历,并在规定的时间安排了一个电话。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源: Shutterstock

电话面试和选拔流程

所以我对他进行了电话采访,他问了我一些与深度学习和计算机视觉相关的话题,以及我过去从事的项目和一些技术问题。最后,他要求我为评估过程建立一个基于暴力检测的深度学习模型,该模型将能够检测暴力武器,如枪、步枪、刀、火等。,我一点也不知道主要项目(我将要工作)是基于相同的主题。

所以,我花了一两天的时间准备模型,为此我不得不从 google Images 上刮下相关图片,准备用于模型训练。我收集了大约 3000 张枪、刀和所有东西的照片,并把它们存放在单独的文件夹里。由于我的笔记本电脑没有所需的计算能力,所以我不得不在私人回购中上传 Kaggle 上的图像,并在那里进行所有的训练过程。我和他分享了链接,他对我的工作印象深刻,最后我收到了录取通知书。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源: Shutterstock

分配的项目

选拔过程结束后,我与招聘人员和其他实习生进行了小组通话,我应该与他们一起在一个团队中工作。所以我们就整个项目将如何进行进行了简短的讨论。

我们被指派设计和开发一个基于深度学习的端到端武器检测模型,该模型将检测暴力武器,如枪支、步枪、刀、火、烟。除此之外,我还被分配了一个独立的项目,研究基于遮挡的人脸检测模型。如果你不知道它是关于什么的,基本上它是关于*开发一个面部检测模型,它将能够检测任何人的面部,即使它在摄像机中是部分可见的。*由于我很难在孟加拉国旅行,所以我请求远程工作,他接受了。旅程就这样开始了。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Andrew Krasovitckii/shutterstock . com

项目开发进展如何,我学到了什么?

我不会进入这个项目的技术细节,而是给一个简单的概述。之前没用过 OpenCV 和图片抓取软件,所以要学。让我告诉你,开始一周是非常令人兴奋的,因为我学到了很多关于使用 python 编写代码来解决现实世界问题的东西,比如我编写了代码来一次性重命名 10,000 张图像,为此,有一次我想到手动重命名所有这些图像(尽管这会花费很多时间)。

因此,在建模过程中,我们采用 YOLOv3 算法进行目标检测。本地 PC 上的训练模型非常耗时,所以我们不得不在 google cloud 上进行,花费了我们大约 700 美元。我们根据我们的要求调整了算法的一些层,比如锚盒的数量等,经过一周的准备和 2-3 天的训练,我们的模型准备好了。除此之外,在视频和实时镜头上部署模型是最困难的部分,因为为了快速处理,我们必须删除一些模型层,使其快速工作。我将向您展示一个视频剪辑,通过它您将了解它的应用。

来源:洛克森科技

与此同时,我不得不开发基于遮挡的人脸检测模型(由于保密问题,不能透露技术细节)。这就是我整个实习项目的发展过程。

远程参与项目有时会让你感到沮丧,但最终唯一重要的是你开发的产品。在实习期间,我提高了我的沟通技巧,因为我必须主持与我的日常项目目标相关的日常虚拟会议,同时通过与相关产品经理交流我的进展,并与我的团队成员接触,让我感受到在现实世界的项目中在企业世界工作的感觉。

赞赏。

我们的工作得到了产品经理的高度赞扬,后来当我们了解到该公司为该产品申请了美国专利时,我为我们的成就做出了很大贡献。

结论。

最后,我想陈述一些我在旅途中经历和学到的东西。

  1. 永远不要拒绝在团队中工作的提议。
  2. 你的工作是有报酬的,所以不要在工作时间之外做额外的工作。
  3. 没有什么能代替努力。
  4. 维护并更新您的简历、LinkedIn 个人资料和 Github 个人资料。
  5. 热爱你所做的事情,它能减轻你的工作压力。
  6. 寻找比你更好的人,解决同样的问题,了解你和其他人思维模式的不同。

请继续关注更多类似文章。

如果这篇文章对你有所帮助。请在这里支持我https://www.buymeacoffee.com/shobhitsri

谢谢你。

网飞是如何让我看《艾斯·文图拉》——第四遍?

原文:https://towardsdatascience.com/how-netflix-got-me-to-watch-ace-ventura-the-4th-time-c15121bd971a?source=collection_archive---------59-----------------------

流媒体应用如何跟踪你的每次点击,并推荐内容。它告诉了你什么,以及你如何用它来预测你的未来。

“无聊”,我在翻阅我的网飞数据的电子表格时对自己说。然后我发现了一个名为“点击流”的文件,网飞记录了我的每一次点击。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

丹尼斯·詹斯在 Unsplash

你是怎么喜欢上那个看了四季 40 多集的情景喜剧的?那部关于海洋生物的纪录片怎么样?这是你的选择,还是一个被智能引擎的建议和布局严重辅助的选择?

您可以下载您的网飞数据,方法是登录网飞后,进入右上角菜单中的“帐户”,导航至“下载您的个人信息”伟大的新闻是它的突出,容易找到。坏消息呢?嗯,我在 5 月 17 日提出请求后,于 6 月 14 日得到了我的数据(见下文)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

虽然这完全符合当前的数据请求法规,但对于数据爱好者来说,等待文件存档来玩是一段很长的时间。

网飞报告数据档案包含几个常见的文件夹和结构,如您的帐户设置、您使用过的设备、支付模式、客户信息历史和附加信息表。为了了解档案,我们不得不称赞网飞,它实际上非常全面,整理得很好。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

网飞收集的数据类别

在这套附加信息说明中,有两个有趣的部分,他们解释得比我好得多。因此,关于网飞数据档案,请参见“点击流”和“内容互动”的说明。点击流指的是你在网飞的每一次点击,而“内容互动”指的是你如何在网飞的各种设备上与内容互动的一组表格。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

网飞有一个复杂的推荐引擎来找到你喜欢的节目。他们的魔力当然对一个纯粹的观众来说是隐藏的,但是,你可以从你自己的角度来审视它,看看你自己是如何在内容、偏好、剖析和最终导致行动的建议的海洋中游泳的。

  • 有时你会因为网飞决定自动播放下一个内容而结束播放?这种情况有什么规律吗?
  • 有时候你只看了几集,并没有上瘾,这在不同的类型中都适用吗?
  • 这种行为是一贯的吗?这取决于你睡得怎么样,你走了多少步吗?
  • 你是否有不同的“观众角色”,根据你每天或每周的模式偏好不同的内容?
  • 你的受暗示性和你的哥们相似吗,怎么比较?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来自网飞档案馆的数据集有你在网飞生活的数字副本,其他流媒体服务也有类似的流。除了性格测试和你可能对应的猫的类型之外,你可以很容易地想象这种类型的数据集的其他用途,例如建议领域之外的内容(例如,基于音轨的音乐)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

流行为等数据的可用性是前所未有的,令人着迷。这种数据的可移植性是一个分水岭,为新的应用打开了市场。和一群不同背景不同行为的朋友看什么电影好?那么,我们为什么不建立一个应用程序来结合数据集并找到共同点,以建议我们可能会一起欣赏的电影?反过来,基于我们共同和不同的流媒体历史,我可能会和什么人有很多讨论呢?

你是怎么看完《艾斯·文图拉》的?你想知道吗?

PS。基于对基于这些数据的应用程序的一些建议,我想添加一个链接到 Prifina public Slack 的 post 脚本,在那里我们有一个电影推荐应用程序预览(MovieMater),它基于组合的流媒体数据(想想网飞,亚马逊视频,Hulu,YouTube)生成推荐。加入讨论,点击这里查看应用

神经网络如何描绘山脉和山谷——3D 远足

原文:https://towardsdatascience.com/how-neural-networks-paint-mountains-and-valleys-3d-hike-69995663b72?source=collection_archive---------47-----------------------

如果你像我一样,你会遇到数百个神经网络输出的可视化,并觉得有些事情不合理。那是因为少了点什么。 准确地说是一个维度。

如果你直接来到这里,请看看第一个关于神经元的真实输出的故事。一旦你抓住了一个,就只是把两个和两个放在一起——无论是比喻还是字面意思!

[## 2D 人工神经网络中的神经元如何在三维可视化中弯曲空间

这是为那些想直观了解人工神经网络中神经元内部工作的人准备的。你只需要一个…

towardsdatascience.com](/how-a-neuron-in-a-2d-artificial-neural-network-bends-space-in-3d-visualization-d234e8a8374e)

好吧,假设我们肩负着一项“拯救世界”的任务,那就是找到一种方法来找出导致新冠肺炎的冠状病毒链中的一种病毒。当政治和秘密继续的时候,你把你的手放在在黑暗网络上泄露的最终数据库上。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

病毒耐热和耐辐射矩阵

分别是 X 轴和 Y 轴上的 耐热耐辐射矩阵 。令人讨厌的导致疫情病毒的种群是红色的,而其他“相对无害”的是其他看起来无害的绿色和黄色。

让我们一步一步地解决这个问题,或者说一步一步地解决。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

只有一条线的边界,又名 2D 神经元

红线给了我们 第一个边界 ,我们可以自豪地报告,致命的冠状病毒只能 在线的左侧 (蓝色阴影区域)。右边的任何东西(红色阴影区域)只是一个普通的旧病毒。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

单神经元神经网络

从我们的第一个故事中我们已经知道,在平面上使用线 的 分类只不过是一个具有两个输入神经元的表示。这还不能解决整个问题,但绝对是一个好的开始!

这条红线的方程式是“x-y-3=0”,但再次从我们这个系列的第一个故事中,我们知道得更清楚——一条线只不过是 2 个平面的交点。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

没有激活的“x-y-3”神经元的 3D 输出

神经元输出的不是一条线,实际上 是一个平面与红线*** 上的** 温度-辐射平面 相交。下面是神经元及其输出 没有 任何激活的样子。*

现在,让我们在这个输出之上应用一个简单的 sigmoid 激活,事情开始变得非常有趣。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

具有乙状结肠激活的“x-y-3”神经元的 3D 输出

中的 非线性输出景观:

蓝色 是冠状病毒可能驻留的地方。绿色的 斜坡 是我们逐渐从日冕之地爬向平原老病毒之地的地方。红色的 是只有普通病毒呆的地方。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

具有乙状窦激活的“x-y-3”神经元的 3D 输出的“俯视图”

如果您查看此输出的 顶视图 ,它会折叠回 2D,看起来非常类似于我们之前看到的带有网格线的图表。如果你只能从这个故事中学到一件事,那应该是这样一个事实,即使你在 2D 看一个神经元输出, 颜色实际上代表了神经元在 3D 中输出的强度。

如果你已经遵循了这一点,我们准备深入兔子洞。让我们添加 3 个新的神经元到问题中,看看我们能得出什么。所以坏的冠状病毒正在…

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

具有 4 个神经元的边界

  1. 红色 直线 x-y-3=0
  2. *****右* 线-x+y-3=0
  3. 紫色x+y-3 = 0 线**
  4. 绿色x+y+3 = 0****

免责声明:绿线与任何中东争端无关

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

具有 4 个具有 sigmoid 激活的神经元的神经网络

只需从彩色线条 中使用 参数画一些圆圈和箭头,就可以将简单的线图转化为看起来复杂的神经网络!我们已经在我们的 第一个故事 中做到了这一点。

4 个神经元的输出合在一起是一种享受。sigmoid 函数的非线性特性确保所有 4 个独立输出能够为最终组合输出带来各自的独特贡献

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

具有乙状结肠激活的 4 个神经元的 3D 输出

颜色组合仍然有效,但现在更好地定义了边界。蓝色山谷是冠状病毒的聚居地。绿色斜坡是我们逐渐从日冕之地爬向朴素的病毒之地的地方。红色的山是普通病毒停留的地方。

最后,从这个奇妙的景观的顶部看去。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

具有乙状结肠激活的 4 个神经元的 3D 输出的“俯视图”

如前所述, 颜色代表景观 的高度,进而代表神经网络输出 的 强度。

一首缺乏想象力的诗会读作 “红色高,蓝色低,绿色在爬得慢的地方”

这里是 2D 视图和三维俯视图的并排比较。这种人工神经网络输出决不是最佳的,但它应该有助于你在任何时候查看神经网络 分类输出 时,对实际发生的事情有一种直觉。**

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2D 视图与 3D 俯视图的并排比较

正如你所想象的,具有 3 个输入维度的神经网络输出的“俯视图”将由一个位于中心的蓝色球体来表示,然后随着你向外移动而变成绿色到红色。

**我将留给你最终的图像,它使用了一个 步骤 激活,而不是一个 s 形。果然,风景消失了,我们只剩下 悬崖 不奇怪,3D 俯视图与 2D 视图没有什么不同,因为阶跃函数从地板直接跳到天花板。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

具有二元阶跃激活的 4 个神经元的 3D 侧视图和俯视图输出

额外阅读: 如果你想了解更多关于神奇的 非线性 给神经网络带来的创造这些惊人形状的知识,这个正在进行的系列中的 4 分钟阅读将是一个 良好的开端

** [## 为什么没有非线性的神经网络只是一条美化了的线——3D 可视化

在本系列的第一部分,我们创建了一个简单的单神经元神经网络的可视化,以告诉苹果…

towardsdatascience.com](/why-a-neural-network-without-non-linearity-is-just-a-glorified-line-3d-visualization-aff85da10b6a)**

神经网络如何解决异或问题

原文:https://towardsdatascience.com/how-neural-networks-solve-the-xor-problem-59763136bdd7?source=collection_archive---------0-----------------------

以及为什么隐藏层如此重要

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

感知器是一种分类算法。具体来说,它是一个线性二元分类器。它是由弗兰克·罗森布拉特在 20 世纪 50 年代末发明的。

感知器基本上是作为一个阈值函数工作的——非负输出被放入一个类,而负输出被放入另一个类。

虽然有很多关于神经网络及其变体的讨论,但我们将讨论一个突出单层感知器和多层感知器之间主要差异的具体问题。

目录

**The Perceptron**
   Structure and Properties
   Evalutation
   Training algorithm**2d Xor problem  
**   The XOR function**Attempt #1: The Single Layer Perceptron** Implementing the Perceptron algorithm
   Results
   The need for non-linearity**Attempt #2: Multiple Decision Boundaries
**   Intuition
   Implementing the OR and NAND parts**The Multi-layered Perceptron
**   Structure and Properties
   Training algorithm**Attempt #3: The Multi-layered Perceptron
**   Implementing the MLP
   Results

组织和性能

感知器有以下组件:

  • 输入节点
  • 输出节点
  • 激活功能
  • 权重和偏差
  • 误差函数

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

具有 2 个输入节点的单层感知器的表示——作者使用 draw.io 绘制的图像

输入节点

这些节点包含网络的输入。在任何迭代中——无论是测试还是训练——这些节点都被传递来自我们数据的输入。

权重和偏差

当我们谈论“训练”一个模型时,这些参数是我们更新的。它们被初始化为某个随机值或设置为 0,并随着训练的进行而更新。偏差类似于独立于任何输入节点的权重。基本上,它使模型更加灵活,因为你可以“移动”激活函数。

估价

输出计算很简单。

  • 计算输入和权重向量的点积
  • 加上偏见
  • 应用激活功能。

这可以这样表达:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这通常被简化为权重和输入向量加上偏差的点积。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

激活功能

该函数允许我们以更有意义的方式拟合输出。例如,在简单分类器的情况下,比如说-2.58的输出对于分类没有多大意义。如果我们使用称为 sigmoidal 激活函数的东西,我们可以在 0 到 1 的范围内拟合它,这可以直接解释为属于特定类的数据点的概率。

尽管有很多种激活函数,我们将为我们的感知器使用一个简单的线性激活函数。线性激活函数对其输入没有影响,并按原样输出。

分类

感知器如何给一个数据点分配一个类?

我们知道一个数据点的评估由关系式wX + b表示。我们定义一个阈值( θ )来对我们的数据进行分类。通常,对于感知器,该阈值被设置为 0。

因此,wX + b大于或等于 0 的点将属于一个类别,而其余的点(wX + b为负)被分类为属于另一个类别。我们可以这样表达:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

训练算法

为了训练我们的感知机,我们必须确保我们正确地对所有的训练数据进行分类。请注意,这与您训练神经网络的方式不同,在神经网络中,您不会尝试正确分类您的整个训练数据。在大多数情况下,这将导致所谓的过度拟合。

我们通过计算梯度或δw 来开始训练算法。它是下式的乘积:

  • 对应于该权重的输入节点的值
  • 实际值和计算值之间的差异。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们通过简单地用计算出的梯度乘以学习率来增加我们的原始权重,从而得到我们的新权重。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这是如何工作的一个简单的直觉:如果我们的感知器正确地分类了一个输入数据点,actual_value — computed_value将是0,并且我们的权重不会有任何变化,因为梯度现在是0

2D 异或问题

在异或问题中,我们试图训练一个模型来模仿 2D 异或函数。

异或函数

该函数定义如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

XOR 真值表—作者图片

如果我们画出来,我们会得到下面的图表。这就是我们想要分类的。您在图例中看到的⊕(“o-plus”)符号通常用于表示 XOR 布尔运算符。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

XOR 输出图—作者使用 draw.io 绘制的图像

我们的算法——不管它是如何工作的——必须正确地输出 4 个点中每一个点的 XOR 值。我们将把这建模为一个分类问题,因此Class 1将表示 XOR 值 1,而Class 0将表示值 0。

尝试 1:单层感知器

让我们用单层感知器来模拟这个问题。

输入数据

我们将在其上训练模型的数据是我们看到的 XOR 函数的表。

**Data         Target
[0, 0]         0
[0, 1]         1
[1, 0]         1
[1, 1]         0**

履行

进口

除了通常的可视化(matplotlibseaborn)和数字库(numpy),我们将使用itertools中的cycle。这是因为我们的算法无限地循环通过我们的数据,直到它成功地正确分类整个训练数据,而中间没有任何错误。

数据

接下来,我们创建训练数据。这些数据对于每种逻辑门都是一样的,因为它们都接受两个布尔变量作为输入。

培训功能

这里,我们无限地循环数据,跟踪我们正确分类了多少连续的数据点。如果我们设法在一段时间内对所有东西进行分类,我们就终止了我们的算法。

如果没有,我们重置我们的计数器,更新我们的权重并继续算法。

为了可视化我们的模型是如何执行的,我们创建了一个数据点的网格,或者说一个网格,并在网格中的每个点上评估我们的模型。最后,我们根据模型的分类给每个点着色。因此,Class 0区域将被分配给属于该类的点的颜色填充。

感知器类

为了把所有的东西放在一起,我们用我们刚刚讨论过的函数创建了一个简单的Perceptron类。我们有一些实例变量,如训练数据、目标、输入节点数和学习率。

结果

让我们创建一个感知器对象,并在 XOR 数据上训练它。

你会注意到训练循环永远不会终止,因为感知器只能收敛于线性可分的数据。线性可分离数据基本上意味着您可以用 1D 的一个点、2D 的一条线、3D 的一个平面等来分离数据。

感知器只能收敛于可线性分离的数据。因此,它不能模仿异或函数。

请记住,感知器必须一次性正确地对整个训练数据进行分类。如果我们连续记录有多少点被正确分类,我们会得到这样的结果。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

超过 100 个训练周期的 correct_counter 的值-作者提供的图像

该算法仅在correct_counter达到 4 时终止——这是训练集的大小——因此这将无限期地继续下去。

对非线性的需求

很明显,单个感知器不能满足我们的目的:类不是线性可分的。这归结为一个事实,即单一的线性决策边界是行不通的。

非线性允许更复杂的决策边界。我们的 XOR 数据的一个潜在决策边界可能是这样的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们的 XOR 模型的潜在非线性决策边界—作者使用 draw.io 绘制的图像

2d XOR 问题—尝试 2

我们知道模拟 XOR 函数需要非线性的判定边界。

但是为什么我们必须坚持单一的决策边界呢?

直觉

让我们首先将 XOR 函数分解成它的 AND 和 OR 对应物。

两个布尔变量 A 和 B 上的 XOR 函数被定义为:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

让我们将A.~AB.~B加到等式中。因为它们都等于 0,所以等式仍然有效。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

让我们重新安排术语,这样我们可以从第一部分中抽出A,从第二部分中抽出B

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

进一步简化,我们得到:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

使用布尔代数的德摩根定律:~A + ~B = ~(AB),我们可以这样替换上式中的第二项:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

让我们分别用 x1 和 x2 代替 A 和 B,因为这是我们在数据中使用的约定。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

XOR 函数可以浓缩为两部分:一个 NAND 和一个 OR 。如果我们可以分别计算这些,我们可以使用AND 门合并结果。

让我们把公式的 OR 部分称为第一部分,把 NAND 部分称为第二部分。

建模 OR 零件

我们将像以前一样使用相同的感知器类,只是我们将在训练数据上训练它。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

OR 真值表—作者使用 draw.io 绘制的图像

这是收敛的,因为 or 函数的数据是线性可分的。如果我们像第一次尝试那样绘制正确分类的连续数据点的数量,我们会得到这个图。很明显,在迭代 50 次左右,它达到了值 4,这意味着它对整个数据集进行了正确的分类。

correct_counter 测量被我们的感知器正确分类的连续数据点的数量

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们或感知器的正确计数图——作者图片

决策边界图如下所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们的或感知器的输出图—作者的图像

模拟 NAND 部分

让我们进入第二部分。我们需要模拟一个与非门。就像 OR 部分一样,我们将使用相同的代码,但在 NAND 数据上训练模型。所以我们的输入数据应该是:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

NAND 真值表—作者使用 draw.io 制作的图片

经过训练后,下面的图表明,我们的模型收敛于 NAND 数据,并完美地模拟了 NAND 门。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

NAND 感知器的决策边界和正确计数器图—作者图片

将所有东西整合在一起

从中可以清楚地看出两件事:

  • 我们对两个逻辑门的输出执行逻辑“与”(其中第一个是“或”,第二个是“与非”)
  • 并且两个函数被传递相同的输入(x1 和 x2)。

让我们将这个模型应用到我们的网络中。首先,让我们把我们的两个感知机看作是黑盒。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们模型的平面图——作者使用 draw.io 绘制的图像

在添加了我们的输入节点 x_1 和 x_2 之后,我们最终可以通过一个简单的函数来实现这一点。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

添加输入节点—作者使用 draw.io 生成的图像

最后,我们需要一个 AND 门,我们将像刚才一样训练它。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们的和感知器的正确计数和输出图。—作者图片

我们现在拥有的是一个模拟 XOR 函数的模型。

如果我们要实现我们的 XOR 模型,它看起来会像这样:

如果我们从我们的模型(基本上是我们的 OR 和 n AND 模型的 AND)中绘制决策边界,我们会得到这样的结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们第二次尝试的输出图,显示了我们的 XOR 数据的正确分类——作者使用 draw.io 生成的图像

在所有 2 个输入逻辑门中,XOR 和 XNOR 门是唯一不可线性分离的。

尽管我们的模型是可行的,但对于大多数非线性分类或回归任务来说,它似乎不是一个可行的解决方案。真的是具体到这个案例,绝大多数问题都不能拆分成仅仅是简单的中间问题,可以单独解决,然后再组合。对于这样的事情:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

一个二维的二元分类问题——作者使用 draw.io 的图片

潜在的决策边界可能是这样的:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

符合我们示例的潜在决策边界—作者使用 draw.io 绘制的图像

我们需要寻找一个更通用的模型,它将允许非线性的决策边界,就像上面的曲线一样。让我们看看 MLP 是如何解决这个问题的。

多层感知器

MLP 的所有组件,如输入和输出节点、激活函数、权重和偏差,都与我们刚刚在感知器中讨论的相同。

最大的区别?MLP 可以有隐藏图层。

隐藏层

隐藏层是那些具有除输入和输出节点之外的节点的层。

MLP 通常被限制为只有一个隐藏层。

**隐藏层允许非线性。**隐藏层中的节点与输出节点没有太大的不同:先前层中的节点用它们自己的权重和偏差连接到它,并且通常用激活函数计算输出。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

多层感知器的一般结构——作者使用 draw.io 绘制的图像

激活功能

还记得我们在感知器模型的输出节点上使用的线性激活函数吗?还有几个更复杂的激活函数。你可能听说过sigmoidtanh函数,它们是一些最流行的非线性激活函数。

激活函数应该是可微的,这样网络的参数可以用反向传播来更新。

训练算法

虽然输出生成过程是感知器的直接扩展,但更新权重并不那么简单。这就是反向传播的由来。

反向传播是一种从输出层一直到起点更新模型权重和偏差的方法。其背后的主要原理是,每个参数的变化与其对网络输出的影响程度成比例。对模型输出几乎没有任何影响的权重将显示出非常小的变化,而具有较大负面影响的权重将显著变化,以提高模型的预测能力。

反向传播是一种算法,用于根据误差函数的梯度更新模型的权重和偏差,从输出层一直到第一层。

更新权重的方法直接来自求导和链式法则。

当谈到反向传播时,有很多内容需要讨论。它有自己的文章。所以如果你想了解更多,可以看看 Simeon Kostadinov 的这篇精彩文章。

[## 理解反向传播算法

了解神经网络最重要组成部分的具体细节

towardsdatascience.com](/understanding-backpropagation-algorithm-7bb3aa2f95fd)

尝试 3:多层感知器

建筑

对于网络的隐藏层数或每层中的节点数没有固定的规则。最佳性能的模型是通过反复试验获得的。

网络的架构指的是它的一般结构——隐藏层的数量、每层中节点的数量以及这些节点如何相互连接。

让我们用一个有两个节点的隐藏层。我们将在每个隐藏层节点中使用 sigmoid 函数,当然还有输出节点。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们 MLP 的最终建筑——作者使用 draw.io 绘制的图像

履行

这里使用的库如 NumPy 和 pyplot 与感知器类中使用的相同。

训练算法

这里的算法略有不同:我们对训练数据进行固定次数的迭代——准确地说是num_epochs。在每次迭代中,我们进行一次前向传递,然后进行一次后向传递,根据需要更新权重和偏差。这被称为反向传播。

乙状结肠激活功能

这里,我们定义一个 sigmoid 函数。如前所述,它应用于每个隐藏层节点和输出节点的输出。它是可微的,因此它允许我们舒适地执行反向传播来改进我们的模型。

它的派生也是通过_delsigmoid函数实现的。

向前和向后传球

在前向传递中,我们多次应用wX + b关系,并在每次调用后应用 sigmoid 函数。

在反向传递中,实现为update_weights函数,我们计算 6 个权重和 3 个偏差相对于误差函数的梯度,并通过因子learning rate * gradient.更新它们

最后,classify 函数按预期工作:由于 sigmoid 函数输出 0 到 1 之间的值,我们简单地将它们解释为属于特定类的概率。因此,大于或等于 0.5 的输出被归类为属于Class 1,而那些小于 0.5 的输出被称为属于Class 0

MLP 级

让我们通过创建一个 MLP 类将所有的东西集合在一起。我们刚才讨论的所有功能都放在里面了。plot函数与Perceptron类中的函数完全相同。

结果

让我们用0.2倍于5000倍的学习率来训练我们的 MLP。

如果我们绘制损失函数的值,我们在大约 5000 次迭代后得到下面的图,表明我们的模型确实收敛了。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们 MLP 5000 多个时代的损失图—作者图片

这里用我们的广义神经网络或 MLP 创建了一个清晰的非线性决策边界。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

决策边界图,显示决策边界和类别——由作者提供的图像

注意#1:添加更多的层或节点

添加更多的层或节点会产生越来越复杂的决策边界。但这也可能导致所谓的过度拟合,即模型在训练数据上达到非常高的精度,但无法推广。

Tensorflow 神经网络游乐场是一个很好的资源,您可以在那里尝试不同的网络架构并查看结果。

[## 张量流-神经网络游乐场

这是一种构建从数据中学习的计算机程序的技术。它非常松散地基于我们如何思考…

playground.tensorflow.org](http://playground.tensorflow.org/#activation=sigmoid&batchSize=30&dataset=xor&regDataset=reg-plane&learningRate=0.1&regularizationRate=0&noise=0&networkShape=2&seed=0.21709&showTestData=false&discretize=true&percTrainData=70&x=true&y=true&xTimesY=false&xSquared=false&ySquared=false&cosX=false&sinX=false&cosY=false&sinY=false&collectStats=false&problem=classification&initZero=false&hideText=false&batchSize_hide=false)

注意#2:选择损失函数

我们在 MLP 模型中使用的损失函数是均方损失函数。虽然这是一个非常流行的损失函数,但它对数据做了一些假设(比如它是高斯型的),并且在分类问题上并不总是凸的。这里使用它是为了更容易理解感知机如何工作,但对于分类任务,有更好的替代方法,如二进制交叉熵损失。

[## 训练深度学习神经网络——机器学习掌握时如何选择损失函数

使用随机梯度下降优化算法来训练深度学习神经网络。作为…的一部分

machinelearningmastery.com](https://machinelearningmastery.com/how-to-choose-loss-functions-when-training-deep-learning-neural-networks/)

代码

你可以在这里找到这篇文章的全部代码。

[## Polaris 000/blog code/xorperceptron . ipynb

这篇文章的示例代码可以在这里找到。

github.com](https://github.com/Polaris000/BlogCode/blob/main/XOR_Perceptron/xorperceptron.ipynb)

结论

生产或研究中使用的神经网络从来没有这么简单,但它们几乎总是建立在这里概述的基础之上。希望这篇文章能给你一些关于如何建立和训练感知器和香草网络的想法。

感谢阅读!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值