当前位置: 首页 > 编程日记 > 正文

入行AI,你需要一本Python机器学习入门




目前机器学习红遍全球。男女老少都在学机器学习模型,分类器,神经网络和吴恩达。你也想成为一份子,但你该如何开始?

今天小编推荐这本《Python机器学习》教你快速入门。



01什么是机器学习?


从出生的那天起,我们就一直在学习中度过。随着逐渐的成长,开始学习如何走路;通过倾听周围人的谈话,学习并尝试模仿;通过学习不同单词的意思,使得在需要时懂得该如何进行表达;同时也开始区分事情的好坏。例如,在第一次靠近火源时,会因灼热而后退,从而明白要与火源保持一定的距离。

那么,现在思考一下计算机的工作原理。计算机可以在1s内遵循人类的指示处理数百万条指令,并返回结果;它可以执行人类描述的任务,但是却不能自行决定。

而机器学习此时就可以发挥作用了。如果给予计算机像人类一样的思考能力,那会发生什么呢?可以用计算机能理解的方式给出每一天的任务令其进行计算,还可以建立一些模型来帮助计算机在将来采取行动。

人类从经验中学习知识,计算机则遵循指令执行任务。然而,其实还可以直接向计算机提供经验让其学习并为行动做准备。目前我们是以结构化的方式定义经验。因此,我们将计算机从数据(经验)中进行学习的过程称为机器学习(Machine Learning)。

以买香蕉为例。你的母亲需要你去市场上买一些香蕉,同时她告诉你鲜黄色的香蕉很好吃。你到一个水果商那里,开始按照母亲的建议挑选香蕉。你买了20根香蕉后就回家了,然而回家后你注意到有些香蕉的味道并不像其他的那样好。事实上,有5根香蕉是坏的。你逐个拿起香蕉并开始作出假设。 20根香蕉中有12根大香蕉和8根小香蕉。这8根小香蕉都很美味,但是大香蕉就不一样了,在12根大香蕉中有5根味道不如预期。

你已经掌握了挑选香蕉的知识。第二天,当你到达市场时,注意到有个水果商在打折出售香蕉,这些香蕉和昨天的不同,它们的皮带有一些绿色。从这里买完香蕉回到家后,根据之前的经验将每一根香蕉分为好与坏,会发现大的绿色香蕉很好吃,但是小的绿色香蕉的味道不如其他的好。这样,你就学会了新规则。

你开始将自己看作是香蕉专家。有一天,你不得不去另一个城市参加表亲的婚礼。现在你惊讶地发现这里所有的香蕉都很小,但是味道却都很好。在这里你了解到来自这个区域的香蕉是畅销商品。

现在你确实已经是一名专家了。但如果你的姐姐很长时间没有回家了,并且她喜欢石榴而讨厌香蕉。你要怎么办呢?为了找到美味的石榴,你需要重新开始你的学习。

现在这个任务就可以由机器学习负责指引计算机完成了。可以使用数据点的形式向计算机提供知识。数据点的属性称为特征(Feature),这里的特征是香蕉的大小(小、中、大)、颜色、产地等。输出(Output)就是味道(好或者坏)。将这些数据输入到机器学习程序中,就可以让计算机学习如何区分香蕉的好与坏。

机器学习算法是一种根据经验来给予你决策能力的智能算法。


02为什么选择python


Python在数据科学家中是非常受欢迎的编程语言。

  • 第一,它免费且易学,不必为了小任务而浪费大量注意力;
  • 第二,它是面向对象的语言,这也是其被大型开发者社区支持的原因;第三,巨大的开源库支持。 Python具有相当数量的开源库,能够更迅速地实现数据科学和机器学习解决方案,而无须从头开始编写每一个算法。像Pandas、 scikit-learn、 SciPy、 NumPy、 Keras这样的库对于快速实现机器学习算法非常有用。

首先,通过一个例子了解如何使用编程语言来解决现实世界的问题。

假设举办一个聚会。你为每个进入聚会的人分配一个唯一的1~100之间的号码。现在聚会结束了,你宣布了一个消息。

“会从1~200之间获取一个随机数。如果有两个人的号码之和与这个数字相等,就会奖励这两个人。”

现在了解到,已经向x个人分配了号码。如何确定能否给其中两个人奖励呢?

可以尝试使用Python来解决这个问题。首先,从列表中获取输入数据。


现在选择一个随机数并将其存储在一个变量中。


