R中如何使用bostonR数据科学

该章节,我们将介绍贯穿scikit-learn使用中的“机器学习(Machine Learning)”这个词汇,并给出一些简单的学习示例。

一、机器学习:问题设定

通常,一个学习问题是通过分析一些数据样本来尝试预测未知数据的属性。如果每一个样本不仅仅是一个单独的数字,比如一个多维的实例(multivariate data),也就是说有着多个属性特征

我们可以把学习问题分成如下的几个大类:

  • 数据带有我们要预测的属性。这种问题主要有如下几种:

    • 样例属于两类或多类,我们想要从已经带有标签的数据学习以预测未带标签的数据。识别手写数字就是一个分类问题,这个问题的主要目标就是把每一个输出指派到一个有限的类别中的一类。另一种思路去思考分类问题,其实分类问题是有监督学习中的离散形式问题。每一个都有一个有限的分类。对于样例提供的多个标签,我们要做的就是把未知类别的数据划分到其中的一种。

    • 去过预期的输出包含连续的变量,那么这样的任务叫做回归。根据三文鱼的年纪和中联预测其长度就是一个回归样例。

  • 训练数据包含不带有目标值的输入向量x。对于这些问题,目标就是根据数据发现样本中相似的群组——聚类。或者在输入空间中判定数据的分布——密度估计,或者把数据从高维空间转换到低维空间以用于可视化

机器学习是学习一些数据集的特征属性并将其应用于新的数据。这就是为什么在机器学习用来评估算法时一般把手中的数据分成两部分。一部分我们称之为训练集,用以学习数据的特征属性。一部分我们称之为测试集,用以检验学习到的特征属性。

二、加载一个样本数据集

接下来,我们我们从shell开启一个Python解释器并加载iris和digits两个数据集。【译注:一些代码惯例就不写了,提示符>>>之类的学过Python的都懂】

一个数据集是一个包含数据所有元数据的类字典对象。这个数据存储在 ‘.data’成员变量中,是一个$n*n$的数组,行表示样例,列表示特征。在有监督学习问题中,一个或多个响应变量(Y)存储在‘.target’成员变量中。不同数据集的更多细节可以在dedicated section中找到。

例如,对于digits数据集,digits.data可以访问得到用来对数字进行分类的特征:

digits.target 就是数字数据集对应的真实数字值。也就是我们的程序要学习的。

尽管原始数据也许有不同的形状,但实际使用的数据通常是一个二维数组(n个样例,n个特征)。对于数字数据集,每一个原始的样例是一张(8 x 8)的图片,也能被使用:

对于数字数据集(digits dataset),任务是预测一张图片中的数字是什么。数字数据集提供了0-9每一个数字的可能样例,可以用它们来对位置的数字图片进行拟合分类。

其中一个拟合(评估)样例是sklearn.svmSVC类,它实现了支持向量分类(SVC)。一个拟合(评估)函数的构造函数需要模型的参数,但是时间问题,我们将会把这个拟合(评估)函数作为一个黑箱:

我们调用拟合(估测)实例clf作为我们的分类器。它现在必须要拟合模型,也就是说,他必须要学习模型。这可以通过把我们的训练集传递给fit方法。作为训练集,我们使用其中除最后一组的所有图像。我们可以通过Python的分片语法[:-1]来选取训练集,这个操作将产生一个新数组,这个数组包含digits.dataz中除最后一组数据的所有实例。

现在你可以预测新的数值了。我们可以让这个训练器告诉我们digits数据集我们没有作为训练数据使用的最后一张图像是什么数字。

正如你所看到的,这是一个很有挑战的任务:这张图片的分辨率很低。你同意分类器给出的答案吗?

这个分类问题的完整示例在这里识别手写数字,你可以运行并使用它。[译:看本文附录]

可以使用Python的自带模块——pickle来保存scikit中的模型:

对于scikit,也许使用joblib的pickle替代——(joblib.dump&joblib.load;)更有趣。因为它在处理带数据时更高效。但是遗憾的是它只能把数据持久化到硬盘而不是一个字符串(译注:搬到string字符串意味着数据在内存中):

