原文:KDNuggets
超越 Numpy 和 Pandas:解锁鲜为人知的 Python 库的潜力
原文:
www.kdnuggets.com/2023/08/beyond-numpy-pandas-unlocking-potential-lesserknown-python-libraries.html
图片由 OrMaVaredo 提供,发布在 Pixabay
Python 是世界上使用最广泛的编程语言之一,为开发者提供了广泛的库。
无论如何,当谈到数据处理和科学计算时,我们通常会想到像 Numpy
、Pandas
或 SciPy
这样的库。
在这篇文章中,我们介绍了三种你可能感兴趣的 Python 库。
1. Dask
介绍 Dask
Dask 是一个灵活的并行计算库,支持大规模数据处理的分布式计算和并行处理。
那么,我们为什么应该使用 Dask 呢?正如他们在 他们的网站上所说的:
Python 已经成长为数据分析和通用编程中的主导语言。这种增长得益于像 NumPy、pandas 和 scikit-learn 这样的计算库。然而,这些包并未设计用于超越单一机器的规模。Dask 的开发目的是将这些包及其相关生态系统本地扩展到多核机器和分布式集群,以处理超出内存的数据集。
因此,Dask 的一个常见用途是 他们说的:
Dask DataFrame 用于 pandas 通常需要的情况,通常是当 pandas 因数据大小或计算速度而失败时:
操作大型数据集,即使这些数据集无法全部加载到内存中
通过使用多个核心加速长时间计算
对大型数据集进行分布式计算,使用标准的 pandas 操作,如 groupby、join 和时间序列计算
因此,当我们需要处理巨大的 Pandas 数据框时,Dask 是一个不错的选择。这是因为 Dask:
允许用户在笔记本电脑上操作 100GB 以上的数据集,或在工作站上操作 1TB 以上的数据集
这确实是一个相当令人印象深刻的结果。
在幕后发生的情况是:
Dask DataFrame 协调了许多按索引排列的 pandas DataFrame/Series。Dask DataFrame 按 行 进行分区,通过索引值对行进行分组以提高效率。这些 pandas 对象可能存储在磁盘上或其他机器上。
因此,我们有了这样的结果:
Dask 和 Pandas 数据框之间的区别。图像由作者提供,自 Dask 网站上引用的图像自由改编。
Dask 一些实际功能
首先,我们需要安装 Dask。可以通过 pip
或 conda
来安装:
$ pip install dask[complete]
or
$ conda install dask
特性一:打开 CSV 文件
我们可以展示 Dask 的第一个特性:如何打开一个 CSV 文件。我们可以这样做:
import dask.dataframe as dd
# Load a large CSV file using Dask
df_dask = dd.read_csv('my_very_large_dataset.csv')
# Perform operations on the Dask DataFrame
mean_value_dask = df_dask['column_name'].mean().compute()
所以,正如代码所示,我们使用 Dask 的方式与 Pandas 非常相似。特别是:
-
我们使用
read_csv()
方法,完全与 Pandas 一样。 -
我们像在 Pandas 中一样截取一列。实际上,如果我们有一个名为
df
的 Pandas 数据框,我们可以这样截取一列:df['column_name']
。 -
我们对截取的列应用
mean()
方法,类似于 Pandas,但这里我们还需要添加compute()
方法。
同样,即使打开 CSV 文件的方法与 Pandas 相同,在底层 Dask 也在轻松处理超出单台机器内存容量的大型数据集。
这意味着我们看不到任何实际的区别,除了一个大型数据框不能在 Pandas 中打开,而在 Dask 中可以。
特性二:扩展机器学习工作流
我们可以使用 Dask 创建一个具有大量样本的分类数据集。然后,我们可以将其拆分为训练集和测试集,用 ML 模型拟合训练集,并计算测试集的预测结果。
我们可以这样做:
import dask_ml.datasets as dask_datasets
from dask_ml.linear_model import LogisticRegression
from dask_ml.model_selection import train_test_split
# Load a classification dataset using Dask
X, y = dask_datasets.make_classification(n_samples=100000, chunks=1000)
# Split the data into train and test sets
X_train, X_test, y_train, y_test = train_test_split(X, y)
# Train a logistic regression model in parallel
model = LogisticRegression()
model.fit(X_train, y_train)
# Predict on the test set
y_pred = model.predict(X_test).compute()
这个例子强调了 Dask 即使在机器学习问题中也能处理巨大数据集的能力,通过将计算分配到多个核心上。
特别是,我们可以使用 dask_datasets.make_classification()
方法为分类案例创建一个 “Dask 数据集”,并可以指定样本数量和块数(甚至非常大!)。
与之前相似,预测结果通过 compute()
方法获得。
**NOTE:**
in this case, you may need to intsall the module dask_ml.
You can do it like so:
$ pip install dask_ml
特性三:高效的图像处理
Dask 利用的并行处理能力也可以应用于图像。
特别是,我们可以打开多个图像,调整大小,然后保存调整大小后的图像。我们可以这样做:
import dask.array as da
import dask_image.imread
from PIL import Image
# Load a collection of images using Dask
images = dask_image.imread.imread('image*.jpg')
# Resize the images in parallel
resized_images = da.stack([da.resize(image, (300, 300)) for image in images])
# Compute the result
result = resized_images.compute()
# Save the resized images
for i, image in enumerate(result):
resized_image = Image.fromarray(image)
resized_image.save(f'resized_image_{i}.jpg')
所以,过程如下:
-
我们使用方法
dask_image.imread.imread("image*.jpg")
打开当前文件夹(或你可以指定的文件夹)中的所有 “.jpg” 图像。 -
我们使用方法
da.stack()
将所有图像调整为 300x300,使用列表推导式。 -
我们使用
compute()
方法计算结果,正如之前所做的那样。 -
我们使用
for
循环保存所有调整大小的图像。
2. SymPy
介绍 Sympy
如果你需要进行数学计算和运算,并且希望坚持使用 Python,你可以尝试 Sympy。
的确:既然我们可以使用我们钟爱的 Python,为什么还要使用其他工具和软件呢?
根据他们在 网站 上写的内容,Sympy 是:
一个用于符号数学的 Python 库。它旨在成为一个功能齐全的计算机代数系统(CAS),同时保持代码尽可能简单,以便易于理解和扩展。SymPy 完全用 Python 编写。
但是为什么使用 SymPy?他们建议:
SymPy 是…
- 免费: 根据 BSD 许可证,SymPy 既是言语上的自由,也是酒精上的自由。
- 基于 Python: SymPy 完全用 Python 编写,并使用 Python 作为语言。
- 轻量级: SymPy 仅依赖于 mpmath,一个纯 Python 库用于任意浮点算术,使其易于使用。
- 一个库: 除了作为交互工具使用,SymPy 还可以嵌入到其他应用程序中,并通过自定义函数进行扩展。
所以,它基本上拥有所有 Python 爱好者喜爱的特性!
现在,让我们看看它的一些特性。
SymPy 的一些功能演示
首先,我们需要安装它:
$ pip install sympy
**PAY ATTENTION:**
if you write *$ pip install* *simpy* you'll install another (completely
different!) library.
So, the second letter is a "y", not an "i".
功能一:解代数方程
如果我们需要解代数方程,可以这样使用 SymPy:
from sympy import symbols, Eq, solve
# Define the symbols
x, y = symbols('x y')
# Define the equation
equation = Eq(x**2 + y**2, 25)
# Solve the equation
solutions = solve(equation, (x, y))
# Print solution
print(solutions)
>>>
[(-sqrt(25 - y**2), y), (sqrt(25 - y**2), y)]
所以,这就是过程:
-
我们用方法
symbols()
定义方程的符号。 -
我们用方法
Eq
编写代数方程。 -
我们用方法
solve()
解方程。
当我在大学时,我使用了不同的工具来解决这些问题,我必须说 SymPy,如我们所见,是非常易读和用户友好的。
但是,确实:这是一个 Python 库,那么它会有什么不同呢?
功能二:计算导数
计算导数是我们在数据分析中可能需要的另一项任务。通常,我们可能因为各种原因需要进行计算,SymPy 确实简化了这个过程。实际上,我们可以这样做:
from sympy import symbols, diff
# Define the symbol
x = symbols('x')
# Define the function
f = x**3 + 2*x**2 + 3*x + 4
# Calculate the derivative
derivative = diff(f, x)
# Print derivative
print(derivative)
>>>
3*x**2 + 4*x + 3
如我们所见,这个过程非常简单且自解释:
-
我们用
symbols()
定义我们导数的函数符号。 -
我们定义函数。
-
我们用
diff()
计算导数,指定函数和我们计算导数的符号(这是一个绝对导数,但在有x
和y
变量的函数的情况下,我们还可以进行偏导数)。
如果我们进行测试,我们会看到结果在 2 到 3 秒内到达。因此,它也相当快。
功能三:计算积分
当然,如果 SymPy 能够计算导数,它也能计算积分。让我们来做:
from sympy import symbols, integrate, sin
# Define the symbol
x = symbols('x')
# Perform symbolic integration
integral = integrate(sin(x), x)
# Print integral
print(integral)
>>>
-cos(x)
在这里,我们使用方法 integrate()
,指定要积分的函数和积分变量。
难道这不更简单吗?!
3. Xarray
介绍 Xarray
Xarray 是一个扩展 NumPy 功能的 Python 库,使我们能够处理带标签的数组和数据集。
正如他们在 他们的网站上 说的:
Xarray 使得在 Python 中处理带标签的多维数组变得简单、高效和有趣!
同样:
Xarray 在原始类似 NumPy 的多维数组之上引入了维度、坐标和属性的标签,这使得开发者的体验更加直观、简洁且不易出错。
换句话说,它通过在数组维度上添加标签或坐标来扩展 NumPy 数组的功能。这些标签提供了元数据,并使多维数据的更高级分析和操作成为可能。
例如,在 NumPy 中,数组是通过基于整数的索引来访问的。
在 Xarray 中,每个维度都可以有一个关联的标签,使得根据有意义的名称来理解和操作数据变得更加容易。
例如,与其用arr[0, 1, 2]
访问数据,我们可以在 Xarray 中使用arr.sel(x=0, y=1, z=2)
,其中x
、y
和z
是维度标签。
这使得代码更易读!
那么,让我们看看 Xarray 的一些功能。
Xarray 的一些功能演示
和往常一样,安装方法如下:
$ pip install xarray
特性一:使用标记坐标
假设我们想创建一些与温度相关的数据,并希望用纬度和经度等坐标标记这些数据。我们可以这样做:
import xarray as xr
import numpy as np
# Create temperature data
temperature = np.random.rand(100, 100) * 20 + 10
# Create coordinate arrays for latitude and longitude
latitudes = np.linspace(-90, 90, 100)
longitudes = np.linspace(-180, 180, 100)
# Create an Xarray data array with labeled coordinates
da = xr.DataArray(
temperature,
dims=['latitude', 'longitude'],
coords={'latitude': latitudes, 'longitude': longitudes}
)
# Access data using labeled coordinates
subset = da.sel(latitude=slice(-45, 45), longitude=slice(-90, 0))
如果我们打印它们,会得到:
# Print data
print(subset)
>>>
<xarray.dataarray longitude:="">array([[13.45064786, 29.15218061, 14.77363206, ..., 12.00262833,
16.42712411, 15.61353963],
[23.47498117, 20.25554247, 14.44056286, ..., 19.04096482,
15.60398491, 24.69535367],
[25.48971105, 20.64944534, 21.2263141 , ..., 25.80933737,
16.72629302, 29.48307134],
...,
[10.19615833, 17.106716 , 10.79594252, ..., 29.6897709 ,
20.68549602, 29.4015482 ],
[26.54253304, 14.21939699, 11.085207 , ..., 15.56702191,
19.64285595, 18.03809074],
[26.50676351, 15.21217526, 23.63645069, ..., 17.22512125,
13.96942377, 13.93766583]])
Coordinates:
* latitude (latitude) float64 -44.55 -42.73 -40.91 ... 40.91 42.73 44.55
* longitude (longitude) float64 -89.09 -85.45 -81.82 ... -9.091 -5.455 -1.818</xarray.dataarray>
那么,让我们一步步看一下这个过程:
-
我们已将温度值创建为 NumPy 数组。
-
我们将纬度和经度值定义为 NumPy 数组。
-
我们使用
DataArray()
方法将所有数据存储在 Xarray 数组中。 -
我们使用
sel()
方法选择了一部分纬度和经度,这个方法可以选择我们想要的子集值。
结果也很容易读取,因此标记在很多情况下确实很有帮助。
特性二:处理缺失数据
假设我们正在收集与全年温度相关的数据。我们想知道我们的数组中是否有一些空值。以下是检查的方法:
import xarray as xr
import numpy as np
import pandas as pd
# Create temperature data with missing values
temperature = np.random.rand(365, 50, 50) * 20 + 10
temperature[0:10, :, :] = np.nan # Set the first 10 days as missing values
# Create time, latitude, and longitude coordinate arrays
times = pd.date_range('2023-01-01', periods=365, freq='D')
latitudes = np.linspace(-90, 90, 50)
longitudes = np.linspace(-180, 180, 50)
# Create an Xarray data array with missing values
da = xr.DataArray(
temperature,
dims=['time', 'latitude', 'longitude'],
coords={'time': times, 'latitude': latitudes, 'longitude': longitudes}
)
# Count the number of missing values along the time dimension
missing_count = da.isnull().sum(dim='time')
# Print missing values
print(missing_count)
>>>
<xarray.dataarray longitude:="">array([[10, 10, 10, ..., 10, 10, 10],
[10, 10, 10, ..., 10, 10, 10],
[10, 10, 10, ..., 10, 10, 10],
...,
[10, 10, 10, ..., 10, 10, 10],
[10, 10, 10, ..., 10, 10, 10],
[10, 10, 10, ..., 10, 10, 10]])
Coordinates:
* latitude (latitude) float64 -90.0 -86.33 -82.65 ... 82.65 86.33 90.0
* longitude (longitude) float64 -180.0 -172.7 -165.3 ... 165.3 172.7 180.0</xarray.dataarray>
因此,我们得出有 10 个空值。
另外,如果我们仔细观察代码,我们可以看到,我们可以将 Pandas 的方法应用于 Xarray,如isnull.sum()
,它统计了缺失值的总数。
特性一:处理和分析多维数据
当我们有可能标记数组时,处理和分析多维数据的诱惑很大。那么,为什么不尝试一下呢?
例如,假设我们仍在收集与特定纬度和经度相关的温度数据。
我们可能想计算温度的均值、最大值和中位数。我们可以这样做:
import xarray as xr
import numpy as np
import pandas as pd
# Create synthetic temperature data
temperature = np.random.rand(365, 50, 50) * 20 + 10
# Create time, latitude, and longitude coordinate arrays
times = pd.date_range('2023-01-01', periods=365, freq='D')
latitudes = np.linspace(-90, 90, 50)
longitudes = np.linspace(-180, 180, 50)
# Create an Xarray dataset
ds = xr.Dataset(
{
'temperature': (['time', 'latitude', 'longitude'], temperature),
},
coords={
'time': times,
'latitude': latitudes,
'longitude': longitudes,
}
)
# Perform statistical analysis on the temperature data
mean_temperature = ds['temperature'].mean(dim='time')
max_temperature = ds['temperature'].max(dim='time')
min_temperature = ds['temperature'].min(dim='time')
# Print values
print(f"mean temperature:\n {mean_temperature}\n")
print(f"max temperature:\n {max_temperature}\n")
print(f"min temperature:\n {min_temperature}\n")
>>>
mean temperature:
<xarray.dataarray longitude:="">
array([[19.99931701, 20.36395016, 20.04110699, ..., 19.98811842,
20.08895803, 19.86064693],
[19.84016491, 19.87077812, 20.27445405, ..., 19.8071972 ,
19.62665953, 19.58231185],
[19.63911165, 19.62051976, 19.61247548, ..., 19.85043831,
20.13086891, 19.80267099],
...,
[20.18590514, 20.05931149, 20.17133483, ..., 20.52858247,
19.83882433, 20.66808513],
[19.56455575, 19.90091128, 20.32566232, ..., 19.88689221,
19.78811145, 19.91205212],
[19.82268297, 20.14242279, 19.60842148, ..., 19.68290006,
20.00327294, 19.68955107]])
Coordinates:
* latitude (latitude) float64 -90.0 -86.33 -82.65 ... 82.65 86.33 90.0
* longitude (longitude) float64 -180.0 -172.7 -165.3 ... 165.3 172.7 180.0
max temperature:
<xarray.dataarray longitude:="">
array([[29.98465531, 29.97609171, 29.96821276, ..., 29.86639343,
29.95069558, 29.98807808],
[29.91802049, 29.92870312, 29.87625447, ..., 29.92519055,
29.9964299 , 29.99792388],
[29.96647016, 29.7934891 , 29.89731136, ..., 29.99174546,
29.97267052, 29.96058079],
...,
[29.91699117, 29.98920555, 29.83798369, ..., 29.90271746,
29.93747041, 29.97244906],
[29.99171911, 29.99051943, 29.92706773, ..., 29.90578739,
29.99433847, 29.94506567],
[29.99438621, 29.98798699, 29.97664488, ..., 29.98669576,
29.91296382, 29.93100249]])
Coordinates:
* latitude (latitude) float64 -90.0 -86.33 -82.65 ... 82.65 86.33 90.0
* longitude (longitude) float64 -180.0 -172.7 -165.3 ... 165.3 172.7 180.0
min temperature:
<xarray.dataarray longitude:="">
array([[10.0326431 , 10.07666029, 10.02795524, ..., 10.17215336,
10.00264909, 10.05387097],
[10.00355858, 10.00610942, 10.02567816, ..., 10.29100316,
10.00861792, 10.16955806],
[10.01636216, 10.02856619, 10.00389027, ..., 10.0929342 ,
10.01504103, 10.06219179],
...,
[10.00477003, 10.0303088 , 10.04494723, ..., 10.05720692,
10.122994 , 10.04947012],
[10.00422182, 10.0211205 , 10.00183528, ..., 10.03818058,
10.02632697, 10.06722953],
[10.10994581, 10.12445222, 10.03002468, ..., 10.06937041,
10.04924046, 10.00645499]])
Coordinates:
* latitude (latitude) float64 -90.0 -86.33 -82.65 ... 82.65 86.33 90.0
* longitude (longitude) float64 -180.0 -172.7 -165.3 ... 165.3 172.7 180.0</xarray.dataarray></xarray.dataarray></xarray.dataarray>
我们也以清晰可读的方式得到了我们想要的结果。
再次如前所述,为了计算温度的最大值、最小值和均值,我们使用了应用于数组的 Pandas 函数。
结论
在这篇文章中,我们展示了三个用于科学计算和运算的库。
虽然 SymPy 可以替代其他工具和软件,使我们能够使用 Python 代码进行数学计算,但 Dask 和 Xarray 扩展了其他库的功能,帮助我们在遇到其他最著名的 Python 数据分析和处理库存在困难的情况下提供帮助。
费德里科·特罗塔 从小就热爱写作,在学校时就写侦探故事作为班级考试的一部分。由于他的好奇心,他发现了编程和 AI。由于对写作的强烈热情,他无法避免开始写作这些话题,因此决定转行成为一名技术作家。他的目标是通过写作来教育人们有关 Python 编程、机器学习和数据科学的知识。了解更多关于他的内容,请访问 federicotrotta.com。
原文。经授权转载。
我们的三大课程推荐
1. 谷歌网络安全证书 - 快速进入网络安全职业道路。
2. 谷歌数据分析专业证书 - 提升你的数据分析能力
3. 谷歌 IT 支持专业证书 - 支持组织的 IT 需求
更多相关内容
超越独热编码:类别变量的探索
原文:
www.kdnuggets.com/2015/12/beyond-one-hot-exploration-categorical-variables.html
评论
作者:威尔·麦金尼斯。
在机器学习中,数据至关重要。用于根据数据进行预测的算法和模型很重要,也非常有趣,但机器学习仍然受到“垃圾进,垃圾出”这一理念的制约。考虑到这一点,让我们来看一下这些输入数据的一个小子集:类别变量。
我们的前 3 个课程推荐
1. 谷歌网络安全证书 - 快速进入网络安全职业生涯的捷径
2. 谷歌数据分析专业证书 - 提升你的数据分析技能
3. 谷歌 IT 支持专业证书 - 支持你的组织的 IT 需求
类别变量 (wiki) 是那些表示固定数量可能值的变量,而不是连续数量的变量。每个值将测量分配到这些有限组或类别中的一个。这些变量与有序变量不同,有序变量之间的距离应相等,无论类别数量如何,而有序变量则具有某种固有的排序。例如:
-
有序变量:低、中、高
-
类别变量:乔治亚州、阿拉巴马州、南卡罗来纳州……,纽约
我们稍后使用的机器学习算法倾向于需要数字而不是字符串作为输入,因此我们需要某种编码方法来进行转换。
插一句话:在这篇文章中还有一个概念会经常出现,那就是维度的概念。简单来说,就是数据集中列的数量,但它对最终模型有着重要的影响。在极端情况下,“维度灾难”的概念讨论了在高维空间中某些事物可能会停止正常工作。即使在相对低维的问题中,具有更多维度的数据集也需要更多的参数来使模型理解,这意味着需要更多的行来可靠地学习这些参数。如果数据集中的行数是固定的,而添加额外的维度却没有为模型提供更多的信息,这可能会对最终模型的准确性产生不利影响。
回到眼前的问题:我们想将分类变量编码为数字,但我们担心这个维度问题。显而易见的答案是直接为每个类别分配一个整数(假设我们事先知道所有可能的类别)。这称为序数编码。它不会给问题增加任何维度,但暗示了一个可能并不存在的变量顺序。
方法论
为了了解效果如何,我编写了一个简单的 Python 脚本来测试常见数据集上的不同编码方法。首先是过程概述:
-
我们收集一个包含分类变量的分类问题的数据集
-
我们使用某种编码方法将 X 数据集转换为数值
-
我们使用 scikit-learn 的交叉验证分数和 BernoulliNB()分类器来生成数据集的分数。这在每个数据集上重复 10 次,使用所有分数的均值。
-
我们存储数据集的维度、均值分数以及编码数据和生成分数的时间。
这在来自 UCI 数据集库的几个不同数据集上重复进行:
我尝试了 7 种不同的编码方法(4-7 的描述摘自statsmodel 的文档):
-
序数:如上所述
-
独热编码:每个类别一个列,每个单元格中填入 1 或 0,表示该行是否包含该列的类别
-
二进制:首先将类别编码为序数,然后将这些整数转换为二进制代码,然后将该二进制字符串的数字分成单独的列。这种编码以比独热编码更少的维度编码数据,但会有一些距离扭曲。
-
总和:比较给定水平的因变量均值与所有水平因变量的总体均值。也就是说,它使用每一个前 k-1 水平和水平 k 之间的对比。在这个例子中,水平 1 与所有其他水平进行比较,水平 2 与所有其他水平进行比较,水平 3 与所有其他水平进行比较。
-
多项式:对于 k=4 水平的多项式编码,系数包括线性、二次和三次趋势。这里的分类变量被假设为由一个基础的、等间距的数值变量表示。因此,这种编码仅用于具有相等间距的有序分类变量。
-
后向差分:将一个水平的因变量均值与前一个水平的因变量均值进行比较。这种编码可能对名义变量或序数变量有用。
-
Helmert:对一个水平的因变量均值与所有前一个水平的因变量均值进行比较。因此,‘逆’这个名字有时用来与前向 Helmert 编码区分。
结果
蘑菇
编码 | 维度 | 平均得分 | 耗时 | |
---|---|---|---|---|
0 | 序数 | 22 | 0.81 | 3.65 |
1 | 独热编码 | 117 | 0.81 | 8.19 |
6 | Helmert 编码 | 117 | 0.84 | 5.43 |
5 | 后向差分编码 | 117 | 0.85 | 7.83 |
3 | 求和编码 | 117 | 0.85 | 4.93 |
4 | 多项式编码 | 117 | 0.86 | 6.14 |
2 | 二进制编码 | 43 | 0.87 | 3.95 |
汽车
编码 | 维度 | 平均得分 | 耗时 | |
---|---|---|---|---|
10 | 求和编码 | 21 | 0.55 | 1.46 |
13 | Helmert 编码 | 21 | 0.58 | 1.46 |
7 | 序数 | 6 | 0.64 | 1.47 |
8 | 独热编码 | 21 | 0.65 | 1.39 |
11 | 多项式编码 | 21 | 0.67 | 1.49 |
12 | 后向差分编码 | 21 | 0.70 | 1.50 |
9 | 二进制编码 | 9 | 0.70 | 1.44 |
拼接
编码 | 维度 | 平均得分 | 耗时 | |
---|---|---|---|---|
14 | 序数 | 61 | 0.68 | 5.11 |
17 | 求和编码 | 3465 | 0.92 | 25.90 |
16 | 二进制编码 | 134 | 0.94 | 3.35 |
15 | 独热编码 | 3465 | 0.95 | 2.56 |
结论
这绝不是一项详尽的研究,但似乎二进制编码在保持合理一致性的情况下表现良好,没有显著的维度增加。正如预期,序数编码表现一直很差。
如果你想查看源代码、添加或建议新的数据集或编码方法,我已经将所有内容(包括数据集)上传到 GitHub:github.com/wdm0006/categorical_encoding
。
可以直接在那儿贡献,或在这里评论提出建议。
原始.
相关:
-
数据挖掘 Medicare 数据 – 我们能发现什么?
-
机器学习的 5 个部落 – 问题与答案
-
欺诈检测解决方案
更多相关话题
超越天网:打造 AI 演进的下一前沿
原文:
www.kdnuggets.com/beyond-skynet-crafting-the-next-frontier-in-ai-evolution
图片来源:Google DeepMind
在快速技术发展的时代,人工智能(AI)作为一种变革性力量,具有重塑行业和提升我们日常生活的潜力。AI 能力的核心在于数据——驱动其学习和决策过程的生命线。数据的可靠性不可过分强调,因为它是 AI 算法有效执行的基础。此外,确保数据的可获取性和维护道德隐私实践也成为影响 AI 未来成功的关键因素。
可靠数据:知情决策的支柱
现代企业在做出知情决策时,严重依赖 AI 生成的见解,涉及库存管理、客户支持、产品开发和广告活动等。然而,旧谚语“垃圾进,垃圾出”依然真实。糟糕的数据可能导致误导性结论和不良决策,造成财务损失和错失机会。
在考虑虚假信息或虚假宣传的潜在影响时,数据的可靠性变得尤为关键。在虚假信息如野火般传播的时代,基于不可靠数据训练的 AI 算法可能会无意中放大和延续虚假信息。这突显了建立严格的数据质量标准和健全的事实核查程序的重要性,以确保 AI 的输出是准确的。
普及有价值的数据洞察
在 AI 领域,源自数据的有价值洞察通常集中在大型科技公司手中。然而,AI 的潜在应用远远超出科技巨头。从医疗保健、农业到交通运输和金融,AI 驱动的解决方案可以革新行业,并造福各种规模的公司。这就是为什么每个人都应该获得 AI 使用的数据洞察,而不仅仅是少数几个人。
解锁 AI 对更广泛社会利益的潜力需要使数据访问民主化。中小企业、研究人员、初创公司甚至个人都应该有机会利用 AI 驱动的洞察。想象一个未来,在那里当地农民可以利用 AI 预测最佳收获时间,或小型零售商可以使用 AI 做出有关新店位置的明智决策。这个愿景需要从数据囤积转向数据共享。
消费者隐私与大科技公司的竞争优势
在消费者隐私和商业利益之间取得平衡,对于确保 AI 驱动的洞察能惠及整个社会而不损害个人权利或使企业处于不利地位至关重要。然而,深入探讨大科技公司与消费者数据隐私之间的关系,揭示了一个更复杂的故事。虽然这些公司将自己表现为保护个人数据的倡导者,但更深入的观察表明,他们的动机可能更多是为了获得竞争优势,而不仅仅是出于道德关切。
推动数据隐私背后隐藏的可能实际上是一个战略商业计划。一些大科技公司不仅保留用户数据以保护它,而且利用这些数据来完善自己的产品和商业模型,同时阻止竞争对手访问相同的数据。这使他们在市场中具有独特优势,实现个性化体验和有针对性的广告,而竞争对手无法匹敌。因此,数据隐私成为确保和巩固市场主导地位的一种手段。
然而,这种策略模糊了伦理责任和商业优势之间的界限。它提出了一个问题,即这些努力是否真正优先考虑用户的福祉,还是为了维持强大的市场地位而进行的精心计算的举动。无论他们的意图是源于真正的关切还是战略性收益,结果将决定未来几年 AI 等技术将如何影响我们的生活。
为伦理和包容性 AI 铺平道路
掌握 AI 全潜力的旅程始于认识到数据的关键作用。优质的数据是 AI 创新的基础,确保其可及性和可靠性至关重要。为了充分释放 AI 的能力,我们必须使所有类型的企业、组织和个人都能享受到洞察的民主化。
通过培养合作文化,遵守严格的数据质量标准,并倡导数据隐私,我们可以为 AI 应用铺平道路,使其既服务于商业利益,也造福社会。AI 的未来依赖于我们集体的承诺,塑造一个数据成为进步力量、可及性为核心原则、可靠性为 AI 驱动洞察标志的世界。
Jeff White**** 是 Gravy Analytics 的创始人兼首席执行官。他热衷于构建具有颠覆性技术的公司,这些技术有潜力改变整个行业。在创办 Gravy Analytics 之前,他创办了几家科技公司并带领它们成功退出。
了解更多相关话题
超越肤浅:有实质内容的数据科学 MOOCs
原文:
www.kdnuggets.com/2020/08/beyond-superficial-data-science-moocs-substance.html
评论
由 Mathieu Plourde(Flickr 上的 Mathplourde)- https://www.flickr.com/photos/mathplourde/8620174342/sizes/o/in/photostream/,CC BY 2.0,https://commons.wikimedia.org/w/index.php?curid=75937656
我们的前三个课程推荐
1. Google 网络安全证书 - 快速进入网络安全职业。
2. Google 数据分析专业证书 - 提升你的数据分析技能
3. Google IT 支持专业证书 - 支持你的组织 IT 工作
Benjamin Obi Tayo 在他最近的文章中"数据科学 MOOCs 过于肤浅"写道:
大多数数据科学 MOOC 是入门级课程。这些课程适合那些已经在相关学科(物理学、计算机科学、数学、工程、会计)有坚实背景的人,他们想进入数据科学领域。
他是对的。确实有很多入门级 MOOCs,彼此竞争以吸引入门级学习者。如果这是你所寻找的,那么这很好。但如果你是一个更高级的学习者呢?那你的选择是什么?是否存在有效的高级 MOOC 课程?
正如 Tayo 所指出的,学习数据科学有很多替代 MOOCs 的方法。确实没有理由将 MOOCs 视为唯一的选择。然而,除了入门级课程的相对占优势之外,还有一种趋势直接否定 MOOCs 在更高级别的有效性,这主要有两个原因。
首先,有一种普遍的假设认为,所有参加数据科学课程的人都完全没有相关的经验或教育,相关的假设是大家都相信他们可以在一个四周的课程之后成为数据科学家。
其次,有一种观点认为,很多人参加 MOOCs 只是为了获得相关证书,相关的假设是大家都认为获取这些证书必然会导致成功的数据科学职业。
如果你忽略这些假设,你可以将 MOOC 简单地视为一种潜在的学习和技能获取工具,适合不同程度的学生。鉴于许多 MOOC 是由世界级的讲师和教育机构组织的,因此从这些课程中学到有价值的东西的机会似乎很大。
鉴于此,本文将探讨一些适合那些已经掌握了一些数据科学基础技能的高级数据科学课程。什么是高级的呢?这显然是主观的,但我会尽力整理出自我分类为高级的相关课程。什么是数据科学基础技能?这也是主观的,在这个案例中,它们会有所不同,取决于所考虑的具体高级课程。
为了缩小庞大的 MOOC 课程范围,我不得不制定一个筛选标准。就我们的目的而言,有效的 MOOC 是指:
-
依托于一个 MOOC 平台,该平台允许免费访问课程材料,并可以选择付费获得证书
-
由大学或学习机构提供或附属(而不是由任何人组织)
-
实际上是将若干独立课程集合成某种多课程组合
第一条明显忽略了 Udacity 等相关的付费平台。第二条忽略了像 Udemy 这样的开放课程平台。第三条理论上允许课程的逻辑链条随着时间的推移构建深入相关的学习概念。
这个标准或多或少——就主要的 MOOC 平台而言——将我们限制在 Coursera 和 edx。请注意,我们本可以在这个标准的基础上进一步扩展定义,或考虑 MOOC 平台,但这个汇编列表旨在提供一些关于高级课程的想法,而不是全面的整理。
如果你已经掌握了数据科学的基础知识,并且希望通过优质的高级 MOOC 进一步提升自己的知识,看看这 4 个推荐课程吧。
高级机器学习专项课程 是由国立研究大学高等经济学院在 Coursera 提供的一系列 7 门机器学习相关课程。
这个专项课程介绍了深度学习、强化学习、自然语言理解、计算机视觉和贝叶斯方法。顶级 Kaggle 机器学习从业者和 CERN 科学家将分享他们解决实际问题的经验,并帮助你弥合理论与实践之间的差距。完成 7 门课程后,你将能够在企业中应用现代机器学习方法,并理解实际数据和设置中的注意事项。
这个专项课程包括:
-
深度学习导论
-
如何赢得数据科学竞赛:向顶级 Kagglers 学习
-
贝叶斯方法在机器学习中
-
实用强化学习
-
计算机视觉中的深度学习
-
自然语言处理
-
通过机器学习解决大型强子对撞机挑战
概率图模型专门化 是斯坦福大学 Daphne Koller 主办的 Coursera 上的 3 门课程的集合。
概率图模型 (PGMs) 是一种丰富的框架,用于在复杂领域中编码概率分布:大量随机变量之间的联合(多元)分布。这些表示位于统计学和计算机科学的交汇处,依赖于概率理论、图算法、机器学习等概念。它们是广泛应用中的最先进方法的基础,如医学诊断、图像理解、语音识别、自然语言处理等。它们也是制定许多机器学习问题的基础工具。
该专门化课程包括以下课程:
-
概率图模型 1:表示
-
概率图模型 2:推理
-
概率图模型 3:学习
哥伦比亚大学和 edX 的**人工智能 MicroMasters®项目**由 4 门课程组成,深入探讨了人工智能。
通过一个创新的在线项目,在人工智能及其应用领域的迷人而引人入胜的话题中,获得计算机科学最迷人和发展最快的领域之一的专业知识。哥伦比亚大学的这个 MicroMasters 项目将为你提供一个严格的、先进的、专业的研究生级别的人工智能基础。该项目代表了哥伦比亚大学计算机科学硕士学位课程的 25%。
组成 MicroMasters 项目的 4 门课程是:
-
人工智能 (AI)
-
机器学习
-
机器人技术
-
动画和 CGI 运动
强化学习专门化 是阿尔伯塔大学在 Coursera 上提供的 4 门课程的集合,涵盖了使用强化学习解决实际问题。你将学到以下内容:
发挥人工智能的全部潜力需要适应性学习系统。了解强化学习 (RL) 解决方案如何通过试错互动解决实际问题,方法是从头到尾实施完整的 RL 解决方案。
在完成这一专业课程后,学习者将理解现代概率人工智能(AI)的大部分基础,并为学习更高级的课程或将 AI 工具和思想应用于实际问题做好准备。本内容将重点关注“规模较小”的问题,以理解强化学习的基础,由阿尔伯塔大学科学学院的世界知名专家授课。
涉及的课程包括:
-
强化学习基础
-
基于样本的学习方法
-
使用函数逼近进行预测和控制
-
完整的强化学习系统(综合项目)
相关:
-
数据科学 MOOCs 太肤浅了
-
数据科学与机器学习的免费数学课程
-
绝佳的机器学习和人工智能课程
更多相关内容
超越 Word2Vec 仅限于词汇的使用
评论
作者:Stanko Kuveljic,SmartCat
构建一个机器学习模型通常需要经历大量的哭泣、痛苦、特征工程、折磨、训练、调试、验证、绝望、测试以及因无尽的痛苦而带来的一点点痛苦。经历了这些之后,我们部署模型并使用它来对未来的数据进行预测。我们可以根据情况和用例每小时、每天、每周、每月或者即时运行一次我们的“小恶魔”模型。
让我们看看一个与在线体育博彩推荐引擎相关的例子。该引擎的目标是预测用户是否会在某场比赛中选择特定的选项(例如,最终得分 - 主队获胜,进球 - 3 个或更多进球等)。这些预测基于用户历史记录,这些预测用于构建一个推荐给用户的投注单。
为了实现实时快速推荐,我们可以在用户出现之前就计算所有内容。这种用例允许我们对特征提取进行幻想,我们可以尽情玩弄特征,以便构建一个更准确的模型,而不会影响应用程序的性能。下图展示了一些玩具管道和预测。因此,基本上,我们的应用程序将快速提供预测,而我们的“撒旦仪式”可以安全地在后台运行。
哇哦,图片中甚至还有独角兽。但是,考虑到我们没有预定义的数据集,所有工作都需要即时处理,那怎么办呢?我们的独角兽可不会开心的 😦 让我们回到那个老生常谈的在线体育博彩例子。我们可以为尚未开始的比赛准备预测,但对于那些在比赛进行中下注的用户,也就是所谓的实时投注呢?我们的复杂特征工程和模型评分流程可能在实时为成千上万的用户提供服务时会遇到困难。一场体育比赛每隔几秒钟就可能发生变化,因此实时预测确实是我们所期待的。更糟糕的是,我们可能会对一场比赛的信息有限,从而无法提取所需的特征。可以尝试优化一个在尚未开始的比赛中表现非常好的模型,并尝试用更少的特征构建一个新模型。但是,我们总可以尝试一些新方法,从不同的角度看待问题。我们曾经处理过类似的问题,并尝试了 word2vector,但在我们的情况下是 bet2vector。有关 word2vector 的一般解释,请访问我们最新的博客之一 one。
Everything2Vector
所以 everything2vector 就是乐趣开始的地方。可以仅基于用户 ID 和过去模板的 IDs 为每个用户创建向量表示。我们来看以下数据样本:
从数据中我们可以看到,达斯·维德喜欢投注网球比赛,但他的儿子卢克则喜欢投注英超足球比赛。那么如何通过仅仅依靠 IDs 来实现魔法并进行学习呢?首先,我们需要进一步压缩关于比赛的信息,以便获取模板。这些模板可以根据一些相似特征对数据进行分组。在这种情况下,模板的创建方式是将相似的比赛——来自同一联赛的足球比赛、相同的比赛类型和类似的配额——分组到同一模板中。例如:
-
模板 1 - 网球 : 美国公开赛 : 赢得破发 : 1 : 配额范围 (1.5 - 2.1)
-
模板 2 - 网球 : 美国公开赛 : 决赛得分 : 2 : 配额范围 (1.8 - 2.6)
-
模板 3 - 足球 : 英超 : 进球数 : 0-2 : 配额范围 (1.5 - 2.0)
-
模板 4 - 足球 : 西甲 1 : 决赛得分 : 1 : 配额范围 (1.8 - 2.4)
-
…………………
-
模板 1000 - 篮球 : NBA : 总分 : >200 : 配额范围 (1.5 - 2.0)
确定模板的这些规则可以从数据统计中计算出来,也可以通过一些领域知识来定义。但最重要的是,这些规则在确定模板 ID 时运行非常快。这就是我们在特征工程任务中所需的一切。当我们将之前的数据转换为模板时,我们得到:
请注意,skip-gram 使用诸如“卢克,我是你父亲”这样的句子来确定哪些词是相似的。要实现类似的功能,我们需要将所有历史数据按会话分组。通过这种方式,我们可以获得表示用户历史的句子,并且用户 ID 现在接近他过去玩过的模板,如下所示:
结果
让我们看看向量表示在训练过程中是如何学习的。当一个算法看到一个用户玩了某个比赛模板时,它会将用户的向量表示和已玩模板的向量表示在向量空间中推得很近。同时(使用负采样技术),它将玩家向量和未玩的比赛模板向量在向量空间中推得远离彼此。在下图中,我们可以看到我们的“向量”在空间中的分布。图像中再次出现了一只快乐的独角兽,因为它喜欢这个解决方案。
我们看到达斯·维达接近那些代表网球比赛的模板,因为他喜欢打网球。卢克远离他的父亲,因为他不喜欢网球,但他喜欢足球,他会更接近那些代表足球比赛的向量。还有尤达,他也踢足球,但在不同的联赛中。但他比达斯更接近卢克,因为足球模板比足球和网球模板更相似。
算法的输出是用户 ID 和模板 ID 的向量,可以存储在某处。在预测时,数据每几秒钟变化一次,我们可以实时计算预测结果。我们只需要查找当前可用的模板向量,并与用户向量计算余弦相似度,以获取用户和模板之间的相似度分数。除了尝试有趣之外,这种技术在数据集上取得了良好的结果,并且实现了对大量用户和模板的快速预测,这些用户和模板经常发生变化。最重要的是,这种技术可以应用到任何地方,并且效果很好。例如,如果我们有关于历史交易的信息[user ID - 购买 - item ID],我们可以仅使用用户 ID 和物品 ID 来训练向量。基于训练得到的向量,我们可以向每个用户推荐最相似的物品。所谓最相似的,是指那些经常一起出现的物品。
圣诞快乐,愿力量向量与你同在。
原文。经许可转载。
相关内容
我们的三大课程推荐
1. Google 网络安全证书 - 快速开启你的网络安全职业生涯
2. Google 数据分析专业证书 - 提升你的数据分析技能
3. Google IT 支持专业证书 - 支持你的组织的 IT 需求
更多相关话题
机器学习中的偏差全都不好吗?
评论
Tom M. Mitchell 在 1980 年发表了一篇论文:学习归纳中的偏差需求中指出:
学习涉及从过去的经验中归纳,以应对与这些经验“相关”的新情况。处理新情况所需的归纳飞跃似乎只能在选择某种归纳而非另一种的特定偏差下才可能实现。本文准确地定义了归纳问题中的偏差概念,并表明偏差对于归纳飞跃是必要的。
我们的前三大课程推荐
1. 谷歌网络安全证书 - 快速进入网络安全职业生涯。
2. 谷歌数据分析专业证书 - 提升你的数据分析技能
3. 谷歌 IT 支持专业证书 - 支持你的组织在 IT 领域
在我们多年的预测模型构建过程中,我们被教导偏差会损害我们的模型。偏差控制需要由能够区分正确和错误偏差的人来掌握。
他的论文指出,某些偏差有助于我们为手头的问题创建适当的模型:
- 领域的事实知识
-
在为特定目的学习归纳时,可能会出现以下情况
通过参考关于任务领域的知识来限制考虑的归纳。比如在一个学习棒球规则的程序中(Soloway & Riseman 1978),关于竞争性游戏的一般知识限制了考虑的归纳数量。这种先验知识可以为所考虑的归纳提供强有力、合理的约束。在这种情况下,归纳系统的目标变为“确定与训练实例及任务领域中的其他已知事实一致的归纳”。
- 学习到的归纳的预期用途
- 对学习到的泛化的预期用途的知识可以为学习提供强大的偏差。举个简单的例子,如果学习到的泛化的预期用途涉及到错误的正类比错误的负类分类更高的成本,那么学习程序应该更倾向于选择更具体的泛化,而不是选择那些与相同训练数据一致的更一般的替代方案。
- 关于训练数据来源的知识
-
关于训练实例来源的知识也可以为学习提供有用的约束。例如,在从人类教师那里学习时,我们似乎利用了关于存在一个有组织课程的许多假设来约束我们对合适泛化的搜索。在有组织的课程中,我们的注意力会集中在实例的特定特征上,这种方式
消除关于哪个可能的泛化最合适的模糊性。
-
倾向于简单性和普遍性
- 人类似乎使用的一种偏差是倾向于简单、一般的解释。可解释性使我们能够向外行观众传达我们的模型,而黑箱模型可能会使模型构建者陷入困境。
-
与之前学到的概念的类比
-
如果一个系统正在学习一系列相关的概念或泛化,那么对这些概念的泛化可能会受到其他概念成功泛化的制约。例如,考虑学习块世界对象的结构描述任务,如“拱门”、“塔”等。学习了几个概念后,学到的描述可能会揭示某些特征在描述这一类概念时比其他特征更为重要。例如,如果泛化语言包含了结构中每个块的“形状”、“颜色”和“年龄”等特征,系统可能会注意到“年龄”很少是一个相关特征。
用于描述结构类别的偏差,可能会产生对其他特征的偏好。这种学习到的偏差的理由必须基于对所学习概念预期用途的某种相似性。
尽管这篇论文的时间是 1980 年,但其背后的逻辑确实让我们思考如何区分模型中的必要偏差和不必要的偏差。显然,我们必须消除那些会成为障碍的偏差,但随着我们不断实践并深入挖掘数据,我们可能会意识到一些偏差实际上可以使我们的模型更接近我们真正想要的效果。
在后续文章中,我将讨论在机器学习中应该避免的偏差类型。
相关:
-
大数据的三个主要问题及解决方法
-
设计伦理算法
-
算法并非偏见,我们才是
更多相关话题
偏差-方差权衡
编辑图片
你可能以前听说过偏差-方差权衡,觉得“嗯?”或者你可能从未听说过这个概念,正想着“这到底是什么?”
我们的前三个课程推荐
1. 谷歌网络安全证书 - 快速进入网络安全职业生涯
2. 谷歌数据分析专业证书 - 提升你的数据分析技能
3. 谷歌 IT 支持专业证书 - 支持你的组织的 IT 需求
无论如何,偏差-方差权衡是监督式机器学习和预测建模中的一个重要概念。当你想训练一个预测模型时,可以选择各种监督式机器学习模型。每种模型都有其独特之处,但最大的区别在于它们的偏差和方差水平。
在模型预测中,你会关注预测误差。偏差和方差是预测误差的两种类型,被广泛应用于许多行业。在预测建模中,模型的偏差和方差之间存在权衡。
理解这些预测误差的工作原理以及如何利用它们将帮助你建立既准确又表现良好的模型,同时避免过拟合和欠拟合。
让我们从这两个概念的定义开始。
什么是偏差?
偏差是由于模型从数据集中学习信号的灵活性有限而导致的结果偏差。它是模型的平均预测值与我们尝试预测的正确值之间的差异。
当你遇到一个具有高偏差的模型时,这意味着模型在训练数据上学习得不好。这进一步导致在训练数据和测试数据上的误差较高,因为模型由于没有学习数据特征等而变得过于简化。
什么是方差?
方差是指模型在使用不同的训练数据集时的变化。它告诉我们数据的分布情况以及在使用不同数据集时的敏感度。
当你遇到一个具有高方差的模型时,这意味着模型在训练数据上学习得很好,但在未见过或测试数据上无法很好地推广。因此,这会导致测试数据上的误差率较高,造成过拟合。
那么,什么是权衡呢?
在机器学习模型中,也需要找到那个平衡点。
如果一个模型过于简单——这可能导致高偏差和低方差。如果一个模型过于复杂,参数过多——这可能导致高方差和低偏差。因此,我们的目标是找到那个完美的点,以避免过拟合或欠拟合的发生。
低方差模型通常较为简单,结构也较为简单——但存在高偏差的风险。这些模型的例子有朴素贝叶斯、回归等。这会导致欠拟合,因为模型无法识别数据中的信号,从而无法对未见过的数据进行预测。
低偏差模型通常较为复杂,结构也较为灵活——但存在高方差的风险。这些模型的例子有决策树、最近邻等。当模型过于复杂时,这会导致过拟合,因为模型记住了数据中的噪音,而不是信号。
如果你想了解更多关于如何避免过拟合、信号和噪音的信息,可以点击这个链接。
这就是权衡发挥作用的地方。我们需要找到偏差和方差之间的平衡点,以最小化总误差。让我们深入了解总误差。
背后的数学
让我们从一个简单的公式开始,假设我们要预测的是‘Y’,其他协变量是‘X’。两者之间的关系可以定义为:
‘e’ 代表误差项。
在点 x 处的期望平方误差可以定义为:
这将产生:
这可以更好地定义为:
总误差 = 偏差² + 方差 + 不可减少的误差
不可减少的误差指的是建模中无法减少的“噪音”——减少它的一种方法是通过数据清理。
来源: 维基百科
然而,重要的是要注意,无论你的模型多么出色,数据总会有一个不可减少的误差元素,这无法被去除。当你找到偏差和方差之间的最佳平衡点时,你的模型将不会出现过拟合或欠拟合的情况。
结论
希望通过这篇文章,你能更好地理解什么是偏差,什么是方差以及它们如何影响预测建模。你还会了解到这两者之间的权衡是什么,为什么找到那个平衡点以产生最佳性能的模型是重要的,以避免过拟合或欠拟合——这背后有一点数学原理。
Nisha Arya 是一位数据科学家和自由技术作家。她特别关注提供数据科学职业建议、教程以及数据科学理论知识。她还希望探索人工智能如何有助于延长人类寿命的不同方式。作为一个热衷学习的人,她希望在拓宽技术知识和写作技能的同时,帮助指导他人。
大数据分析:为什么它对商业智能如此关键?
原文:
www.kdnuggets.com/2023/06/big-data-analytics-crucial-business-intelligence.html
编辑图像
人们常常误解大数据与商业智能之间的关系。在大多数情况下,你的商业智能解决方案已经在某种程度上使用了大数据分析。如果没有,那么这是你必须解决的一个巨大盲点。
但为什么大数据分析对现代企业如此重要?为什么你应该将其作为你的商业智能流程或技术栈的一部分?本指南将回答这两个问题及更多问题。但首先,让我们了解这些术语的含义,以便你能更好地理解它们如何以及在哪里适用。
什么是大数据分析?
随着越来越多的公司和行业开始拥抱技术,数字化转型支出预计到 2026 年将达到$3.4 万亿。我们已经看到对技术的依赖不断增加,没有哪个行业能够免于这种变化。例如,根据GetWeave进行的一项最新研究,98%的医疗服务提供者一致认为技术在提供卓越客户体验方面发挥了至关重要的作用。
所有这些技术和数字化转型开辟了数据收集的新途径。截至 2023 年,全球每天生成的至少有3.5 quintillion 字节的数据。这种大量收集的原始数据被称为大数据。
这些数据并非所有对企业都有用,通常,数据量太大,无法由传统的数据处理软件处理。在大多数大数据可以以有意义的方式使用之前,它必须经过排序、过滤甚至标记。这些过程构成了大数据分析的重要部分。
一些最常用的大数据技术和工具包括:
-
数据存储和处理(Hadoop)
-
数据供应和分发(Cassandra)
-
流分析工具
-
预测分析软件
-
数据湖
-
知识发现
-
数据挖掘工具
-
内存数据布置解决方案
-
数据虚拟化
-
数据清洗
-
集群计算框架
正如你所见,许多这些工具也被用于商业智能中。
什么是商业智能?
商业智能(BI)描述了使用技术从商业数据中提取可操作见解的过程。这些见解随后被可视化并呈现给公司高管,使他们能够基于实证数据做出明智的决策。
商业智能(BI)常常与商业分析(business analytics)混淆,这也是大数据分析被误解为 BI 的原因之一。然而,商业智能旨在通过利用旧数据和新数据来获得当下的成功,而商业分析则关注于当前数据与过去数据之间的联系,以预测未来数据(即业务的未来)。
这两种方法都可以利用大数据分析来实现目标,但让我们重点关注商业智能。它涉及到一系列分析流程和解决方案,例如(但不限于):
-
数据挖掘
-
预测分析
-
统计分析
-
大数据分析
-
数据可视化软件
-
关键绩效指标(KPI)
-
性能基准软件
-
查询软件
-
实时分析软件
通过实施有效的 BI 战略,公司可以提升访问和利用关键数据的能力。最终,BI 可以通过确保所有商业决策都以事实数据为基础,来提高公司整体盈利能力。它还可以帮助公司改善内部流程,从而使其运营更加优化。
你可以利用商业智能来揭示市场趋势,发现新的收入来源,识别被忽视的业务问题。大数据分析可以成为你组织 BI 战略的一个基本组成部分。
照片来源:Pexels
大数据分析在商业智能中的应用案例
大数据分析可以作为你商业智能战略的一部分,以下是几种应用方式:
产品开发和改进
新产品开发描述了一个产品的生命周期,从其创意到市场推广。你对产品开发的处理方式将取决于你使用的模型。例如,数据分析是 Roozenburg 和 Eekels 简单的 3 阶段新产品设计(NPD)模型中的第一步。
无论你选择哪种模型,基础步骤都需要进行严格的研究。这适用于产品改进或引入现有产品变体。
如今,大多数企业都有全球化的愿景,因为这为它们提供了更多的财务机会和激励。然而,这也需要更深入的市场研究,包括从调查、网站跟踪数据(cookies)、信用报告统计等获取的数据。
消费者的态度和需求不断演变,有些需求可能是季节性的。因此,你的数据池会不断增长和更新,实际上变成了大数据。你需要一个能够排序、处理和发现模式的大数据分析系统,其速度几乎与数据生成的速度相当。
商业智能软件可以以更可管理的方式呈现所有模式和统计数据。组织可以利用这些数据制定提案、蓝图和新产品设计和改进计划。他们还可以利用这些信息来确定运营和材料需求,并做出更精确的开发成本估算。
价格优化
如果公司能够在早期阶段计算开发成本,他们可以更准确地定价产品;这对于已建立的产品也是如此。
你的大数据应该包含指示当前全球经济气候与购物趋势之间联系的模式。例如,为了在 2022 年和 2023 年保持竞争力,公司们开始减少包装产品的总单位和质量。例如,一袋 500 克的薯片会被减少到 450 克但以相同的价格出售。这被称为缩水通货膨胀。
图片来源:Brett Jordan
大数据分析与商业智能相结合,可以帮助公司判断是提高价格还是通过其他方式弥补增长的成本会更有利。此外,它还将帮助你确定现有的产品线是否值得继续保留。
流媒体和电视制作也可以从大数据分析中受益。通过结合当前的时代精神、流媒体行为和民意调查,这些公司可以在决定取消哪些节目和保留哪些节目时做出更有效的决策。
例如,我们看到整批 Netflix 订阅者因为某个节目被取消而离开了这个流媒体巨头。Parrot Analytics 进行的一项研究发现,《青少年正义联盟》是 2023 年最受欢迎的系列之一。然而,HBO Max 在 2022 年底取消了它。
这告诉我们许多决策并没有完全基于信息。大数据分析和商业智能可以防止你的公司犯同样的错误。
供应链管理
2021 年和 2022 年经历了巨大的供应链中断,这也是当前通货膨胀的许多因素之一。许多零售商使用即时库存管理解决方案,尽管它可能很高效,但对供应链中断几乎没有保护。
大数据分析和商业智能可以帮助公司部署更灵活的库存和供应链管理。它们可以提供实时数据,然后由机器学习驱动的 BI 解决方案进行解释,以提供预测分析。
这可以帮助公司保护自己免受供应链中断的影响,因为这些供应链数据不仅限于可用的原材料或制造能力。它还考虑了天气、自然灾害导致的运输延误、购物趋势、定价、经济气候等。
你还可以利用这些信息在需求减少时减少库存,避免浪费。因此,它可以使你的 JIT 库存管理系统更为优化。
渠道分析
我们已经涵盖了大数据分析和商业智能如何结合来自各种渠道的信息,帮助企业改善其新产品设计和开发、价格优化和供应链管理。
但你如何确定每个渠道的质量和信息的完整性呢?渠道有很多种,而且不仅限于网络渠道。其他渠道可能包括客户支持电话、邮寄邮件、商店或分支机构位置等。
企业可以利用大数据分析和商业智能进行渠道发现。它们还可以揭示渠道的完整性、质量和效率,以及这些渠道如何与系统集成。最终,你可以把它看作是大元数据,因为它是关于你大数据的数据。通过确认你收集数据的渠道,你实际上是在确认你大数据的质量。
结论
大数据分析市场预计到 2029 年将达到超过 6500 亿美元。这并不令人惊讶,因为本指南已经展示了大数据分析如何用于丰富商业智能的多种方式。更多公司应该志在成为数据优先型企业,凭借如 Datapine 等公司提供的大数据分析商业智能解决方案,这应该比以往任何时候都更容易。
Nahla Davies 是一名软件开发人员和技术作家。在全职从事技术写作之前,她曾担任 Inc. 5,000 经验品牌组织的首席程序员,该组织的客户包括三星、时代华纳、Netflix 和索尼。
相关阅读
数据科学与大数据,解释
原文:
www.kdnuggets.com/2016/11/big-data-data-science-explained.html
介绍
什么是数据科学?什么是大数据?这些术语是什么意思,为什么弄清楚它们很重要?这些确实是热门话题,但经常被误解。此外,涉及的行业对这两个术语没有普遍一致的定义。
这些是极其重要的领域和概念,正变得越来越关键。世界上从未像今天这样收集或存储如此多的数据,而且速度如此之快。此外,数据的多样性和量也在以惊人的速度增长。
我们的三大课程推荐
1. Google 网络安全证书 - 快速进入网络安全职业生涯。
2. Google 数据分析专业证书 - 提升你的数据分析水平
3. Google IT 支持专业证书 - 支持你所在组织的 IT
为什么你应该关注数据科学和大数据?数据在许多方面类似于黄金。它非常宝贵,有很多用途,但你通常需要挖掘才能实现其价值。
这些是新领域吗?关于数据科学是否为新领域存在很多争议。许多人认为,类似的实践已被称为统计学、分析、商业智能等。无论如何,数据科学是一个非常流行且突出的术语,用于描述许多不同的数据相关过程和技术,接下来将进行讨论。另一方面,大数据相对较新,因为收集的数据量以及相关挑战继续需要新的创新硬件和处理技术。
本文旨在为非数据科学家提供数据科学和大数据背后许多概念和术语的全面概述。虽然相关术语会在很高的层次上提及,但鼓励读者探索参考资料和其他资源以获取更多细节。另有一篇文章将深入探讨相关技术、算法和方法。
有鉴于此,让我们开始吧!
数据科学定义
数据科学是复杂的,涉及许多特定领域和技能,但一般定义是,数据科学包括从数据中提取信息和知识的所有方式。
数据无处不在,并且以巨大的、指数增长的数量存在。数据科学整体上反映了无论数据的大小如何,数据被发现、条件化、提取、汇编、处理、分析、解释、建模、可视化、报告和呈现的方式。大数据(如即将定义的)是数据科学的一个特殊应用。
数据科学是一个非常复杂的领域,这主要是由于它所涉及的学术学科和技术的多样性和数量。数据科学包括数学、统计学、计算机科学与编程、统计建模、数据库技术、信号处理、数据建模、人工智能与学习、自然语言处理、可视化、预测分析等。
数据科学在许多领域都具有高度的应用性,包括社交媒体、医学、安全、医疗保健、社会科学、生物科学、工程、国防、商业、经济学、金融、营销、地理定位等。
大数据定义
大数据本质上是数据科学的一个特殊应用,其中数据集庞大,需要克服后勤挑战以处理这些数据。主要关注点是有效地捕获、存储、提取、处理和分析这些庞大数据集中的信息。
由于物理和/或计算限制,这些巨大的数据集的处理和分析通常不可行或难以实现。因此,需要特殊的技术和工具(例如,软件、算法、并行编程等)。
大数据是用来涵盖这些大型数据集、专业技术和定制工具的术语。它通常应用于大型数据集,以进行一般数据分析、发现趋势或创建预测模型。
你可能会想,为什么“大数据”这个术语如此引人注目。我们已经长期在各种数据存储机制上收集了大量不同类型的数据,对吗?是的,但我们从未像今天这样享有如此廉价的数据收集、存储能力和计算能力。此外,我们以前也没有如此轻松地获取到廉价而强大的原始数据传感技术、仪器等,这些都导致了今天巨大的数据集的产生。
那么这些数据到底来自哪里呢?大量数据是从移动设备、遥感、地理位置、软件应用、多媒体设备、射频识别读卡器、无线传感网络等处收集的。
大数据的一个主要组成部分是所谓的三大 V(3Vs)模型。该模型将大数据的特征和挑战表示为处理体积、种类和速度。IBM 等公司还包括了第四个“V”,即真实性,而维基百科也提到了可变性。
大数据本质上旨在解决处理大量不同类型、不同质量的数据的问题,这些数据有时以巨大的(实时)速度被捕获和处理。可以说这是一个不小的挑战!
总结来说,大数据可以被视为一个相对术语,适用于需要实体(个人、公司等)利用专门的硬件、软件、处理技术、可视化和数据库技术来解决与3Vs及类似特征模型相关的问题的大型数据集。
数据类型和数据集
数据以许多不同的方式收集,如前所述。可用数据的生命周期通常包括捕获、预处理、存储、检索、后处理、分析、可视化等。
一旦捕获,数据通常被称为结构化、半结构化或非结构化。这些区分很重要,因为它们直接关系到所需的数据库技术和存储、查询和处理数据的软件和方法以及处理数据的复杂性。
结构化数据是指存储在关系数据库或电子表格中的数据(或由结构或模式定义的数据)。由于数据的“结构”是已知的,通常可以使用 SQL(结构化查询语言)轻松查询。例如,销售订单记录就是一个很好的例子。每个销售订单都有购买日期、购买的商品、购买者、总费用等。
非结构化数据是指没有任何模式、模型或结构定义的数据,也没有以特定方式组织的。换句话说,它只是原始数据。想象一下地震仪(顺便说一下,地震是我很担心的一个问题!)。你可能见过这种设备捕捉到的弯曲线条,这些线条本质上表示在每个地震仪位置记录的能量数据。记录的信号(即数据)表示随时间变化的能量量。在这种情况下没有结构,它只是由信号表示的能量变化。
自然地,半结构化数据是两者的结合。它基本上是附加了结构化数据(即元数据)的非结构化数据。每次你用智能手机拍照时,快门捕捉光反射信息作为一堆二进制数据(即 1 和 0)。这些数据没有结构,但相机还附加了额外的数据,包括照片拍摄的日期和时间、上次修改时间、图像大小等。这就是结构化部分。数据格式如 XML 和 JSON 也被视为半结构化数据。
数据挖掘、描述、建模和可视化
为了使数据以有意义的方式使用,它们首先被捕获、预处理和存储。在此过程之后,数据可以被挖掘、处理、描述、分析,并用于构建既具描述性又具预测性的模型。
描述性统计 是一个术语,用于描述应用统计学于数据集,以便描述和总结数据包含的信息。基本上,它包括在一个具有均值、中位数、众数、方差、标准差等的分布背景下描述数据。描述性统计 还描述了其他形式的分析和可视化。
推断统计 和数据建模则是非常强大的工具,可以用来深入理解数据,并推断(即预测)数据收集之外的条件的意义和结果。通过使用某些技术,可以创建模型,并根据涉及的数据动态做出决策。
除了描述性统计 和推断统计,另一个领域叫做计算统计(计算科学的一个子集),在数据科学和大数据应用中通常扮演重要角色。计算统计 涉及利用计算机科学、统计学和算法,使计算机能够实现统计方法。这些方法在预测分析或预测建模等领域中被大量使用。机器学习可以被视为在预测建模背景下应用某些算法的一个例子。
数据通常也会被挖掘以便进行可视化分析。通过战略性地使用合适的图形、图表、图示和表格,许多人能够更快、更深入、更自然地理解数据。这些信息展示方法可用于显示类别数据和定量数据。将这些展示类型应用于数据表示的过程称为数据可视化。
这些技术、方法论、统计学和可视化主题将在即将发布的帖子中得到更详细的讲解。
数据管理与行业工具
处理数据科学和大数据所需的软件和数据库技术有很多。许多数据库设计旨在遵循 ACID 原则,即原子性、一致性、隔离性和持久性。
我们首先讨论数据库技术。自 1980 年代以来,数据库管理系统(DBMS)及其关系型数据库(RDBMS)是最广泛使用的数据库系统。它们通常非常适合基于事务的操作,并且通常遵循 ACID 原则。
关系型系统的缺点是这些数据库相对静态,且严重偏向结构化数据,以非直观和非自然的方式表示数据,并且产生显著的处理开销,因此性能较差。另一个缺点是基于表的数据通常无法很好地表示实际数据(即领域/业务对象)。这被称为对象关系阻抗不匹配,因此需要在基于表的数据和实际问题领域对象之间进行映射。描述的数据库管理系统包括 Microsoft SQL Server、Oracle、MySql 等。
NoSql 数据库技术近年来变得非常流行,这也是有充分理由的。NoSql 是一个用于描述非关系型、具有高度可扩展性、允许动态模式并且能够处理大量数据访问的高频率的数据库系统的术语。它们还以更自然的方式表示数据,能够轻松处理之前提到的三种类型的数据,并且性能优越。
因此,NoSql 数据库主要用于高规模交易。NoSql 数据库系统包括 MongoDB、Redis、Cassandra 和 CouchDb 等。请注意,NoSql 数据库有多种类型,包括文档型、图形型、键值型和宽列型。
NewSQL 是一种相对较新的数据库管理系统。这些系统试图将关系型数据库管理系统的最佳特性(例如,ACID)和查询语言(即 SQL)与 NoSQL 数据库的高度可扩展性能结合起来。对于 NewSQL 是否能获得足够的流行度以便像关系型和 NoSQL 数据库一样获得采用和发展,尚无定论。
大数据的从业者已经见证了高规模数据存储、处理能力和分析所需的特定技术的创建和普及。最受欢迎的系统包括 Apache Hadoop、Cloudera、Hortonworks 和 MapR。还有许多其他系统也在这一领域进行竞争。
对于基于统计和算法的数据处理与可视化,R、python 和 Matlab 是一些受欢迎的选择。
总结
我们从未像今天这样收集如此多样的数据,也没有像现在一样需要如此快速地处理这些数据。通过多种不同的机制收集的数据的种类和数量正在以指数级增长。这种增长要求我们采用新的策略和技术来捕获、存储、处理、分析和可视化数据。
数据科学是一个总括性术语,涵盖了在有用数据生命周期阶段使用的所有技术和工具。另一方面,大数据通常指的是需要专门且常常创新的技术和方法来高效“使用”这些数据的极大数据集。
这两个领域都会随着时间的推移变得更加重要。对这两个领域合格从业者的需求正在迅速增长,它们也成为了最热门、最有利可图的工作领域之一。
希望这篇文章对数据科学和大数据涉及的主要概念提供了相对简单的解释。掌握这些知识后,你应该能更好地理解最新的行业头条新闻,或者至少在讨论这两个话题时不至于完全陌生。
亚历克斯·卡斯特罗尼斯是Why of AI的创始人兼首席执行官,并且是《AI for People and Business》的作者。他还担任了西北大学凯洛格商学院/麦考密克工程学院 MBAi 项目的兼职讲师。
原文。经许可转载。
相关:
-
人工智能、深度学习和神经网络的解释
-
机器学习:完整详细概述
-
数据科学难题的解释
更多相关话题
旅行时需要了解的大数据工程热潮中的事项
原文:
www.kdnuggets.com/2018/10/big-data-engineering-hype-train.html
评论
由Wojciech Pituła,高级软件开发工程师
为什么?
我们的三大课程推荐
1. 谷歌网络安全证书 - 快速进入网络安全职业生涯。
2. 谷歌数据分析专业证书 - 提升你的数据分析水平
3. 谷歌 IT 支持专业证书 - 支持你所在组织的 IT
半年前,我在从事了三年的各种数据管道创建工作后离开了大数据领域。现在,我希望在这些知识变得完全过时之前分享我在这段时间积累的知识。本文尝试指出一些如果你要成为我的同事你需要了解的事情。这些也是我在前公司面试大数据工程师职位时询问候选人的问题。
我会尽量不仅指出相关问题,还简要回答其中一些问题。重要的是要记住,这些答案距离全面理解还有很大距离,要真正理解这个主题,你需要自己研究。
如果你对这些问题中的某些问题不了解,不要害怕。对这些主题的完全理解是高级开发人员的要求。对于中级或初级职位,掌握子集即可。
分析 vs 科学 vs 工程
这是一个非常热门的问题:数据科学、数据分析和数据工程之间有什么区别。这也是一个相当难以回答的问题。以下是我的理解:
-
数据分析师 - 指查看数据并尝试基于数据回答一些业务问题的人。他通常使用商业智能工具或只是 MS Excel。
-
数据科学家 - 指处理原始数据,结合各种数据源,进行基本数据处理,将数据输入机器学习模型,调整这些模型,并总体上尽可能从原始数据中获取最大价值的人。他通常使用 Python、R、Matlab、tensorflow 等工具。
-
数据工程师 - 一种专注于数据转换的软件开发人员。他的工作是获取数据并使其对业务有用,同时也要确保其长期可维护。这一广泛的描述涵盖了从各种来源(ELK、Splunk、Hadoop、Kafka、Rest APIs、对象存储等)提取数据、转换数据并提供以满足业务需求。他通常与数据科学家密切合作,以了解数据管道应如何构建、使用哪个 ML 模型等等。
有关更详细的比较以及“机器学习工程师”的介绍,你可以查看 这篇精彩的文章。
以下段落描述了数据工程师所需的知识,但这也与数据科学家相关,因为他们使用类似的工具集,但方式不同。
编程语言
为了高效地开发数据管道,你需要熟练掌握以下至少一种语言:Scala、Java、Python。
选择真的取决于你之前的经验和你的工作场所偏好。如果你现在在考虑学习哪一个,我会推荐Scala。它是 Spark 开发的主要语言,具有最多的示例,并且最具表现力。由于它具有函数式和强类型的特性,它也是最安全的。
无论你选择哪种语言,你都需要对 JVM 有基本的了解,因为它是最流行的数据处理平台。你需要能够诊断和调试 JVM 上发生的问题。这里有几个需要了解的事项:
-
你会如何处理抛出的
OutOfMemoryException
? -
什么是垃圾收集器?有哪些垃圾收集器可用,它们之间有什么区别?
-
如何使用性能分析器找出性能瓶颈?
-
如何将调试器连接到远程 JVM?
Hadoop 生态系统
Apache Hadoop 是大数据工程师的最基本工具集。你不需要了解每个工具的所有细节,但了解它们的基本工作原理很重要,这样你才能有效沟通,并在需要时知道该学习什么。
-
什么是 Apache Hadoop? - 它是一组不同的工具,而不是一个单一的工具。这个生态系统中最流行的部分是 HDFS、Yarn、Hive、HBase 和 Oozie。
-
什么是 HDFS? - 它是一个分布式文件系统,用于在集群中存储数据。
-
什么是 namenode 和 datanode?
-
什么是复制因子?
-
什么是块大小?它如何影响性能和应用开发?
-
我们可以使用哪些安全机制来限制对集群上数据的访问?什么是 Kerberos?
-
-
什么是 Yarn? - 它是一个资源管理器,负责为计算作业分配内存和核心。
-
什么是调度程序,默认情况下有哪些调度程序?
-
什么是队列?
-
-
什么是 Hive? - 它是 HDFS 上的一层 SQL。
-
Hive、hiveserver2、metastore 和 beeline 之间有什么联系?
-
Hive、Pig 和 Impala 之间有什么区别?
-
什么是 UDFs?
-
-
什么是 HBase? - 它是一个构建在 HDFS 之上的 NoSQL 数据库。
-
它与 Cassandra 的比较如何?
-
它如何适应 CAP 定理?
-
-
什么是 Oozie? - 它是一个工作流管理器,用于创建数据管道。
- 有哪些替代方案?
-
你知道哪些序列化格式? - 最流行的有 Avro、orc、parquet、json 以及 Hadoop 对象和文本文件。
- 什么是基于列的格式?它与基于行的格式有何不同?
Apache Spark
Apache Spark 已成为处理数据时的首选工具。拥有一些经验是好的,但并不是关键。对我来说,这只是另一个暴露了一些 API 的工具,你需要学习它。一个有经验的开发者已经学会了数百个 API,不应对学习另一个 API 感到困扰。不过,即便没有实际经验,有一些事情值得了解。
-
什么是操作和转换?
-
有哪些部署模式?
-
跨越 JVM 边界时如何处理序列化和反序列化?RDD、Dataframe 和 Dataset API 之间有何不同?
-
什么是洗牌?它们什么时候发生,以及它们如何影响性能?
-
你如何进行有状态处理?无论是批处理还是流处理。
-
什么是 Spark 的替代方案? - 这是可能最重要的问题。你应该对 MapReduce、Flink、Kafka Streams、Cascading/Scalding 以及不集群的数据处理工具如 bash 或一些简单的库(例如 fs2 或 Akka Streams)有基本了解。
非 Hadoop 工具
有时,了解那些与大数据没有直接关联的工具更为重要。数据工程师的一个关键技能是知道何时不使用大数据,而选择更简单的工具。
-
什么是 Apache Kafka?
-
Kafka 已成为首选的数据流解决方案。迟早你会接触到它。
-
什么是主题?
-
什么是偏移量?
-
-
什么是 Redis?
- 至少要了解一种内存数据库。创建最终数据集后,你需要知道如何使用它,并且在许多情况下,你需要快速服务它。
-
什么是 ELK 堆栈?
- 总迟早你会需要某种搜索引擎或仪表盘解决方案。Elasticsearch 和 Kibana 是一个很好的开始。
-
你有多少 bash 经验?
-
在许多情况下,你需要一个可以以最灵活、最省时的方式处理数据集的工具。你应该熟练使用如 grep、cat、jq 或 awk 等工具,这些工具可以让你在没有任何开销的情况下过滤、修改和聚合数据。它们不适合生产环境,但非常适合实验和快速寻找答案。
-
创建 bash 脚本时你知道哪些最佳实践?
-
这些专业领域可以通过掌握其他脚本技术如 python、ruby 或 ammonite 来提升。
-
-
什么是概率数据结构?
- 当数据量超过某些阈值时,使用精确计算变得不再可行。在这种情况下,你应该了解一些基本的概率数据结构,例如布隆过滤器或 HyperLogLog,这些结构可以以受控的误差率计算诸如基数或集合成员资格等内容。
-
你知道哪些 SQL 数据库?它们有哪些限制?
- 熟悉至少一个成熟的 SQL 数据库是有好处的。我敢打赌,至少 30%的大数据项目可以仅使用 Postgres,并抛弃所有的 Spark/Hadoop 代码。
摘要
这个列表并不全面,但可能不可能创建一个全面的列表。你潜在雇主的具体要求可能与此列表有很大不同,但能够回答这些问题将为你未来的发展奠定良好的基础。
如果有人希望通过回答这些问题或添加更多主题(内联或通过链接)来完善本文,请随时通过GitHub repo提交 PR。
简介: Wojciech Pituła 是索尼的高级软件开发工程师。
原文。已获授权转载。
相关:
-
构建数据科学团队的成功计划
-
你应该了解的 10 大大数据趋势
-
机器学习会超越大数据吗?
更多相关话题
大数据游戏板™
评论
我最初在 2013 年 1 月发布了大数据故事图,以创造性地传达成功的大数据项目的关键因素(见图 1)。
图 1: 大数据故事图
我们的前三名课程推荐
1. Google 网络安全证书 - 快速进入网络安全职业生涯。
2. Google 数据分析专业证书 - 提升您的数据分析水平
3. Google IT 支持专业证书 - 支持您的组织的 IT
今天我唯一会做的重大改变就是将河流(它代表了大数据的深度、多样性和高速度)改为数据湖。
大数据故事图突出了 6 个对大数据项目成功至关重要的“里程碑”(看看您能否在图 1 中找到它们):
-
里程碑 #1: 激烈的市场动态。市场动态因大数据而变化。数据像水一样强大。海量的结构化和非结构化数据、广泛的内部和外部数据、以及高速数据可以推动组织变革和业务创新。确保您的#BigData 之旅不会陷入经济价值存疑的数据沼泽。
-
里程碑 #2: 业务与 IT 挑战。大数据促进了业务转型,从利用部分数据的“后视镜”视角监控业务表现,转变为利用所有可用数据的实时预测型企业,以优化业务表现。然而,组织在利用大数据来转型其业务时面临重大挑战。
-
里程碑 #3: 大数据业务转型。组织在利用大数据分析来推动价值创造过程方面的愿景是什么?一些组织难以理解大数据的业务潜力。他们不清楚业务成熟的不同阶段。我们的“大数据成熟度”模型对组织的大数据业务愿景进行基准评估,并提供了一种识别所需数据货币化机会的复杂程度的方法。
-
地标 #4: 大数据之旅。大数据之旅需要业务和 IT 利益相关者之间的合作,以识别正确的业务机会和必要的大数据架构。大数据之旅需要 1) 专注于为组织的关键业务举措提供支持,同时 2) 确保大数据业务机会能够由 IT 实施。
-
地标 #5: 运营大数据。成功的组织定义了一个持续发现和发布有关业务的新见解的过程。组织需要一个明确的过程,将分析见解提取并整合回到运营系统中。该过程应清晰地定义业务用户、BI/DW 团队和数据科学家之间的角色和责任,以使大数据能够投入运营。
-
地标 #6: 价值创造城市。大数据有潜力转变或重新构建你的价值创造过程,从而创造竞争差异。组织需要一个将其愿景与组织的关键业务举措联系起来的大数据战略。设想研讨会和分析实验室可以识别出大数据如何为组织的价值创造过程提供动力。
更多大数据故事图地标的详细信息,请参见博客“大数据故事图”。
介绍大数据游戏板™
虽然大数据故事图最近获得了很多关注,但它已经显得陈旧乏味,需要更新。因此,在我的朋友弗雷德里克·拉尔达罗(Twitter 账号 @FLardaro)的推动下,我创建了“大数据游戏板™”!所以,让“垄断”,“风险”,和“蜗牛赛跑”让开吧!是时候向全球的年轻人教授一个重要的职业发展游戏:如何利用数据和分析来改变你的生活!
介绍一下“大数据游戏板™”!
图 2: 大数据游戏板™
旋转转盘,看看你能否避免以下大数据(以及数据科学和 AI)陷阱:
陷阱 #1: 你是“陷入分析鸿沟”还是成功地“利用数据的经济价值”?
许多公司陷入了“分析鸿沟”。他们不理解如何利用“大数据经济学”从描述性的回顾报告和仪表板过渡到预测性分析见解和处方性行动。这一鸿沟阻碍了组织充分利用数据和分析的潜力,以推动组织的商业模式(见图 3)。
图 3: 跨越分析鸿沟
更多详情请参见“跨越大数据/数据科学分析鸿沟”博客。
陷阱 #2: 你是“陷入数据沼泽”还是在创建一个“协作价值创造平台”?
摆脱数据湖 2.0,其中数据被随机存储以待确定用途,而是开发数据湖 3.0,使其成为组织关键数字资产——数据和分析的终极存储库。数据湖 3.0 成为组织的协作价值创造平台,促进业务相关者与数据科学团队之间的合作,利用数据和分析发现新的客户、产品、服务、渠道和运营价值(见图 4)。
图 4: 数据湖 3.0: 协作价值创造平台
查看博客 “数据货币化?看看首席数据货币化官” 了解有关数据湖 3.0——协作价值创造平台的更多细节。
陷阱 #3: 你是在追求“技术追逐尾巴”,还是“专注于业务结果”?
组织在大数据方面失败,并不是因为缺乏用例,而是因为用例过多。组织需要一个正式的、协作的过程来识别、验证、审查、评估和优先排序用例,并确保信息技术与业务在追求这些用例时保持一致,找到高业务价值与高实施可行性的最佳组合(想想“低垂的果实”)。在启动大数据和数据科学计划时,前期投入时间详细了解构成用例的财务、客户和运营驱动因素,并标记任何潜在的抑制因素和实施风险。以睁大眼睛的状态进入这场游戏(见图 5)!
图 5: 文档使用案例的财务、客户和运营驱动因素
查看博客 “用例识别、验证和优先级排序” 获取指导组织的业务和运营用例识别、验证、评估和优先级排序的流程。
陷阱 #4: 你是在“沉浸于夸大承诺”中漂浮,还是采取“务实的价值工程”方法?
过度炒作的技术创新提供了最终的“梦想田野”时刻,让非科学家在进行科学实验。虽然组织对新技术的熟悉有其价值,但技术概念验证不应强加给业务相关者,并带有过度夸大的宏伟期望。商业用户早已停止相信技术的“银弹”解决方案——即一个看似神奇的简单解决方案来解决复杂问题(见图 6)。
图 6: 过度炒作的技术创新的经济成本
更多细节请参阅博客“为什么接受炒作?是时候转变我们对新兴技术的处理方式了”。
陷阱 #5: 你是否在“CLM 平原:职业限制性举措”中失败了,还是成功攀登了“构建业务支持的愿景”这座山?
成功的大数据之旅的一个关键挑战是获得业务和 IT 利益相关者之间的共识和一致,以识别初步的大数据业务用例,这些用例 1) 能够为业务带来足够的价值,同时 2) 具有较高的成功概率。 可以找到多个业务用例,其中大数据和先进分析能够提供有说服力的业务价值;对大数据和数据科学的采用至关重要的是,业务利益相关者有机会表达他们的意见,并主动帮助制定大数据和数据科学议程。
我们找到了一种工具,用于推动业务和 IT 的协作与一致,以确定你的大数据和数据科学之旅中“正确”的初步用例——优先级矩阵(见图 X)。
图 7: 优先级矩阵
请参阅博客“优先级矩阵:在大数据旅程中对齐业务和 IT”了解如何使用优先级矩阵推动组织对齐的机制。
所以现在我就坐下来等待 Hasbro 和 Ravensburger 来敲我的门,向我提供无尽的财富来大规模生产和推广我的“Big Data Game Board™”。 实际上,我可能会满足于几张 Chipotle、True Food 和 Starbucks 的礼品卡……
相关内容:
-
使用混淆矩阵量化错误成本
-
构建数据科学团队的成功游戏计划
-
伟大的数据科学家不仅仅是跳出思维框框,他们还重新定义了框框
更多相关主题
大数据科学:期望与现实
原文:
www.kdnuggets.com/2016/10/big-data-science-expectation-reality.html
comments
由 Stepan Pushkarev, Hydrosphere.io 的 CTO 提供。
过去几年对于从事分析和大数据工作的人来说就像梦想成真一样。平台工程师有了学习 Hadoop、Scala 和 Spark 的新职业道路。Java 和 Python 程序员有机会进入大数据领域。在那里,他们发现了更高的薪资、新的挑战,并能够扩展到分布式系统。但最近,我开始听到一些工程师对在那里工作感到失望和希望破灭的抱怨。
我们的前三名课程推荐
1. 谷歌网络安全证书 - 快速进入网络安全职业生涯
2. 谷歌数据分析专业证书 - 提升你的数据分析能力
3. 谷歌 IT 支持专业证书 - 支持组织的 IT 需求
他们的期望并不总是实现。大数据工程师将大部分时间花在 ETL 上,为分析师准备数据集,并将数据科学家开发的模型编码成脚本。因此,他们在数据科学家和大数据之间成为了齿轮。
我从数据科学家那里听到相同的反馈。真正的大数据项目与 Kaggle 竞赛不同。即便是小任务也需要 Python 和 Scala 技能,还需与大数据工程师和运维团队多次互动和设计会议。
DevOps 工程师仅能使用基本工具并完成教程。他们对仅仅通过 Cloudera 向导和半自动化的 Ansible 脚本部署下一个 Hadoop 集群感到厌倦。
在这种环境下,大数据工程师永远无法从事可扩展性和存储优化的工作。数据科学家也不会发明新的算法。DevOps 工程师也不会将整个平台置于自动化状态。团队的风险在于,他们的想法可能无法超越概念验证。
我们如何改变这种情况?有 3 个关键点:
-
工具演变——Apache Spark/Hadoop 生态系统很棒。但它不够稳定和用户友好,不能让人完全忽视。工程师和数据科学家应贡献于现有的开源项目,并创建新工具来填补日常操作中的空白。
-
教育和跨领域技能——当数据科学家编写代码时,他们不仅需要考虑抽象问题,还需要考虑实际可行性和合理性。例如,他们需要思考查询运行的时间以及提取的数据是否适合他们使用的存储机制。
-
改进流程——DevOps 可能是解决方案。在这里,DevOps 不仅仅意味着编写 Ansible 脚本和安装 Jenkins。我们需要 DevOps 以最佳方式运作,以减少交接并发明新工具,为每个人提供自助服务,使他们尽可能高效。
数据科学家、大数据工程师和业务用户的持续分析环境
通过持续分析和自助服务,数据科学家可以从最初的构想到生产全过程中掌控数据项目。他们越是自主,就能投入更多时间来产生实际的见解。
数据科学家从最初的业务想法开始,经过数据探索和数据准备,然后进入模型开发。接下来是部署和验证环境,最后推动到生产阶段。拥有合适的工具后,他或她可以在一天内多次完成这个完整的迭代,而无需依赖大数据工程师。
大数据工程师则负责可扩展性和存储优化,开发并贡献于像 Spark 这样的工具,支持流处理架构等。他提供给数据科学家一个 API 和 DSL。
产品工程师应当获得数据科学家开发的整洁打包的分析模型。然后,他们可以为业务用户构建智能应用程序,使他们能够以自助服务的方式使用这些模型。
这样工作,没有人会因为等待下一个人而被困住。每个人都在使用自己的抽象进行工作。
这听起来可能像是一个乌托邦。但我相信这可以激励大数据团队改善他们现有的大数据平台和流程,额外的好处是让每个人都感到满意。
简介: Stepan Pushkarev 是 的首席技术官。Stepan 共同创办并领导了电子商务、物联网和广告技术公司的工程团队。负责从数学模型、基础设施与运营到网络和移动应用程序的完整产品栈,同时负责招聘、建立工程文化和交付流程,他结合了强大的技术、管理和企业家背景。
相关内容:
-
连接数据系统和 DevOps
-
成功的数据科学团队的三个基本组成部分
-
健康综合:大数据 DevOps 工程师
更多相关内容
学习数据科学的三大错误
原文:
www.kdnuggets.com/2019/05/biggest-mistakes-learning-data-science.html
评论
图片来源 Héizel Vázquez
你好!又是我。我在其他文章中讨论过一些我将在这里提到的内容,但现在我想给出一些关于什么不是数据科学以及如何不学习数据科学的方向。
我们的前三大课程推荐
1. Google 网络安全证书 - 快速进入网络安全职业道路。
2. Google 数据分析专业证书 - 提升你的数据分析能力
3. Google IT 支持专业证书 - 支持你的组织的 IT
所以让我们从基础开始。
什么是数据科学?
由 memes_and_science 更新
数据科学不仅仅是掌握一些编程语言、数学、统计学和“领域知识”。
时代已经来临。我们创造了一个新领域,或者说是类似的东西。在这个领域有很多东西需要讲解和研究。名称无所谓,也许数据科学只是一个暂时的名称,但对数据的科学研究,从中获取洞察,然后能够预测某些事情是世界的现在和未来。
我将重点讨论与商业相关的数据科学定义和建议,这些建议可能适用于整个领域,但本文的观点主要是针对商业的数据科学。
我将提出三点建议:
-
数据科学是一门科学
-
学习数据科学有一些糟糕的方法
-
使用制作良好的备忘单可以帮助你系统地进行数据科学
数据科学是一门科学
我知道这可能对一些人来说是有争议的,但请坚持听我说。我想表达的是,数据科学当然与商业相关,但它终究是一门科学,或者说是在成为一门科学的过程中。
我曾经定义数据科学 如前所述:
[…] 通过 数学、编程 和 科学方法 来解决商业/组织问题,其中包括创建 假设、实验 和 测试 ,通过 数据分析 和 生成预测模型 来完成。它负责将这些 问题转化为明确的问题 ,并以 创造性 的方式回应初步假设。还必须包括 有效沟通 所获得的结果以及解决方案如何为商业/组织 创造价值。
我在这里陈述了数据科学作为一种科学的描述和定义。我认为将数据科学描述为科学非常有用,因为如果是这样的话,这一领域的每个项目至少应具备以下特点:
-
可重复:为了便于测试他人的工作和分析,这是必要的。
-
易出错:数据科学和科学并不追求真理,而是追求知识,因此每个项目都可以在未来被替代或改进,没有解决方案是终极的解决方案。
-
协作:数据科学家并非独立存在,他们需要一个团队,这个团队会使开发智能解决方案成为可能。协作是科学的重要组成部分,数据科学也应如此。
-
创造性:数据科学家所做的大多数工作都是新的研究、新的方法或对不同解决方案的尝试,因此他们的工作环境应当非常有创意且易于操作。创造力在科学中至关重要,这是我们找到复杂问题解决方案的唯一途径。
-
符合规定:目前科学领域有很多规定,虽然数据科学方面的规定不多,但未来会有更多。重要的是我们正在建设的项目要意识到这些不同类型的规定,以便我们能够为问题创造一个干净且可接受的解决方案。
如果我们不遵循这些基本原则,将很难进行正确的数据科学实践。数据科学应以能够使决策制定遵循系统化流程的方式实施。稍后会详细讲解。
如何避免错误学习数据科学。三大禁忌。
memes_and_science
如果你在这里,可能意味着你正在学习数据科学,或者你参加了一些 MOOCs 或相关课程。我不会在这里谈论平台或课程的好坏,我认为即使在最糟糕的课程中我们也能学到一些东西。
1. 只看而不实践
如果你正在上与数据科学相关的课程,如数学、统计学、编程或类似课程,而你只是听课。
如果你这样做,你是在浪费时间。数据科学需要实践。无论你学到什么,即使教授没有告诉你,也要实践并尝试。这对真正理解事物至关重要,当你在实际工作中时,你会做很多不同的实际操作。
对统计学、数学和 Python 的良好知识不会使你成为一个成功的数据科学家。你需要更多,你需要精通你的技能。能够使用这些工具解决业务问题。因此,如果你在学习新的东西,并且想真正理解它,找到一个你可以应用它或玩弄它的场景。
2. 以疯狂的方式创建模型
我们从“外部世界”获取数据,我们的身体和大脑分析我们得到的原始数据,然后我们“解释”这些信息。
towardsdatascience.com/going-beyond-with-agile-data-science-fcff5aaa9f0c
什么是“解释”?这就是我们从获得的信息中学到的如何反应、思考、感受和理解。当我们理解时,我们是在解码形成这个复杂事物的部分,并将我们一开始获得的原始数据转化为有用且简单的东西。
我们通过建模来做到这一点。这是理解“现实”的过程,即我们周围的世界,但创建一个更高级的原型,这个原型描述了我们所见、所听、所感的事物,但它是一个代表性的东西,而不是“实际的”或“真实的”东西。
所以在做之前请考虑:
model_i_created_i_5_seconds.fit(X,y)
建模在机器学习和数据科学领域非常重要,但它们必须有一个目的。你需要在使用之前理解它们。现在要了解它们在训练数据之前的假设,理解它们用于学习的不同指标,如何评估它们等等。
对此我可以告诉你,阅读像 Scikit-Learn 这样的库的文档是没有害处的:
关于科学数据处理的统计学习教程 - scikit-learn 0.20.3…
*机器学习是一种越来越重要的技术,因为实验科学所面临的数据集的规模……*scikit-learn.org
Apache Spark:
*由于运行时专有二进制文件的许可问题,我们默认不包括 netlib-java 的本地代理……*spark.apache.org
Tensorflow:
TensorFlow 指南 | TensorFlow 核心 | TensorFlow
*会话是 TensorFlow 的机制,用于在一个或多个本地或远程设备上运行数据流图。如果……*www.tensorflow.org
还有更多。它们将引导你到文章、论文和更多博客帖子,且大多数都包含如何在机器学习和统计学习中进行建模的实际示例。
此外,还有一些很棒的视频可以将你从零基础带到高手,比如我朋友Brandon Rohrer的作品:
3. “是的,我是个孤狼。我可以自己学习和做一切”
记住我之前提出的一个特点是,数据科学是一个合作性领域。那么,学习它也应该如此!
我不是说你需要和你的好朋友一起开始一个课程,而是利用今天在线平台所提供的资源。我们有论坛、聊天、讨论板等等,你可以在那里遇到学习相同内容的人。和更多人一起学习会更容易,不要害怕提问。
提出你需要理解的尽可能多的问题,直到你明白为止。也不要骚扰他人,但如果你礼貌地提问,大多数人都会很乐意帮助你。
这里有很棒的资源(除了 MOOCs 和课程内部提供的资源)可以找到学习相同内容的人:
Stack Overflow - 开发者学习、分享与职业发展的平台
Stack Overflow 是开发者学习、分享其编程经验的最大、最受信任的在线社区…… stackoverflow.com
Quora 是一个获取和分享知识的地方。它是一个提问和与人连接的平台…… www.quora.com
一个活跃的社区共同推动 AI 领域的增长和创新。 community.deepcognition.ai
r/datascience:一个供数据科学从业者和专业人士讨论和辩论数据科学职业的地方…… www.reddit.com
系统化的数据科学与备忘单
medium.com/personal-growth/all-strength-comes-from-repetition-1a95157e2c7c
备忘单通过提供有关语言、概念或库的不同片段的知识来节省时间。有些备忘单还包含指向文档和 R、Python、Scala 等重要包的包级备忘单的超链接。
去年年底,我创建了一个关于可以用于数据科学的各种备忘单的病毒式传播的仓库。
数据科学备忘单列表 - FavioVazquez/ds-cheatsheets github.com
在这个仓库中,你会找到关于以下主题的备忘单:
在那里你会找到每个备忘单的 PDF 和 PNG 版本。随意下载该存储库的 zip 文件以获取所有信息,如果你发现或创建了一个新的有用备忘单,请提交拉取请求。
感谢阅读,希望这些内容能帮助你找到在数据世界中成为成功专业人士的路径。更多内容敬请期待 😃
简介: Favio Vazquez 是一位物理学家和计算机工程师,专注于数据科学和计算宇宙学。他对科学、哲学、编程和音乐充满热情。他是 Ciencia y Datos 的创始人,这是一份西班牙语的数据科学出版物。他热爱新挑战,喜欢与优秀团队合作,解决有趣的问题。他参与了 Apache Spark 的协作,帮助 MLlib、Core 和文档方面的工作。他喜欢运用自己的知识和专业技能在科学、数据分析、可视化和自动学习方面,帮助世界变得更美好。
原文。已获授权转载。
相关内容:
-
学习数据科学硕士是否值得?
-
数据科学中最受欢迎的技能
-
如何辨别好数据科学职位与差数据科学职位
更多相关内容
机器学习的苦涩教训
原文:
www.kdnuggets.com/2020/07/bitter-lesson-machine-learning.html
评论
由理查德·萨顿,DeepMind 和阿尔伯塔大学。
我们的前三课程推荐
1. 谷歌网络安全证书 - 快速进入网络安全职业
2. 谷歌数据分析专业证书 - 提升你的数据分析技能
3. 谷歌 IT 支持专业证书 - 支持你所在组织的 IT
从 70 年的人工智能研究中可以得出的最大教训是,利用计算的一般方法最终是最有效的,并且差距很大。最终原因是摩尔定律,或者更准确地说,是其对计算单位成本持续指数下降的普遍化。大多数人工智能研究都假设代理可用的计算是恒定的(在这种情况下,利用人类知识将是提高性能的唯一途径之一),但在比典型研究项目稍长的时间内,大量更多的计算不可避免地变得可用。为了在短期内寻求有意义的改进,研究人员试图利用他们对领域的知识,但从长远来看,唯一重要的事情是利用计算。这两者并不一定相互矛盾,但在实践中往往会。投入到一种方法上的时间就是没有投入到另一种方法上的时间。对一种方法的心理投入往往会影响另一种方法。而人类知识的方法往往使方法复杂化,从而使其不太适合利用计算的通用方法。许多人工智能研究人员在之后才认识到这一苦涩的教训,回顾一些最突出的例子是很有启发性的。
从 70 年的人工智能研究中可以得出的最大教训是,利用计算的一般方法最终是最有效的,并且差距很大。
在计算机国际象棋中,1997 年击败世界冠军卡斯帕罗夫的方法是基于大规模、深度搜索的。当时,大多数计算机国际象棋研究人员对这种方法感到失望,他们曾追求那些利用人类对国际象棋特殊结构理解的方法。当一种更简单、基于搜索的方法配合特殊硬件和软件证明了更有效时,这些依赖人类知识的国际象棋研究人员并不善于接受失败。他们说,“蛮力”搜索可能这次获胜,但这不是一种通用策略,而且反正这也不是人们下棋的方式。这些研究人员希望基于人类输入的方法获胜,当他们未能实现这一点时感到失望。
计算机围棋中的研究进展模式与此类似,只是延迟了 20 年。最初的大量努力旨在通过利用人类知识或游戏的特殊特性来避免搜索,但一旦有效地大规模应用搜索,这些努力都证明了无关紧要,甚至更糟。自我对弈学习以学习价值函数也非常重要(正如在许多其他游戏中一样,甚至在国际象棋中也是如此,尽管在 1997 年首次击败世界冠军的程序中,学习并没有发挥重要作用)。自我对弈学习和学习一般来说与搜索类似,因为它能使大量计算得以运用。搜索和学习是人工智能研究中利用大量计算的两个最重要的技术类别。在计算机围棋中,与计算机国际象棋类似,研究人员最初的努力是集中在利用人类理解(以减少搜索需求),而只有在很晚的时候,通过采用搜索和学习才取得了更大的成功。
在语音识别领域,1970 年代有过一次由 DARPA 赞助的早期竞赛。参赛者包括大量利用人类知识的特殊方法——词汇知识、音素知识、人体发音道知识等。另一方面是基于隐藏马尔可夫模型(HMMs)的统计性方法,这些方法计算量大得多。统计方法再次战胜了基于人类知识的方法。这导致了自然语言处理领域的重大变化,逐渐经历了数十年,统计和计算成为主导。最近语音识别领域深度学习的崛起是这一一致方向的最新一步。深度学习方法甚至更少依赖于人类知识,使用更多的计算和在巨大训练集上进行学习,以产生更出色的语音识别系统。正如在游戏中一样,研究人员总是试图使系统按照他们认为自己思维运作的方式工作——他们试图将这种知识放入他们的系统中——但最终证明这是适得其反的,并且是对研究人员时间的巨大浪费,当摩尔定律下,大规模计算成为可能,并找到了有效利用它的方法时。
在计算机视觉领域,也出现了类似的模式。早期的方法将视觉视为寻找边缘、或通用的圆柱体,或以 SIFT 特征来进行处理。但今天,所有这些都被抛弃了。现代的深度学习神经网络仅使用卷积和某些类型的不变性,表现得更好。
这是一个重要的教训。作为一个领域,我们仍未彻底领会这一点,因为我们继续犯同样的错误。为了看清这一点并有效抵制它,我们必须理解这些错误的吸引力。我们必须吸取苦涩的教训,即在我们认为自己思考的方式中构建知识在长期内是行不通的。这个苦涩的教训基于以下历史观察:1)人工智能研究人员常常试图将知识构建到他们的代理中,2)这在短期内总是有帮助,并且对研究人员来说是个人上令人满意的,但 3)从长远来看,这会停滞不前,甚至抑制进一步的进展,4)突破性的进展最终通过一种基于计算规模化的搜索和学习的对立方法到来。最终的成功带有苦涩,常常因为是对一种偏爱的、人本中心方法的胜利而未被完全消化。
从这个苦涩的教训中应该学到的一点是,通用方法的巨大力量,那些即使在计算量非常大的情况下也能持续扩展的方法。似乎能够以这种方式无限扩展的两种方法是搜索和学习。
从这个痛苦的教训中学习到的第二个一般性观点是,心智的实际内容极其复杂、无法挽回;我们应停止寻找关于心智内容的简单思维方式,如关于空间、物体、多个代理或对称性的简单思维方式。所有这些都是任意的、内在复杂的外部世界的一部分。它们不应该被内建,因为它们的复杂性是无穷的;相反,我们应该只内建能够发现和捕捉这种任意复杂性的元方法。这些方法的关键是它们能找到好的近似值,但寻找这些近似值的过程应该由我们的方法完成,而不是由我们自己完成。我们希望 AI 代理能够像我们一样发现,而不是包含我们已经发现的内容。内建我们的发现只会让我们更难看到发现过程是如何进行的。
原文。经许可转载。
简介:理查德·S·萨顿是DeepMind的杰出研究科学家,并且是加拿大阿尔伯塔大学计算机科学的教授。萨顿被广泛认为是现代强化学习的奠基人之一,对该领域做出了若干重要贡献,包括时序差分学习和策略梯度方法。
相关:
更多相关主题
区块链在 7 个 Python 函数中的解释
原文:
www.kdnuggets.com/2018/04/blockchain-explained-7-python-functions.html
评论
由Tom Cusack,银行业数据科学家
我认为对于很多人来说,区块链是一种很难理解的现象。我开始观看视频和阅读文章,但对我来说,直到我编写了自己简单的区块链,我才真正理解它是什么及其潜在的应用。
我对区块链的理解是,它是一个公开的加密数据库。如果你是亚马逊,想用这项技术来跟踪你的库存水平,那么使用区块链有意义吗?可能没有,因为你的客户不会想花费资源来验证你的区块链,因为他们在网站上已经标明“仅剩 1 件”。
我将留给你们思考未来的应用。那么,事不宜迟,让我们设置我们的 7 个函数吧!
def hash_function(k):
*"""Hashes our transaction."""* if type(k) is not str:
k = json.dumps(k, sort_keys=True)
return hashlib.sha256(k).hexdigest()
区块链的核心是哈希函数。如果没有加密,区块链将很容易被操控,交易也可能被欺诈性地插入。
def update_state(transaction, state):
state = state.copy()
for key in transaction:
if key in state.keys():
state[key] += transaction[key]
else:
state[key] = transaction[key]
return state
‘状态’是记录谁拥有什么的。例如,我有 10 个硬币,我给 Medium 1 个,那么状态将是下面字典的值。
{‘transaction’: {‘Tom’: 9, ‘Medium’: 1}}
重要的是要注意,透支是不允许的。如果存在的硬币只有 10 个,那么我不能给某人 11 个硬币。下面的函数验证了我们尝试进行的交易是否确实有效。此外,交易必须平衡。我不能给出 5 个硬币而让接收者收到 4 个硬币,因为这会导致硬币的销毁和创建。
def valid_transaction(transaction, state):
*"""A valid transaction must sum to 0."""* if sum(transaction.values()) is not 0:
return False
for key in transaction.keys():
if key in state.keys():
account_balance = state[key]
else:
account_balance = 0
if account_balance + transaction[key] < 0:
return False
return True
现在,我们可以创建我们的区块。从之前的区块中读取信息,并用来将其链接到新区块。这一点也是区块链概念的核心。看似有效的交易可能会被尝试以欺诈方式插入区块链,但解密所有之前的区块在计算上(几乎)是不可能的,这保持了区块链的完整性。
def make_block(transactions, chain):
*"""Make a block to go into the chain."""* parent_hash = chain[-1]['hash']
block_number = chain[-1]['contents']['block_number'] + 1
block_contents = {
'block_number': block_number,
'parent_hash': parent_hash,
'transaction_count': block_number + 1,
'transaction': transactions
}
return {'hash': hash_function(block_contents), 'contents': block_contents}
以下是一个小助手函数,用于检查前一个区块的哈希值:
def check_block_hash(block):
expected_hash = hash_function(block['contents'])
if block['hash'] is not expected_hash:
raise
return
一旦我们把所有东西都组合在一起,就该创建我们的区块了。我们现在将更新区块链。
def check_block_validity(block, parent, state):
parent_number = parent['contents']['block_number']
parent_hash = parent['hash']
block_number = block['contents']['block_number']
for transaction in block['contents']['transaction']:
if valid_transaction(transaction, state):
state = update_state(transaction, state)
else:
raise
check_block_hash(block) # Check hash integrity
if block_number is not parent_number + 1:
raise
if block['contents']['parent_hash'] is not parent_hash:
raise
return state
在我们完成之前,链必须经过验证:
def check_chain(chain):
*"""Check the chain is valid."""* if type(chain) is str:
try:
chain = json.loads(chain)
assert (type(chain) == list)
except ValueError:
# String passed in was not valid JSON
return False
elif type(chain) is not list:
return False
state = {}
for transaction in chain[0]['contents']['transaction']:
state = update_state(transaction, state)
check_block_hash(chain[0])
parent = chain[0]
for block in chain[1:]:
state = check_block_validity(block, parent, state)
parent = block
return state
最后,需要一个交易函数,将以上所有内容连接在一起:
def add_transaction_to_chain(transaction, state, chain):
if valid_transaction(transaction, state):
state = update_state(transaction, state)
else:
raise Exception('Invalid transaction.')
my_block = make_block(state, chain)
chain.append(my_block)
for transaction in chain:
check_chain(transaction)
return state, chain
所以,现在我们有了我们的 7 个函数。我们怎么与之互动呢?首先,我们需要用一个创世区块来启动我们的链。这是我们新硬币(或库存等)的起点。为了本文的目的,我将说我,Tom,将以 10 个硬币开始。
genesis_block = {
'hash': hash_function({
'block_number': 0,
'parent_hash': None,
'transaction_count': 1,
'transaction': [{'Tom': 10}]
}),
'contents': {
'block_number': 0,
'parent_hash': None,
'transaction_count': 1,
'transaction': [{'Tom': 10}]
},
}
block_chain = [genesis_block]
chain_state = {'Tom': 10}
现在,看看当我给 Medium 一些硬币时会发生什么:
chain_state, block_chain = add_transaction_to_chain(transaction={'Tom': -1, 'Medium': 1}, state=chain_state, chain=block_chain)
状态会更新,以显示谁拥有什么:
{'Medium': 1, 'Tom': 9}
区块链是这样的:
[{'contents': {'block_number': 0,
'parent_hash': None,
'transaction': [{'Tom': 10}],
'transaction_count': 1},
'hash': '064d0b480b3b92761f31831d30ae9f01954efaa62371b4b44f11465ec22abe93'},
{'contents': {'block_number': 1,
'parent_hash': '064d0b480b3b92761f31831d30ae9f01954efaa62371b4b44f11465ec22abe93',
'transaction': {'Medium': 1, 'Tom': 9},
'transaction_count': 2},
'hash': 'b4ae25f0cc0ee0b0caa66b9a3473e9a108652d53b1dc22a40962fef5c8c0f08c'}]
我们的第一个新交易已经创建并插入到堆栈顶部。现在,我希望我已经引起了你的好奇心,并且你有兴趣复制代码并进行尝试。在我看来,这就是学习新技术的最佳方式——深入其中。
玩玩代码,制作你自己的币。如果你尝试给出超过存在的币会发生什么?如果你不断创建新的支付者,状态会发生什么?
你能想到区块链的未来应用吗?请随时在评论中问我任何问题,我会尽力帮助你。
简介:汤姆·库萨克 是银行业的数据科学家。
原文。经许可转载。
相关:
-
区块链和 API
-
人工智能与区块链的融合:这是怎么回事?
-
Swiftapply – 自动高效的 pandas 应用操作
我们的前三个课程推荐
1. 谷歌网络安全证书 - 快速进入网络安全职业生涯。
2. 谷歌数据分析专业证书 - 提升你的数据分析能力
3. 谷歌 IT 支持专业证书 - 支持你的组织 IT 事务
更多相关话题
90 个关于分析、大数据、数据挖掘、数据科学、机器学习的活跃博客(更新中)
原文:
www.kdnuggets.com/2017/01/blogs-analytics-big-data-mining-data-science-machine-learning.html/2
中等活跃的群体:
-
Anil Batra 的网页分析(分析),在线广告和行为定向博客。
-
Annalyzin,为外行提供的分析,包含教程和实验,由 Annalyn Ng 撰写。
-
Ari Lamstein 博客,涵盖开放数据、制图、R 等。
-
商业。统计。技术,由印度商业学院统计学教授 Galit Shmueli 撰写。
-
商业分析(实用分析)博客由 Ravi Kalakota 撰写。
-
Clustify 博客,涵盖电子发现、预测编码、文档聚类、技术和软件开发。
-
Dr. Pham 和 Dr. Nguyen 的数据驱动论坛,大数据、物联网和数据科学:新闻和学术阅读。
-
数据挖掘研究博客由 Sandro Saitta 撰写,内容涉及数据挖掘研究问题、近期应用、重要事件、领先人物访谈、当前趋势、书评。
-
数据科学 Renee,由 Renee M. P. Teate 撰写,内容关于成为数据科学家的过程。
-
EMC 大数据博客,Dell EMC 的大数据博客。
-
Facebook 数据科学博客,由 Facebook 数据科学家呈现的有趣见解的官方博客。
-
FastML,涵盖机器学习和数据科学的实际应用。
-
Forrester 大数据博客 从公司贡献者那里汇聚的博客,专注于大数据话题。商业数据。
-
Insight 数据科学博客由 Insight Data Science Fellows Program 校友撰写,关于数据科学的最新趋势和话题。您通往数据科学和数据工程职业的桥梁。
-
信息是美丽的,由独立数据记者和信息设计师 David McCandless 撰写,他也是其书《信息是美丽的》的作者。
-
Jeff Jonas 博客,关于隐私和信息时代的思考和资源。
-
学习爱好者关于编程、算法及一些学习用的记忆卡片。
-
Bickson.blogspot 大规模机器学习及其他动物,由 Danny Bickson 撰写,他创办了获奖的大规模开源项目 GraphLab。
-
永恒之谜由 Prateek Joshi 撰写,一位计算机视觉爱好者,通过问题风格的引人入胜的故事讲述机器学习。
-
随机沉思由 Yisong Yue 撰写,内容涉及人工智能、机器学习和统计学。
-
Steve Miller BI 博客,来自信息管理。
-
The Geomblog由 Suresh 撰写。
-
随机漫步由 Mike Croucher 撰写。
其他
-
超越得分 一个使用统计学分析棒球比赛的博客。
-
从大数据到大利润,由 Russell Walker 教授撰写,来自西北大学。
-
计算风险,金融与经济学
-
FiveThirtyEight,由 Nate Silver 及其团队提供,通过图表和饼图对从政治到科学再到体育的各种事物进行统计分析。
-
怪诞经济学博客,由 Steven Levitt 和 Stephen J. Dubner 撰写。
-
非官方 Google Analytics 博客来自 ROI Revolution。
-
The Guardian 数据博客,对新闻中的话题进行数据新闻报道。
-
网络分析与联盟营销,Dennis R. Mortensen 关于如何通过分析增加出版商收入的博客。
相关:
-
回顾过去一年,KDnuggets 博客的前 10 名帖子
-
公司和初创企业最佳数据科学、机器学习博客
-
关于分析、大数据、数据挖掘、数据科学和机器学习的 100 个活跃博客
更多相关话题
-
每个机器学习工程师都应该掌握的 5 种机器学习技能
大学担任若干统计课程的教学助理。
-
Revolution Analytics,关于使用开源 R 进行大数据分析、预测建模、数据科学和可视化的新闻。
-
Sabermetric 研究 由菲尔·伯恩鲍姆(Phil Burnbaum)撰写,讨论棒球统计学、股市、体育预测及各种主题。
-
Statisfaction 由巴黎(Université Paris-Dauphine, CREST)的博士生和博士后共同撰写的博客。主要提供日常工作中的技巧和窍门,链接到各种有趣的页面、文章、研讨会等。
-
数据的形状,由杰西·约翰逊(Jesse Johnson)撰写,从几何学的角度介绍数据分析算法。
-
简单统计 由三位生物统计学教授(杰夫·利克(Jeff Leek)、罗杰·彭(Roger Peng)和拉法·伊里扎里(Rafa Irizarry))撰写,他们对数据丰富的新时代以及统计学家作为科学家充满热情。
-
统计建模、因果推断与社会科学 由安德鲁·盖尔曼(Andrew Gelman)撰写。
-
猫咪统计,由查理·库夫斯(Charlie Kufs)撰写,他已经从事数据分析工作超过三十年。
-
分析因子 由凯伦·格雷斯·马丁(Karen Grace Martin)撰写。
-
汤姆·H·C·安德森个人博客,专注于数据和文本挖掘的市场研究。同时也有 OdinText 博客。
-
文森特·格兰维尔博客。文森特,AnalyticBridge 和 Data Science Central 的创始人,定期发布有关数据科学和数据挖掘的有趣话题。
-
Big Data 是什么。吉尔·普雷斯(Gil Press)覆盖大数据领域,并在《福布斯》上撰写有关大数据和商业的专栏。
-
西安的博客,由巴黎第九大学的统计学教授撰写,主要围绕计算和贝叶斯主题。
博客聚合器:
-
Analytics Vidhya 博客 关注分析技能的发展、分析行业的最佳实践等。
-
Hadoop360 是一个完全致力于所有 Hadoop 相关内容的数据科学中心社区频道。
-
IBM 大数据中心博客,来自 IBM 思想领袖的博客。
-
KDnuggets,一个领先的大数据、数据科学、数据挖掘和预测分析网站/博客(包括这个网站,以便完整)。
-
O’Reilly 雷达,涵盖广泛的研究主题和书籍。雷达现已移至 oreilly.com/topics/data-science。
-
Planet Big Data 是一个聚合有关大数据、Hadoop 和相关主题的博客的平台。我们包括来自全球博主的文章。
-
R-bloggers ,来自 R 领域丰富社区的最佳博客,包含代码、示例和可视化。
-
SAS 博客主页,连接到来自 SAS 的人、产品和理念。
-
Smart Data Collective,来自许多有趣的数据科学人物的博客聚合。
-
StatsBlog,一个聚焦于统计学相关内容的博客聚合器,并通过 RSS 提要从贡献博客中汇总文章。
-
数据仓库内幕 来自 Oracle 团队的技术细节、理念和有关数据仓库和大数据的新闻。