为了解决这个问题,必须先对数据进行排序。在Python列表中排序很简单,可以通过sort函数来完成。


通过上述语句,将排序后的数字赋值给变量。现在使用两个指针:一个指向开始处(前指针);另一个指向结束处(后指针)。检查两指针所指变量的和。如果和小于给定值(意味着当前的总和小于所需的总和),前指针向前移动一步并再次检查;如果和大于给定值(意味着当前的总和大于所需的总和),将后指针向后移动一步并再次检查。无论在任何位置,如果当前的总和等于要求的总和,便可以说,存在两个人的数值之和与给定的数值相同,需要给予奖励;如果两个指针相交并且仍然没有达到所需的总和,则可以声称并不存在两个人的数值之和与给定的数值相等。

以下是完整的解决方案。


为获得所需答案,必须向函数传递排序列表和给定的数值(即两数值的期望和)。


即使现在不能理解此代码,也不要担心。接下来我们还会对这段代码进行解析,并介绍程序设计语言的基本原理。


03机器学习过程


机器学习不仅仅是一种简单的算法,还可以将其放在其他任何地方以获得奇妙的结果。机器学习是一个从定义数据开始,最终获得一定准确率的模型的过程。

1.问题定义

机器学习的过程从定义一个商业问题开始。机器学习的需求是什么?这个任务真的需要高级的预测算法来解决吗?

问题定义是非常重要的,它提供了更正式地思考解决方案的方向。它基本上处理两个问题。

A.问题是什么?

这个问题涵盖了问题的定义,并使问题变得更加正式。假设我们想要确认图像中是否包含人。

现在定义这个任务,将其分为任务(T)、经验(E)和性能(P)。

  • 任务(T):根据图像中是否包含人对图像进行分类。
  • 经验(E):带有是否包含人的标签的图像。
  • 性能(P):错误率。在所有的分类图像中,错误预测的百分比是多少。错误率越低,准确率越高。

B.为什么这个问题需要解决方案?

这个问题更侧重于商业方面,它包括解决问题的动机和益处。

假如你是一个研究者,希望解决某个问题并发表论文,使之成为他人解决问题的基准,这可能就是你的动机。

关于你的问题其他需要确定的是,在没有安全措施的情况下,夜间在银行的自动取款机上是否有人类活动(假设所要解决的问题与自动取款机的安全有关)。

还需要定义可以使用此解决方案的场景。这是一个通用型的解决方案,还是为特定任务(ATM传感器中的检测人员)所设计的呢?解决方案的失效日期是什么时候(它是终身的还是在特定的期限内)?

2.数据采集

在定义问题之后,开始进行数据采集。收集数据有多种不同的方式,如果想把评论与评级联系起来,就要从抓取网站开始。为了分析Twitter数据并将其与情感联系起来,就要从Twitter提供的API入手,收集标签数据或者与某个公司相关联的数据。市场调查人员通过创建不同的调查表格,并将其放在网站上来收集数据。对于像Amazon、 Facebook这样拥有众多用户的公司,其数据是巨大的,而根据问题的不同,还需要收集数据和标签。假设要建立一个新闻分类器,将新闻划分为体育新闻、市场新闻和政治新闻。因此,收集到的每一条新闻都需要一个与之相关的标签,通过这些数据可以构造机器学习的分类器。

正确的数据是解决机器学习问题的关键。即使是基本算法,高质量的数据也会产生令人满意的结果。

3.数据准备

在采集数据之后,需要专注于数据准备。收集的数据要准备成机器学习算法所能使用的格式。算法不是魔术表演,数据必须以正确的形式输入到机器学习算法中才能获得结果。根据算法库的不同,算法可以适应不同类型的输入格式。

数据准备是从数据选择开始的,并不是收集到的每个数据都对问题的解决有帮助。假设你正在分析服务器上的日志,在每个用户活动之后会生成许多与系统相关的信息,如果正在预测的是营销活动的市场反应,那么这个日志可能就不起作用了。所以,基于所要解决的问题,应将无关数据从之后的操作中删除。

在更高层次的基础上识别数据后,需要对数据进行转换或预处理,使之能更好地应用于机器学习算法。以下是数据预处理过程中的一些过程。