往后你就可以加载这个转储的模型(也能在另一个Python进程中使用),如下:

joblib.dump返回一个文件名的列表,每一个numpy数组元素包含一个clf在文件系统上的名字,在用joblib.load加载的时候所有的文件需要在相同的文件夹下

scikit-learn的各种拟合(评估)函数遵循一些确定的规则以使得他们的用法能够被预想到(译:使得各种学习方法的用法统一起来)

  • 除非特别指定,输入将被转换为float64

这里第一个predict()返回一个整数数组,是因为iris.target(一个整数数组)被用于拟合。第二个predict()返回一个字符串数组,因为iris.target_names被用于拟合。

  • 一个拟合(评估)函数的混合参数(超参数)能够在通过sklearn.pipeline.Pipeline.set_params方法构造之后被更新。多次调用fit()能够覆写之前fit()学习的内容:

    这里,用SVC()构造之后,开始拟合(评估)函数默认的’rbf’核被改编成’linear’,后来又改回’rbf’去重拟合做第二次的预测。

  • ①digits数据集:一个展示怎样用scikit-learn识别手写数字的样例:绘制数字:

     
  •  

数据人机器学习群:,欢迎加入。

本篇微信主要包括如下内容:


1、英国数据科学专业介绍

2、英国数据科学专业(18所院校24个相关专业官网信息实录),含课程描述/录取要求(学校背景、平均分、雅思)/课程学制/排名/申请费/申请周期等信息

①因为信息太过庞大,小库力求提供更多信息给同学们参考,但难免会有遗漏或者错误,同学们一定要根据自身情况,有选择的借鉴。


大数据(Big Data/ Data Science),或称巨量资料,指的是需要新处理模式才能具有更强的决策力、洞察力和流程优化能力的海量、高增长率和多样化的信息资产。大数据的5V特点:Volume(大量)、Velocity(高速)、Variety(多样)、Value(价值密度)、Veracity(真实性)。

Institute)在英国成立。2013年,英国政府投资,另一个是小象学院的Python数据科学网课。SQL比较简单,主要用来查询数据库,可以跟Python配合使用,零基础有一周左右就能上手。R是做数据分析画图用的比较多的,时间不多的话建议还是先学Python,应用更广一些,Excel的话,学商科的可能用的多一些,有时间可以花一周把基本的建模和数据分析功能学习下,但数据量稍微大一点Excel就不好用了。

5.相关实习:数据科学是非常注重实践的专业,可以说是先有相关的工作,然后才开设了这个专业,因此就业导向很强。也就是说,与其投入时间在学校做科研或者参加相关学科竞赛,还不如直接找个数据分析的实习岗位有用。要找到实习,先得自己有点技术,至少上过Python数据分析的网课再去投简历,毕竟对于一个只工作两三个月的实习生,公司不可能花很多时间培训你,能用就用,不能用就别招过来占着工位。因此,你至少得有一项直接能用的技能,哪怕只会SQL,用的熟,也可能会有公司做项目刚好需要。 此外,提醒一点,找实习面试的时候,就跟对方说清楚之后出国需要推荐信,希望公司方面能用负责人的公司邮箱来提交,否则干了两个月人家告诉你不能用公司邮箱发推荐信,你就傻眼了。


英国数据科学专业的申请,选校是否准确,是未来是否能成功拿到OFFER最关键的一环,一般来说,选校准确,未来拿到OFFER的几率绝对在70%以上。

英国数据科学专业的选校,你可以从以下几个维度来考量:

英国大学的课程种类繁多,即使同一专业,也有不同的课程申请方向,因此仔细了解自己所要申请的课程,确定未来申请的专业是否与自己的目标方向一致是非常重要的。

对于巴斯大学的数据科学专业,其课程描述如下:

数据科学驱动着全球经济活动的很大一部分,并且正在影响着各个领域的科学进步。这门课程为你提供了成为一个拥有强大数学基础的行业专家的工具。您将了解到实现有效数据科学所需的科学和技术的平衡组合;学习到具有普遍相关性的强大统计基础,并开发出关于概率机器学习技术的专业知识;获得软件技术的专业知识,这些技术是将这些知识应用到实践中,解决小型和大型数据集的挑战的关键。

学生将根据对相关研究工作的广泛回顾,分析可能的问题解决方案,并选择适当的方式和方法。在大多数情况下,这个项目将是一个综合分析和计算方法来解决或研究一个重大的计算机科学问题。项目的风格有些可能是基于经验的,有些可能是纯理论性的。项目完成后,将提交一份全面的论文。

2、学校背景、平均分、雅思/托福

这三项决定你是否被目标院校录取的最关键的因素,对于学校背景已经不能改变,但如果你是大一、大二,恭喜你,你还有时间提高你的GPA,如果你是大三,给你提高的机会并不多了。其实从这三个硬性的成绩,你基本上可以确定你能申请的学校的大概了。

以巴斯大学数据科学专业课程为例:

背景专业要求:数学(或任何数学相关专业)、统计学、物理、天体物理学、工程数学或其他科学学位。
雅思:总分6.5,单项6
申请截至:次年 6月30
本科在读证明/本科毕业证及本科学位证
本科均分证明(如成绩单上未体现)
本科均分成绩等级转换证明(如成绩单上未体现)
本科排名证明(如果有)
本科期间获奖证明(如果有)
本科期间实习证明/工作证明(如果有)

对于英国数据科学专业的选校,课程学制、开学时间、排名、申请费、申请周期等相关信息,我们也进行了集中整理。

以巴斯大学数据科学专业课程为例:

学习新技能最好的方法是实践!

本文是帮助 R 用户增强技能和为数据科学进阶而学习 Python (从零开始)。毕竟,R 和 Python 是数据科学从业者必需掌握的两门最重要的编程语言。

Python 是一门功能强大和多用途的编程语言,在过去几年取得惊人发展。它过去用于 Web 开发和游戏开发,现在数据分析和机器学习也要用到它。数据分析和机器学习是 Python 应用上相对新的分支。

作为初学者,学习 Python 来做数据分析是比较痛苦的。为什么?

在谷歌上搜索“Learn Python ”,你会搜到海量教程,但内容只是关于学习 Python 做 Web 开发应用。那你如何找到方法?

在本教程,我们将探讨 Python 在执行数据操作任务上的基础知识。同时,我们还将对比在 R 上是如何操作的。这种并行比较有助于你将 R 和 Python 上的任务联系起来。最后,我们将采用一个数据集来练习我们新掌握的 Python 技能。

注意:阅读这篇文章时最好具备一定的 R 基础知识。

为什么学习 Python(即使你已经懂 R )

理解 Python 的数据类型和结构(与 R 对比)

用一个数据集实践 Python

为什么学习 Python(即使你已经懂R)

毫无疑问,R 在它自身的领域是极其强大的,实际上,它最初是用来做统计计算和操作。强大的社区支持使得初学者可以很快掌握 R .

但是, Python 正迎头赶上,无论成熟公司还是初创公司对Python 的接受程度要远远大于 R

根据 indeed.com 提供的数据(2016年1月至2016年12月),“用 Python 做机器学习”的招聘信息数量要比“用 R 做机器学习” 增长快得多(约 123%)。这是因为:

Python 以更好的方式支持机器学习覆盖的全部范围。

Python 不仅支持模型构建,而且支持模型部署。

Python的库相对独立,每个库都拥有数据科学工作者所需要的所有函数。你不需要像在 R 中一样在各种包之间来回查找一个函数。

编程语言是基于它的变量和数据类型来理解复杂的数据集。是的,假设你有一个 100 万行,50 列的数据集。编程语言会如何理解这些数据呢?

基本上,R 和 Python 都有未定义数据类型。独立和非独立变量都有着不同的数据类型。解释器根据数据类型分配内存。Python 支持的数据类型包括:

数值型(Numbers)——存储数值。这些数值可以存储为4种类型:整型,长整型,浮点型,复数型。让我们分别理解。

整型(Integer)—— 它指的是整数类型,比如 10 、13 、91、102 等。相当于 R 中的整型(integer)。

长整型(Long)——它指的是用八进制或者十六进制表示的长整数,在 R 中,用 64 位包读取十六进制值。

浮点型(Float)——指的是小数值,比如 1.23 , 9.89 等, R 中浮点数包含在数值型(numeric)。

复数型(Complex)——它指的是复数值,比如 as 2 + 3i, 5i 等。不过这种数据类型在数据中不太常见。

布尔型(Boolean)——布尔型只存储两个值(True 和 False)。在 R 中,它可以存储为因子(factor)类型或字符(character)类型。R 和 Python 的布尔值之间存在着微小的差别。在 R 中,布尔型存储为 TRUE 和 FALSE。在 Python 中,它们存储为 True 和 False 。字母的情况有差异。

字符串(Strings)——它存储文本(字符)数据,如“elephant,”lotus,”等,相当于R的字符型(character)。

列表——它与 R 的列表数据类型相同。它能够存储多种变量类型的值,如字符串、整数、布尔值等。

元组—— R 中没有元组类型,把元组看成是 R 中的向量,它的值不能改变。即它是不可变的。

字典—— 它提供支持 key-value 对的二维结构。简而言之,把键(key )看作是列名,对(pair)看作是列值。

因为 R 是统计计算语言,所有操作数据和读取变量的函数都是固有的。而另一方面,Python 数据的分析、处理、可视化函数都是从外部库调用。Python 有多个用于数据操作和机器学习的库。以下列举最重要的几个:

Numpy——在Python中它用于进行数值计算。它提供了庞大的诸如线性代数、统计等的数学函数库。它主要用于创建数组。在 R 中,把数组看作列表。它包含一个类(数字或字符串或布尔)或多个类。它可以是一维或多维的。

Scipy——在Python中它用于进行科学计算。

Scikit Learn—— 它是实现机器学习算法的强大工具。实际上,它也是 python 中用来做机器学习的最好工具。它包含建模所需的所有函数。

在某种程度上,对于数据科学工作者来说,最主要的是要掌握上面提到的 Python 库。但人们正开始使用的高级 Python 库有太多。因此,为了实际目标,你应该记住以下这些:

数组(Array)——这与 R 的列表类似。它可以是多维的。它可以包含相同或多个类的数据。在多个类的情况下,会发生强制类型转换。

列表(List)—— 相当于 R 中的列表。

矩阵(Matrix)——它是二维(或多维)结构,包含同一类(或多个类)的所有值。把矩阵看成是向量的二维版。在R中,我们使用 matrix 函数。在Python中,我们使用 numpy.column_stack 函数。

到这里,我希望你已经明白了R和Python中数据类型和数据结构的基本知识。现在,让我们开始应用它们。

用Python写代码(对比R)

我们现在来使用在前面部分学到的知识,明白它们实际的含义。但在此之前,你要先通过Anaconda的 jupyter notebook 安装 Python(之前称为ipython notebook)。你可以点击这里下载。我希望你已经在电脑上安装了 R Studio 。

在 R 中,创建列表使用的是 list 函数

在 Python 中,创建列表使用的是方括号 [ ] 。

在 pandas 库中也可以得到相同的输出,在 pandas 中,列表称为序列。在 Python 中安装 pandas,写下:

数字(0,1,2,3)表示数组索引。你注意到什么了吗?Python 索引是从 0 开始,而 R 的索引从 1 开始。让我们继续了解列表子集在 R 和 Python 的区别。

把 new_list 看作一列火车。这列火车有两个名为 roll_number 和 Start_Name 的车厢 。在每个车厢中,有10人。所以,在列表构建子集中,我们可以提取车厢的值,车厢中的人等,等等。

