python-机器学习(课程记录一)

本文介绍了机器学习的基本概念和常见问题,强调了泛化能力、过拟合、特征工程和数据的重要性。文章指出,表示、评价和优化是机器学习的三大核心,表示选择应易于表达领域知识,评价则需平衡偏置和方差,优化涉及算法的效率和稳定性。过拟合是机器学习中的挑战,可通过正则化、交叉验证等方法缓解。特征工程是关键,更多数据通常优于更复杂的算法。最后,作者讨论了模型集成、简单性与准确性的关系,以及相关性与因果性的区别,提倡在实践中应用机器学习的民间智慧。
摘要由CSDN通过智能技术生成

第一节课

阅读文献《A Few Useful Things to Know About Machine Learning


转自这篇
【原题】A Few Useful Things to Know About Machine Learning

【译题】机器学习的那些事

【作者】Pedro Domingos

【译者】刘知远

【说明】译文载于《中国计算机学会通讯》 第 8 卷 第 11 期 2012 年 11 月 ,本文译自Communications of the ACM 2012年第10期的“A Few Useful Things to Know About Machine Learning”一文。

机器学习系统自动地从数据中学习程序。与手工编程相比,这非常吸引人。在过去的20年中,机器学习已经迅速地在计算机科学等领域普及。机器学习被用于网络搜索、垃圾邮件过滤、推荐系统、广告投放、信用评价、欺诈检测、股票交易和药物设计等应用。

麦肯锡全球研究院(the McKinsey Global Institute)最近一份报告指出,机器学习(又称数据挖掘或者预测分析)将驱动下一轮创新【15】。现在已经有几本优秀的机器学习教材书可以供感兴趣的研究者和实践者使用(例如米切尔(Mitchell)和维滕(Witten)等人的教材【16,24】)。但是,成功使用机器学习所应掌握的大量“民间知识”并没有出现在这些教材中。因此,很多机器学习项目浪费了大量时间,甚深入了解所需的“民间知识”可推进机器学习的应用。至最终也没有得到理想的结果。其实这些“民间知识”非常容易理解。本文的目的就是介绍这些知识。

机器学习有许多不同的类型,但为了展示方便,本文将主要介绍其中最常用的类型:分类。但是,本文所探讨的问题适用于所有的机器学习类型。一个分类器(classifier)是一个系统,系统输入是一个包括若干离散或连续的特征值(feature values)的向量,系统输出是一个离散值,代表分类的类别(class)。例如,一个垃圾邮件过滤器会将邮件信息分类到“是垃圾邮件”和“不是垃圾邮件”两个类别中。它的输入可以是一个布尔向量 x=(x1,…,xj,…,xd) ,其中如果词典中的第 j 个词出现在该邮件中,则 xj=1,否则 xj=0 。一个学习器将一个训练集(trainingset)样例 (xi,yi) 作为输入,其中xi=(xi,1,…,xi,d) 是观察到的输入,yi 是相应的输出,学习器的输出是一个分类器。对学习器的检验就是判断它输出的分类器是否能够对将来的输入样例 xt 输出正确的 yt(例如,垃圾邮件过滤器是否能够将训练时没有见过的邮件信息正确分类)。

学习=表示 + 评价+ 优化

假设有一个应用,你认为机器学习有可能在其中发挥作用。那么,你面临的第一个问题是各种机器学习算法令人眼花缭乱。应挑选使用哪一个?现在有成千上万的机器学习算法,每年还有成百上千的新算法发表出来。免迷失在这么多算法中的关键是,要认识到这些算法都是由三个部分组成的,分别是:

表示(Representation) 

一个分类器必须用计算机可以处理的某种形式语言来表示。反过来讲,为学习器选择一种表示,就意味选择一个特定的分类器集合。学习器可能学出的分类器只能在这个集合中。这个集合被称为学习器的假设空间(hypothesis space)。如果某个分类器不在该空间中,它就不可能被该学习器学到。与此相关的一个问题是如何表示输入,即使用哪些特征,本文稍后介绍。

评价(Evaluation)

我们需要一个评价函数(亦称为目标函数或打分函数)来判断分类器的优劣。机器学习算法内部使用的评价函数和我们希望分类器进行优化的外部评价函数有所不同。这是为了便于优化,接下来会讨论。