清理(Cleaning):数据可能含有需要移除的错误。假设数据中缺少某些属性的数值,由于目前并没有适合的算法能够处理值缺失问题,因此可以用一些值(数值的均值/中值和分类值的默认值)代替缺失值。如果数据包含敏感信息,如电子邮件的ID和用户的联系号码,则需要在与团队共享数据之前删除数据中的敏感信息。

  • 格式化(Formatting):算法需要预定义格式的数据。基于Python机器学习库的要求,采用Python列表的形式表示数据。一些实时的机器学习库使用的是JSON格式的数据,而Excel文件使用CSV格式的数据。根据使用工具或技术的不同,需要对数据进行格式化,使其满足使用工具或技术对数据格式的要求。
  • 采样(Sampling):并非所有的数据都是有用的。一些在模型中存储数据的算法很难实时生成预测,可以从数据中删除类似的实例。如果是分类模型,可以按照标签进行等比例采样。
  • 分解(Decomposition):分解会使得一些特征更加有用。以数据库中的日期属性为例,可以把日期分解成日、月、年,还可以创建诸如周末或工作日、季度、闰年或日期等特征,使其在预测中更有用。
  • 缩放(Scaling):不同的属性遵循不同的单位和值。假设通常以厘米为单位测量一个人的身高,而对于一些数据,可能是以英寸为单位。所以,需要先将其换算成厘米。另外,一个属性的高/低值可能会影响到其他属性。例如有3个特征,如人的年龄、体重和年收入,现在希望根据它们预测医疗保险计划。如果直接使用这些数据,模型将高度依赖于工资,因为工资的数值远远高于其他属性的值。所以,需要对每个属性的值进行缩放,调整为[0,1]或[-1,1 ]。
  • 这个过程也称为特征处理(Feature Processing),它包括特征选择、预处理以及将其转换为对于机器学习算法有益处的格式。

4.数据分割——训练数据和测试数据

机器学习算法的目标是对未知的新数据进行预测。我们使用训练数据来建立模型。在训练数据时,算法将逐渐减少训练的误差。但是,不能将训练数据的准确率(Accuracy)视为广义的准确率,其原因在于该算法可能会记住实例并对其进行相应的分类。所以,为了评估生成的模型,需要将数据分为训练数据和测试数据。利用训练数据进行算法训练,利用测试数据来计算生成模型的最终准确率。测试数据并不参与算法训练。

一般将60%~80%的数据作为训练数据,剩余的部分作为测试数据。所以,在测试数据中获得最好结果的模型可以作为目标模型。

5.算法选择

我们从一组机器学习算法开始,并将训练数据的特征应用到算法中,算法选择依赖于问题的定义。如果从电子邮件中收集数据,并将邮件分为垃圾邮件或非垃圾邮件,则这时所需要的算法是在输入变量后输出相应的结果(垃圾邮件或者非垃圾邮件),这类算法称为分类(Classification)算法(如决策树、朴素贝叶斯、神经网络等)。如果想预测某一任意连续变量(如预测即将到来的季度销售量),则使用回归(Regression)算法(如线性回归、核回归等)。如果所解决的问题并没有相关的任何输出或反应,则可以使用聚类(Clustering)算法,根据它们的特性对其分组。每种类别中都有大量的算法,我们将在后续的章节中给出示例。

6.算法训练

在选择算法之后,开始训练模型。训练模型是在训练数据集上进行的,大多数算法的权值/参数在训练开始时都是随机分配的,并在每次迭代中加以改进。算法训练过程中,在训练数据集上多次运行以产生结果,如图1.1所示。例如,在线性回归的情况下,算法在开始时随机放置分离线,在每次迭代之后不断地改进自身(也就是移动分离线)。


7.测试数据评估

利用训练数据生成最佳算法后,在测试数据集上对算法的性能进行评估。测试数据集并不能参与算法训练,因此测试数据并不能影响算法的决策。

8.参数调整

在选择正确的算法后,可以尝试对其进行改进以获得更好的性能。每个算法都有不同的参数设置方式,可以对其进行配置从而更改算法性能,这称为参数调整(Parameter Tuning)。例如可以改变算法学习的速率(学习率)来提高算法性能,这些参数称为超参数(Hyper Parameter)。对于机器学习来说,参数调整更像是一门艺术。

9.模型使用

上述所有步骤完成之后,就可以获得在训练集上训练生成,并在测试集上完成评估的模型。现在可以使用这个模型来预测新数据的值。对于生产环境,可以将模型部署到服务器,并通过API接口使用模型的预测功能。当然,这个模型并不总一样的,每当获得新数据时,都要将上面所列出的步骤重新进行一遍,以改进模型的性能。

因此,在机器学习中,从问题开始,最后以一个解决问题的预测算法结束。

