无论您是具有数学或计算机科学背景的新兴数据科学爱好者,还是无关领域的专家,数据科学提供的可能性都将触手可及。 而且您不需要昂贵的高度专业化的企业软件-本文中讨论的开源工具就是您入门所需的全部。
Python ,其机器学习和数据科学库( pandas , Keras , TensorFlow , scikit-learn , SciPy , NumPy等)以及大量可视化库( Matplotlib , pyplot , Plotly等)都是出色的FOSS工具。适用于初学者和专家。 易学易用,足够流行,可以提供社区支持,并且配备了针对数据科学开发的最新新兴技术和算法,这些是您入门时可以获得的最佳工具集之一。
依赖项 ),并且基础是NumPy库。 NumPy专为数据科学而设计,通常用于以ndarray数据类型存储数据集的相关部分,这是一种方便的数据类型,用于将来自关系表的记录存储为csv
文件或任何其他格式,反之亦然。
将scikit函数应用于多维数组时,这特别方便。
SQL非常适合查询数据库,但是执行复杂且占用大量资源的数据科学操作时,将数据存储在ndarray中可以提高效率和速度(但在处理大型数据集时,请确保您有足够的RAM)。
当您开始使用熊猫进行知识提取和分析时,熊猫中的DataFrame数据类型与NumPy中的ndarray之间几乎无缝的转换分别为提取和计算密集型操作创建了强大的组合。
为了快速演示,让我们启动Python shell,并在pandas DataFrame变量中加载来自巴尔的摩市的犯罪统计数据的开放数据集,并查看已加载帧的一部分:
>>> import pandas as pd
>>> crime_stats = pd.read_csv('BPD_Arrests.csv')
>>> crime_stats.head()
现在,我们可以在熊猫数据库DataFrame上执行大多数查询,就像使用数据库中SQL一样。 例如,要获取“描述”属性的所有唯一值,SQL查询为:
$ SELECT unique(“Description”) from crime_stats;
为熊猫DataFrame编写的同一查询看起来像这样:
>>> crime_stats['Description'].unique()
['COMMON ASSAULT' 'LARCENY' 'ROBBERY - STREET' 'AGG. ASSAULT'
'LARCENY FROM AUTO' 'HOMICIDE' 'BURGLARY' 'AUTO THEFT'
'ROBBERY - RESIDENCE' 'ROBBERY - COMMERCIAL' 'ROBBERY - CARJACKING'
'ASSAULT BY THREAT' 'SHOOTING' 'RAPE' 'ARSON']
它返回一个NumPy数组(ndarray):
>>> type(crime_stats['Description'].unique())
<class 'numpy.ndarray'>
接下来,让我们将这些数据输入到神经网络中,看看在给定数据(例如犯罪时间,犯罪类型及其发生的地点)的情况下,它可以多么准确地预测所使用武器的类型:
>>> from sklearn.neural_network import MLPClassifier
>>> import numpy as np
>>>
>>> prediction = crime_stats[[‘Weapon’]]
>>> predictors = crime_stats['CrimeTime', ‘CrimeCode’, ‘Neighborhood’]
>>>
>>> nn_model = MLPClassifier(solver='lbfgs', alpha=1e-5, hidden_layer_sizes=(5,
2), random_state=1)
>>>
>>>predict_weapon = nn_model.fit(prediction, predictors)
现在学习模型已经准备就绪,我们可以执行几次测试以确定其质量和可靠性。 首先,让我们提供一个训练集数据(原始数据集中用于训练模型的部分,未包含在创建模型中):
>>> predict_weapon.predict(training_set_weapons)
array([4, 4, 4, ..., 0, 4, 4])
如您所见,它会返回一个列表,其中的每个数字都会预测训练集中每个记录的武器。 我们看到的是数字而不是武器名称,因为大多数分类算法都是使用数字数据进行优化的。 对于分类数据,有些技术可以可靠地将属性转换为数字表示形式。 在这种情况下,使用的技术是Label编码,使用sklearn预处理库中的LabelEncoder函数: preprocessing.LabelEncoder()
。 它具有转换和逆转换数据及其数值表示的功能。 在此示例中,我们可以使用LabelEncoder()的inverse_transform
函数来查看什么是武器0和4:
>>> preprocessing.LabelEncoder().inverse_transform(encoded_weapons)
array(['HANDS', 'FIREARM', 'HANDS', ..., 'FIREARM', 'FIREARM', 'FIREARM']
看起来很有趣,但是要了解该模型的准确性,让我们以百分比的形式计算几个分数:
>>> nn_model.score(X, y)
0.81999999999999995
这表明我们的神经网络模型的准确度约为82%。 该结果似乎令人印象深刻,但在将其用于其他犯罪数据集时,检查其有效性很重要。 还有其他测试,例如相关性,混淆,矩阵等。 尽管我们的模型具有很高的准确性,但对于一般犯罪数据集来说并不是很有用,因为该特定数据集的行数不成比例,其中列出了“ FIREARM”作为使用的武器。 除非对其进行重新训练,否则即使输入数据集具有不同的分布,我们的分类器也最有可能预测“ FIREARM”。
在对数据进行分类之前,清理数据并删除异常值和像差非常重要。 预处理越好,我们的见解的准确性就越高。 同样,向模型/分类器提供太多数据以获取更高的准确性(通常超过90%)也是一个坏主意,因为它看起来很准确,但由于过度拟合而无用 。
Jupyter笔记本是命令行的绝佳交互替代品。 尽管CLI适用于大多数情况,但Jupyter在您要随时运行摘要以生成可视化效果时会发光。 它还比终端更好地格式化数据。
本文列出了一些机器学习的最佳免费资源,但是还有许多其他指南和教程。 根据您的兴趣和爱好,您还会发现许多可用的开放数据集。 首先,由Kaggle维护的数据集以及州政府网站上可用的数据集都是极好的资源。
Payal Singh将于今年3月8日至11日在加利福尼亚州帕萨迪纳举行的SCaLE16x上发表演讲。 要参加并获得门票的50%,请使用促销代码OSDC 注册
翻译自: https://opensource.com/article/18/3/getting-started-data-science