优化(Optimization)

最后,我们需要一个搜索方法,能够在假设空间中找到评价函数得分最高的那个分类器。优化技术的选择对学习器效率至关重要;而当评价函数有多个最优结果时,优化技术也有助于从中选择。初学者通常会采用现成的优化方法,之后再用定制专门的优化方法来替代。表 1 展示了三个组成部分常见的例子。例如,对一个测试样例, k-近邻方法会寻找它的 k 个最相似的训练样例,并将这些样例中出现最多的类别作为该测试样例的类别。超平面方法会为每一个类别构造一个特征的线性组合,并将得分最高的组合所对应的类别作为预测结果。决策树方法会在树上的每个内部节点测试一个特征,每个特征值会对应一个分支,而不同的叶子节点会对应不同的类别。算法 1 展示了一个极简单的二分类决策树学习器,其中使用了信息增益(informationgain)和贪心搜索(greedysearch)【20】。InfoGain(xj,y ) 表示特征 xj 与类别 y 之间的互信息(mutualinformation)。 MakeNode(x,c0,c1 ) 会返回一个测试特征 x 的节点,该节点以 c0 作为 x

= 0 时的孩子节点,以 c1 作为 x
= 1 时的孩子节点。

机器学习

机器学习

当然,并不是表 1 中从各列选出元素的相互组合都同样有意义。例如,离散表示很自然地与组合优化相结合;而连续表示则与连续优化相结合。然而,很多学习器同时包含离散和连续的部分。实际上,所有可能的组合也都快被实现过了。

大部分教科书是以表示为视角组织内容的。这通常会让人忽略掉一个事实,即其他部分也同样重要。虽然对如何在每个部分做出选择并没有简单的秘诀,但本文将涉及其中几个重要的问题。正如我们以后会看到的那样,机器学习项目中的某些选择甚至比学习器的选择更加重要。

泛化(Generalization)很重要

机器学习的基本目标是对训练集合中样例的泛化。这是因为,不管我们有多少训练数据,在测试阶段这些数据都不太可能会重复出现。(注意,如果在词典中有 100000个词,前述垃圾邮件过滤器将会有种 2100000 种可能的不同输入)。

在训练集上表现出色其实很简单(只要记住这些训练样例即可)。机器学习初学者最常犯的错误是在训练数据上做测试,从而产生胜利的错觉。如果这时将选中的分类器在新数据上测试,它往往还不如随机猜测准确。因此,如果你雇人来训练分类器,一定要自己保存一些数据,来测试他们给你的分类器的性能。相反,如果你被人雇来训练分类器,一开始就应该将一部分数据取出来,只用它们来测试你选择的分类器性能,接下来再在整个数据上学习你最终的分类器。

你的分类器可能会在不知不觉中受到测试数据的影响,例如你可能会使用测试数据来调节参数并做了很多调节(机器学习算法有很多参数,算法成功往往源自对这些参数的精细调节,因此这是非常值得关注的问题)。当然,保留一部分数据用于测试会减少训练数据的数量。这个问题可以通过交叉验证(cross – validation)来解决:将训练数据随机地等分为若干份(如 10份),其中的每一份均可用作测试,而剩下的数据用作训练,然后将每个学习的分类器在它没见过的样例上进行测试,将测试结果取平均后,就可用来评价不同参数设置的性能。

仅有数据还不够

将泛化作为目标带来的另外一个重要结果是,仅有数据还不够,无论你有多少。考虑要从100万样例中学习一个包含 100个变量的布尔函数。此时将有2100 – 106 个样例的类别是不知道的(注:这里2100 表示 100个布尔变量的所有可能情况的个数,而106表示已经看到的100万样例,因此有 2100 -106 个可能情况是没有看到过的,因此也不知道它们的类别)。你如何确定那些样例的类别呢?在没有更进一步信息的情况下,除了抛硬币随机猜之外将束手无策。哲学家大卫 ·休谟(David Hume)在 200多年前首次指出这一问题(以某种不同的形式),但直到今天机器学习中的很多错误仍是由于没有意识到这一问题造成的。每个学习器都必须包含一些数据之外的知识或假设(assumption),才能够将数据泛化。这一概念被沃尔伯特(Wolpert)形式化为