通过下面的问题,我们开始尝试了解机器学习算法是如何解决问题的。

假设你需要购买一栋房子,现在开始查看市场上正在出售的房屋,并据此核对你的预算。你对将要购买的房子有多个要求,首先就是房子的面积。

在图1.2的情景中,你先考查了一栋600平方英尺(约56m2)的房子,价格是220 000英镑(约1 942 578元)。这个房子的确很不错,但是它并不满足你的要求——你将和你的家人一同居住,而这个房子面积太小,并不能让每个人都住得舒适。所以,你继续研究并找到一栋1700平方英尺(约158m2)的房子,价格是730 000英镑(约6 445 827元)。这个房子满足你的要求,但是它的价格有些超出你现在的预算——你的预算与小面积房子的价格相比要高一些,但也不像大房子的价格那么高。然而,只有当你与业主或代理人见面并提交详细资料后,才能得到房子的实际价格。但是你并不想与每一个业主或者代理人见面。


在二维(2D)平面上分析一下你所考查的两个属性,如图1.3所示。


现在,你在城市里闲逛,找到一栋面积在这两栋房子之间的房子。

这栋新房子的面积大约有1 250平方英尺(约116m2),但你还不知道价格。所以,你想预测房子的价格,看其是否符合预算和要求。

将新房子的信息放在同一个二维平面上,试着预测这个房子的价格,如图1.4所示。


为了预测房屋的价格,将设置一条符合已知结果(即房屋价格和房屋面积)的直线,这里得到了如图1.5所示的一条直线。


图1.5

通过这条直线,可以预测出1250平方英尺(约116m2)的房子的价格是475 000英镑(约4 194 202.5元)。所以,我们得到了一条根据房子面积来预测房子价格的直线,这种技术称为线性回归(Linear Regression)。可以把这种技术理解为在现有数据点上寻找最佳直线。

比如,计算3个点到直线距离之和的最小值。首先,随机选择一条线,直线上方有A、B、C共3个点,如图1.6所示。


然后,计算每个点到直线的距离,如图1.7所示。


可以得到总距离是a+b+c。现在,移动直线的位置(向下移动)并再次计算点到直线的距离,如图1.8所示。


改变了线的位置,但总距离a+b+c增加了。显然,这不是我们想要的结果。让我们将直线朝另一个方向(向上移动)移动,如图1.9所示。


这条直线(见图1.9)比第一条直线(见图1.7)要更符合要求。现在移动这条线,并试着重复进行同样的步骤。最终通过这种方式结束直线的选择,从而确定直线位置,如图1.10所示。


对于给定的3个点(A、 B、 C)来说,图1.10所示的直线是最符合条件的。在这里取3个点到直线的非负距离,找到这条线的方法称为梯度下降法。

有时在所有数据点上拟合一条直线并没有多大意义。现在思考图1.11所示的点集。


如果尝试使用线性回归技术来拟合一条直线,它看起来如图1.12所示。


很明显,这条线不适合用来预测。相反,可以用图1.13所示的曲线来对数据建模。


这就是所谓的多项式回归(Polynomial Regression) —— 因为其参数是多项式。

再来看另一个例子,例如有一个售鞋网站,其中包含来自不同公司的各种鞋子,可以通过其网上商店订购鞋子。鞋子成功交付后,公司将发送电子邮件获取顾客的反馈。顾客在评论区内留言,其中有些评论是正面的,有些评论则是负面的。

该公司每天销售数千双鞋,需要跟踪每一个评论并采取相应的行动。如果顾客评论说鞋子质量不佳,则需向生产商询问有关产品的质量问题;有些鞋子反响很好,则最好将它们放在网站的首页。

为了解决这个问题,首先需要从一组顾客评论开始,将每个评论分为负面评论或者正面评论,下面给出部分示例。

正面评论

A1:质量不错!我很喜欢这双鞋子。

A2:非常好的产品。

A3:给我爸爸买的,他很喜欢。

负面评论

B1:材质不好,不适合。

B2:很不喜欢这个产品,包装也很不好。

B3:千万不要买这个产品。

分析示例中的正面评论和负面评论,会发现,如果评论中包含“喜欢”这个词,那么它更可能是一个正面评论。因此,创建这条规则并检查所有数据集,会发现60%的正面评论中包含“喜欢”这个词;另一方面,只有10%的负面评论中包含“喜欢”这个词。

同样,其他词语所占的比例如表1.1所示。

表1.1