如果你查询一下 new_list [ 1 ] 的类型,你会发现它是一个列表,而 new_list [ [ 1 ] ] 类型是一个字符。类似地,在 Python 中,你可以提取列表组件:

R 和 Python 的列表索引有一个让人困惑的区别。如果你注意到在 R 中 [[ ]] 表示获取车厢的元素, 然而[[ ]] 在 Python 中表示获取车厢本身。

矩阵是由向量(或数组)组合而成的二维结构。一般来说,矩阵包含同一类的元素。然而,即使你混合不同的类(字符串,布尔,数字等)中的元素,它仍会运行。R 和 Python 在矩阵中构建子集的方法很相似,除了索引编号。重申,Python 索引编号从 0 开始,R 索引编号从 1 开始。

在 R 中,矩阵可以这么创建:

在Python中,我们会借助 NumPy 数组创建一个矩阵。因此,我们先要加载 NumPy 库。

数据框为从多来源收集而来的松散的数据提供了一个急需的骨架。它类似电子表格的结构给数据科学工作者提供了一个很好的图片来展示数据集是什么样子。在R中,我们使用 data.frame() 函数创建一个数据框。

那么,我们知道一个数据框是由向量(列表)的组合创建的。在 Python 中创建数据框,我们将创建一个字典(数组的组合),并且在 pandas 库的 Dataframe()函数中附上字典。

现在,让我们看下操作 dataframe 最关键的部分,构建子集。实际上,大部分数据操作都包含从各个可能的角度切割数据框。让我们逐个看下任务:

.loc 函数用于基于标签的索引

到这里我们大致明白了 R 和 Python 中的数据类型、结构和格式。让我们用一个数据集来探索 python 中数据的其他面。

用一个数据集实践 Python

强大的 scikit-learn 库包含一个内建的数据集库。为了我们实践的目的,我们将采用波士顿住房数据集(Boston housing data set)。做数据分析时,它是一个很流行的数据集。

变量boston是一个字典。回顾一下,字典是key-value对的组合,让我看下键(key)的信息:

现在我们知道我们需要的数据集驻留在key数据中。我们也看到,对于功能名称有一个单独的key。我认为数据集不会分配列名。让我们来检查下我们要处理的列名。

你能明白这些名称吗?我也不明白。现在,让我们检查下数据描述和理解每个变量的意义。

这个数据集有506行,13列。它包含帮助确定波士顿房价的多种特征。现在,让我们创建一个数据框:

输出显示数据集没有列名(如上所述)。将列名分配到数据框中是容易的。

就像R中的 dim() 函数,Python 有检查数据集维数的 shape() 函数。为得到数据集的统计汇总,我们写下:

它显示了数据中列的统计汇总。让我们快速探索这个数据的其他方面。

此外,Python 还允许我们创建透视表。是的! 就像 MS Excel 或任何其他电子表格软件,你可以创建一个数据透视表,更密切地了解数据。不幸的是,在 R 中创建一个数据透视表是一个相当复杂的过程。在 Python 中,一个透视表需要行名、列名和要计算的值。如果我们不通过任何列名称,得到的结果只会像你使用 groupby 函数得到的。因此,让我们创建另一个分类变量。

这只是冰山一角。下一步怎么做?就像我们使用波士顿住房数据集,现在你可以试试安德森鸢尾花卉数据集(iris data)。它在sklearn_datasets 库是可用的。尝试深入探讨。记住,你练习越多,花费的时间越多,你就会变得越好。

总体来说,学习这两门语言会给你足够的自信去处理任何类型的数据集。事实上,学习python最好的一面是它有完善的文档可以用在numpy,pandas,scikit learn 库,这足够帮你跨越所有最初的障碍。

I这篇文章,我们主要接触了 python 的基础知识。还有很长的路要走。下周,我们将在 Python 中具体学习数据操作。之后,我们将学习数据可视化和强大的机器学习库。

在实践这门教程的时候,请在下方分享你的经历、建议和问题。

声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。

我要回帖

更多关于 R数据科学 的文章

 

随机推荐