### 回答1: 好的,以下是一个简单的 Python 实例,演示了如何输出 "Hello World!" 以及如何使用变量和函数: ``` # 输出 "Hello World!" print("Hello World!") # 定义一个变量 message = "Hello World!" # 输出变量的值 print(message) # 定义一个函数 def greet(name): print("Hello, " + name + "!") # 调用函数 greet("John") ``` 这个简单的示例演示了如何输出文本、定义变量、使用变量以及定义和调用函数。希望这能够帮助你开始学习 Python 编程! ### 回答2: 实践记录Python课程 第一节课:入门介绍 在本课中,我们学习了Python编程语言的基本概念和用途。我了解到Python是一种简单易学的高级编程语言,被广泛用于数据分析、机器学习等领域。在课程中,我们首先安装了Python的开发环境,并学习了如何运行第一个简单的Python程序。通过这个实践活动,我对Python的工作流程和开发环境有了更深入的理解。 第二节课:变量与数据类型 本节课我们深入研究了Python中的变量和数据类型。我们通过实践活动学习了如何声明和使用变量,并探索了Python中的不同数据类型,如整数、浮点数、字符串和布尔值。通过这个实践活动,我掌握了Python中数据类型之间的转换和操作,使我能够处理不同类型的数据。 第三节课:条件语句与循环结构 在这一节课中,我们学习了条件语句和循环结构的基本概念和用法。我掌握了Python中的if-else语句以及for和while循环的使用方法。通过实践活动,我成功编写了几个程序来解决特定的问题,如判断一个数字是否为质数,或者计算一个数列的前n项和。这些实践活动使我对条件语句和循环结构有了更深入的理解。 第四节课:函数和模块 这节课我们学习了函数和模块的概念和用法。我了解到函数可以重用代码并提高程序的可读性和可维护性。我们学习了如何定义和调用函数,以及如何将函数分组为模块以供其他程序使用。通过实践活动,我成功编写了几个函数来解决不同的问题,并将它们组织为一个模块。这些实践活动使我对函数和模块的使用和设计更加熟悉。 第五节课:文件操作与异常处理 在最后一节课中,我们学习了文件操作和异常处理的基本概念。通过实践活动,我学会了如何打开、读取和写入文件,并掌握了异常处理的方法。我还学习了如何使用try-except语句来捕获和处理程序运行中的错误。这些实践活动使我能够更好地处理文件和异常,提高程序的稳定性和可靠性。 通过这门Python课程的实践活动,我不仅掌握了Python编程语言的基本知识和技能,还培养了解决问题的思维和编程能力。我相信这些知识和技能将对我未来的学习和职业发展产生积极影响。 ### 回答3: 实践记录: 在这门Python课程中,我学习了许多有关Python编程的知识和技巧。以下是我在课程中进行的实践记录: 1. 第一个实践项目是一个简单的计算器程序。我学会了如何使用Python编写基本的算术运算和控制流程,如if语句和循环。我创建了一个具有用户界面的程序,允许用户输入两个数字并选择要执行的操作,然后输出结果。 2. 接下来,我进行了一个名为“猜数字”的游戏项目。通过这个项目,我学会了如何使用随机数模块和条件语句来生成一个随机的数字,并通过比较用户输入和生成的数字来判断猜测是否正确。我还添加了计数器来追踪用户尝试猜测的次数,以及一些提示来帮助用户。 3. 在课程的后期,我进行了一个实践项目,用Python编写了一个简单的网站爬虫。我学习了如何使用第三方库BeautifulSoup和Requests来获取网页内容,并从中提取有用的信息。使用这个爬虫,我尝试了从某个网站上获取电影评分数据,然后将结果保存到一个文件中。 4. 为了提高我的数据分析能力,我进行了一个实践项目,使用Pandas库来处理和分析大量的数据。我学会了如何读取和写入不同格式的数据文件,如CSV和Excel。我使用Pandas对一个销售数据文件进行了清洗、筛选和统计,然后生成了一份报告。 通过这些实践项目,我不仅学到了很多关于Python编程的知识,还提高了问题解决和数据分析的技能。我相信这些实践经验会对我的职业发展和日常生活产生积极的影响。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值