词正面评论负面评论喜欢60%10%很好45%7%好36%8%差4%62%很差2%23%

因此,对于将来可能获得的评论,根据其所包含的词的复合概率,可以判定该评论是正面评论还是负面评论,这就是朴素贝叶斯分类器(Naïve Bayes Classifier)

再列举一个向不同的人推荐杂志的例子。假设已经记录了用户的年龄、性别、位置以及他们阅读的杂志类型,表1.2所列为记录的数据。

表1.2

年龄性别位置杂志21女美国运动15男美国儿童37男印度政治42女英国商业32女美国运动14女印度儿童53男印度政治

现在,通过对这些数据进行观察,可以发现小于15岁的人喜欢阅读儿童杂志。根据其制作一个节点和它的决策,如图1.14所示。每个圆节点表示决策节点,图的边缘(箭头)则表示相应的决策,每个矩形节点表示通过图分支之后采取的决策。


因此,可以说每个年龄小于或等于15岁的人都有可能阅读儿童杂志。现在再来处理大于15岁的读者的分支。

现在,第二个观察特征是男性,他们喜欢阅读政治杂志。为其创建相同的决策节点和分支,如图1.15所示。


接下来,需要看一下年龄在15岁以上的女性的选择。还有一个信息可以利用——地区。因此,可以说,来自美国的女性喜欢阅读体育杂志,而其他地区的女性则喜欢商业杂志。在这里形成的节点如图1.16所示。


正确地对每个数据点进行分类,这个过程中形成了决策树。可能存在多种创建决策树的方法。根据现有的数据,这些方法可以做出正确的预测。

图1.17所示的这棵树对数据进行了准确的分类。


再来举另一个例子,有几个人每年申请贷款,银行根据他们的收入和贷款额从而决定是否对其提供贷款,目标是向那些在规定时间内偿还债务,且没有任何违约的人提供贷款。

如果一个人月收入是20 000美元,他申请了100 000美元的贷款,银行根据他的收入来源可以批准贷款;如果一个人月收入是3 000美元,他申请了600 000美元的贷款,则银行可能会早早地拒绝他。

因此,银行基于以往违约者的历史创建了一个数据,如图1.18所示。红点表示银行拒绝受理的申请,绿点表示银行批准的申请。横坐标是请求的贷款额度,纵坐标是月收入。


现在,一个月收入10 000美元的人想要贷款300 000美元,银行是否会给予批准呢?可以通过一条直线来分割数据,如图1.19所示。


根据上面的直线,可以预测银行将同意月薪20 000美元的人申请300 000美元的贷款申请。

现在,已经有一条合适的直线来分割现有的数据点。我们使用的算法(梯度下降法)与在线性回归过程中使用的算法相同。在这里,目标变量是类别而不是在线性回归情况下连续的预测值,这种技术称为逻辑回归(Logistics Regression)

现在,银行来了一位新的经理,他要检查所有记录,他认为银行批准或拒绝贷款申请的参数是荒谬的,一些像10 000美元或20 000美元的贷款申请并没有风险,银行可以同意这部分贷款申请。所以,他改变了规则和数据,如图1.20所示。


显然,仅仅使用一条直线并不能将红点和绿点分开,既然这样,那使用两条直线呢?如图1.21所示。


与一条直线相比,使用两条直线可以将红点和绿点分开。这种技术被称为神经网络(Neural Network)。神经网络是基于大脑中的神经元的概念提出的。大脑中的神经元收集信息并将其传递给其他神经元。简单来说,就是基于先前神经元的输入,下一个神经元接收要求并决定输出,它还将信息传递给其他神经元。最后,通过处理不同的神经元,大脑做出决定。

这个概念可以用下面的模型(见图1.22)来理解。在这个模型中,两个神经元通过使用不同的假设建立模型,并且将它们的发现发送给另一个神经元。根据收集到的信息,输出神经元做出决策。


在处理数据时,对于一条分割数据点的直线,可能有不同的选择。如图1.23所示的两个例子。


与直线1相比,直线2的边距更大,其在分割数据方面似乎更好,如图1.24所示。


现在我们要寻找最佳分割路线,而梯度下降并不能解决这个问题,需要线性优化才能实现。这种技术被称为最大间隔分类器或支持向量机(Support Vector Machine, SVM)

在现实世界中,数据并不能完全分割开。它可能会如图1.25所示的那样。


所以,不能通过一条直线就把红点和绿点分开。但是如果通过一个平面来区分红点和绿点,就可以用一个分类器对它们进行分类。创建一个新的维度并用这个平面来分割红点和绿点,如图1.26所示。


现在使用一个新的维度将红点和绿点分开。这种技术被称为核函数(Kernel Trick)

真实的数据非常复杂,而且有很多维度。带有支持向量机分类器的核函数可以用来解决这些复杂的问题。

现在来看另一个问题。如图1.27所示,有一家杂货店A2A。他们提供电话送货服务,每当接到电话时,他们就会将地址发送给派送员,派送员会赶赴送货地点并交付商品。他们设法将办公室设在城市的中心,以便为越来越多的人及时提供服务。


这里的点代表A2A的服务需求。现在他们意识到,这种一个配送中心处理所有的需求的做法并不明智。于是,他们决定在城市中开设4个配送中心,依照不同地区来接受需求并提供服务。

因此,为了解决这个问题,首先可以随机地添加4个配送中心并给予其商品派送需求,如图1.28所示。


显然,这不是配送中心的最佳分配位置。接下来,将每个点移动到分类点的中心。然后,将所有点分类到最近的配送中心,并将配送中心的位置移动到之前的分类中心。经过多次迭代,将得到图1.29所示的分配位置。


因此,每个点的分配都是基于点到中心的距离。这种技术称为K-均值聚类(K-Means Clustering)

也可以使用另一种方法进行聚类。把所有的点看作是独立的集群,而不是首先将它们分组到集群中再对其进行重新分配。然后,将两个最近的点进行分组,形成一个簇。一直这样操作,直到出现较大的距离或者形成最小数量的簇。这种技术称为层聚类(Hierarchical Clustering)

本文摘自《Python机器学习》

《Python机器学习》作者:[印]阿布舍克·维贾亚瓦吉亚ISBN 978-7-115-50135-6/


扫描二维码,一键购买

Python机器学习实用教程,Python 3程序员晋级必备图书,本书提供配套资源可供读者下载。

内容提要

《Python机器学习》通过解释数学原理和展示编程示例对机器学习进行了系统、全面的解析。《Python机器学习》共分为12章,内容涵盖了机器学习以及Python语言的基础知识、特征工程的概念与操作技术、数据可视化技术的实现、监督学习及无监督学习算法、文本分析、神经网络和深度学习、推荐系统的构建方法以及预测处理时间序列的方法等。阅读本书能够加深读者对机器学习的认识和理解,从而达到理论与实践相结合、学以致用的目的。


- END -



异步图书

聊聊图书背后的故事




相关文章:

通过transpose和flip实现图像旋转90/180/270度

在fbc_cv库中,提供了对图像进行任意角度旋转的函数rotate,其实内部也是调用了仿射变换函数warpAffine。如果图像仅是进行90度倍数的旋转,是没有必要用warpAffine函数的。这里通过transpose和flip函数实现对图像进行顺时针90度、180度、270度的…

DIY强大的虚拟化环境-技术可行性部分

【技术可行性部分】大体的cpu支不支持呀,实际效果使用呀,截图效果截图嵌套虚拟化[esxi,xenserver,Hyper-V]嵌套虚拟化:经过各种查资料,和测试验证[只测过intel的,amd的有类似的文章请去下面的资…

C++11中rvalue references的使用

Rvalue references are a feature of C that was added with the C11 standard. The syntax of an rvalue reference is to add && after a type.为了支持移动操作,C11引入了一种新的引用类型----右值引用(rvalue reference)。所谓右值引用就是必须绑定到右…

AIの幕后人:探秘“硬核英雄”的超级武器

作者 | 云计算的阿晶 出品 | AI科技大本营(ID:rgznai100) 掐指一算八年之前,那时正是国内互联网卯足劲头起飞的一年,各行各业表现都很突出,尤其是与人们生活密切相关的手机,正大踏步地从功能机向智能手机转…

PAT乙级1003

1003 我要通过! (20 point(s))“答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于 PAT 的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。 得到“答案…

史上最简洁的UITableView Sections 展示包含NSDicionary 的NSArray

这个最典型的就是电话本,然后根据A-Z分组, 当然很多例子,不过现在发现一个很简洁易懂的: 1. 准备数据,定义一个dictionary来显示所有的内容,这个dictionary对应的value全是数组 也就是: A &…

微软麻将AI Suphx或引入“凤凰房”,与其他AI对打

作者 | 夕颜出品 | AI科技大本营(ID:rgznai100)【导读】在刚刚结束的上海2019世界人工智能大会上,微软宣布了其在人工智能领域的最新研究突破——由微软亚洲研究院研发的麻将 AI 系统 Suphx 在国际知名的专业麻将平台“天凤”上荣升十段&…

C++11中std::function的使用

类模版std::function是一种通用、多态的函数封装。std::function的实例可以对任何可以调用的目标实体进行存储、复制、和调用操作,这些目标实体包括普通函数、Lambda表达式、函数指针、以及其它函数对象等。 通过std::function对C中各种可调用实体(普通函数、Lambd…

django模板的导入

模板导入 前提:多个页面有一个相同的页面版块(多个有样式标签的集合体) 如何运用:可以将多个样式标签的集合进行封装对外提供版块的名字(接口),在有该版块的页面中直接导入即可 语法:{% include 版块页面的路径 %} 四inclusion_tag自定义标签 -- 模板导入 前提:多个页面有一个相…

[UML]UML系列——包图Package

系列文章 [UML]UML系列——用例图Use Case [UML]UML系列——用例图中的各种关系(include、extend) [UML]UML系列——类图Class [UML]UML系列——类图class的关联关系(聚合、组合) [UML]UML系列——类图class的依赖关系 [UML]UML系…

2017-2018 ACM-ICPC German Collegiate Programming Contest (GCPC 2017)

A Drawing Borders 很多构造方法&#xff0c;下图可能是最简单的了 代码&#xff1a; #include<bits/stdc.h> using namespace std; const int maxn1e610; struct Point{ int x,y; }; Point a[maxn]; int numa0; Point b[maxn]; int numb0; vector<pair<double,d…

C++11中std::bind的使用

std::bind函数是用来绑定函数调用的某些参数的。std::bind它可以预先把指定可调用实体的某些参数绑定到已有的变量&#xff0c;产生一个新的可调用实体。它绑定的参数的个数不受限制&#xff0c;绑定的具体哪些参数也不受限制&#xff0c;由用户指定。 std::bind&#xff1a;(…

在图数据上做机器学习,应该从哪个点切入?

作者 | David Mack编译 | ronghuaiyang来源 | AI公园&#xff08;ID:AI_Paradise&#xff09;【导读】很多公司和机构都在使用图数据&#xff0c;想在图上做机器学习但不知从哪里开始做&#xff0c;希望这篇文章给大家一点启发。自从我们在伦敦互联数据中心(Connected Data Lon…

C++11中Lambda表达式的使用

Lambda表达式语法&#xff1a;[capture ] ( params ) mutable exception attribute -> return-type { body } 其中capture为定义外部变量是否可见(捕获)&#xff0c;若为空&#xff0c;则表示不捕获所有外部变量&#xff0c;即所有外部变量均不可访问&#xff0c; 表示所有…

倒计时2天 | 专属技术人的盛会,为你而来!

5G 元年&#xff0c;人工智能 60 年&#xff0c;全球AI市场正发生着巨大的变化&#xff0c;顶尖科技企业和创新力量不断地进行着技术的更迭和应用的推进&#xff0c;专属于 AI 开发者的技术盛宴——2019 AI开发者大会&#xff08;AI ProCon&#xff09;将于 2 天后&#xff08;…

了解大数据的特点、来源与数据呈现方式

作业来源&#xff1a;https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2639 浏览2019春节各种大数据分析报告&#xff0c;例如&#xff1a; 这世间&#xff0c;再无第二个国家有能力承载如此庞大的人流量。http://www.sohu.com/a/290025769_313993春节人口迁徙大数据…

Mysql使用大全 从基础到存储过程

平常习惯了phpmyadmin等其他工具的的朋友有的根本就不会命令&#xff0c;如果让你笔试去面试我看你怎么办&#xff0c;所以&#xff0c;学习一下还是非常有用的&#xff0c;也可以知道你通过GUI工具的时候工具到底做了什么。Mysql用处很广&#xff0c;是php最佳拍档&#xff0c…

GDAL库简介以及在Windows下编译过程

GDAL(Geospatial Data Abstraction Library&#xff0c;地理空间数据抽象库)是一个在X/MIT许可协议下的开源栅格空间数据转换库。官网http://www.gdal.org/index.html&#xff0c;也可参考GitHub https://github.com/OSGeo/gdal&#xff0c;最新release版本为2.1.1. GDAL是一个…

Hexo博客NexT主题美化之评论系统

前言 更多效果展示&#xff0c;请访问我的 个人博客。 效果图&#xff1a; Valine 诞生于2017年8月7日&#xff0c;是一款基于Leancloud的快速、简洁且高效的无后端评论系统。 教程&#xff1a; 登录 Leancloud 官网&#xff0c;注册之后创建一个应用&#xff0c;选择【设置】-…

倒计时1天 | 专属技术人的盛会,为你而来!

5G 元年&#xff0c;人工智能 60 年&#xff0c;全球AI市场正发生着巨大的变化&#xff0c;顶尖科技企业和创新力量不断地进行着技术的更迭和应用的推进&#xff0c;专属于 AI 开发者的技术盛宴——2019 AI开发者大会&#xff08;AI ProCon&#xff09;将于 明天&#xff08;9 …

Selenium 2 WebDriver 多线程 并发

我用的是Selenium2&#xff0c;至于它的背景和历史就不赘述了。Selenium2也叫WebDriver。下面讲个例子&#xff0c;用WebDriverjava来写个自动化测试的程序。&#xff08;如果能用firefox去测试的话&#xff0c;我就直接用Selenium IDE录脚本了。。。&#xff09;有个前提&…

GDAL2.1.1库在Ubuntu14.04下编译时遇到的问题处理方法

不用作任何调整&#xff0c;直接在Linux下编译GDAL2.1.1源码的步骤是&#xff1a;$ ./configure $ make $ make install非常简单&#xff0c; 这样也能正常生成gdal动态库、静态库&#xff0c;如果想将生成的文件放到指定的目录&#xff0c;则需改第一条命令为&#xff1a;$ ./…

刷爆了!这项技术BAT力捧!程序员:我彻底慌了...

人工智能离我们还遥远吗&#xff1f;近日&#xff0c;海底捞斥资1.5亿打造了中国首家火锅无人餐厅&#xff1b;阿里酝酿了两年之久的全球首家无人酒店也正式开始运营&#xff0c;百度无人车彻底量产。李彦宏称&#xff0c;这是中国第一款能够量产的无人驾驶乘用车。而阿里的这家…

redux的compose源码,中文注释

用图片会更清楚一点,注释和代码会分的清楚源码解析参考请参考https://segmentfault.com/a/11...

做好职业规划:做自己的船长

要想在职场上有所斩获&#xff0c;就必须做好职业规划。对于职场中人来说&#xff0c;职业规划是职业发展中最关键的向导。职业规划因人而异&#xff0c;不同的对象有不同的需求&#xff0c;因此制定的目标与计划也不尽相同&#xff0c;但个人为自己做职业规划的方法和流程是大…

GDAL中GDALDataset::RasterIO分块读取的实现

GDALDataset类中的RasterIO函数能够对图像任意指定区域、任意波段的数据按指定数据类型、指定排列方式读入内存和写入文件中&#xff0c;因此可以实现对大影像的分块读、写运算操作。针对特大的影像图像&#xff0c;有时为了减少内存消耗&#xff0c;对图像进行分块读取很有必要…

掌握深度学习,为什么要用PyTorch、TensorFlow框架?

作者 | Martin Heller译者 | 弯月责编 | 屠敏来源 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;【导读】如果你需要深度学习模型&#xff0c;那么 PyTorch 和 TensorFlow 都是不错的选择。并非每个回归或分类问题都需要通过深度学习来解决。甚至可以说&#xff0c;并…

ICANN敦促业界使用DNSSEC,应对DNS劫持攻击

HTTPS加密 可以有效帮助服务器应对DNS欺骗、DNS劫持、ARP攻击等安全威胁。DNS是什么&#xff1f;DNS如何被利用&#xff1f;HTTPS如何防止DNS欺骗&#xff1f; DNS如何工作&#xff1f; 如果您想访问www.example.com&#xff0c;您的浏览器需要找到该特定Web服务器的IP地址。它…

Lucene.net: the main concepts

2019独角兽企业重金招聘Python工程师标准>>> In the previous post you learnt how to get a copy of Lucene.net and where to go in order to look for more information. As you noticed the documentation is far from being complete and easy to read. So in …

einsum,一个函数走天下

作者 | 永远在你身后转载自知乎【导读】einsum 全称 Einstein summation convention&#xff08;爱因斯坦求和约定&#xff09;&#xff0c;又称为爱因斯坦标记法&#xff0c;是爱因斯坦 1916 年提出的一种标记约定&#xff0c;本文主要介绍了einsum 的应用。简单的说&#xff…