标签:机器学习,Python
本文将以对初学者友好的方式讨论几个关键的机器学习概念,希望能让你在不深入技术细节的情况下对机器学习有一个基本的了解。
什么是机器学习(ML)
传统的软件由程序员编写的明确指令和规则组成。例如,如果满足条件1,则执行此操作,满足条件2,则执行彼操作,等等。然而,对于复杂问题,人类程序员无法捕获所有场景并将每个规则写入代码。
机器学习是一项结合了计算机科学和统计学的研究。机器学习模型可以通过使用统计方法从数据中推断结论,从示例中学习,而不是向计算机发送数千条人工编码的指令。换句话说,ML算法可以从已知示例中进行推论。用外行的话说,ML算法可以检查已知数据并找出模式,然后将学习到的模式应用于未知数据,再进行预测。
你使用你的指纹或脸来解锁你的智能手机吗?这是一个机器学习项目。我们的智能手机不需要在各个角度或不同设置下拍摄数千张我们自己的照片,它只需要几张照片,然后在大多数情况下就能认出我们的脸。
你会向Siri询问天气、时间或搜索结果吗?这也是可以识别人类语音的机器学习。每个人都有不同的声音、口音、音调等。然而,在大多数情况下,这些设备可以理解人类语言。
经常在淘宝、拼多多上购物吗?为什么每次购物后我们都会发现其他感兴趣的东西?多亏了推荐系统(也是一种ML算法),它知道我们最感兴趣的物品。
机器学习方法的类型
有两种主要的机器学习方法:有监督的和无监督的。
有监督学习
我们的目标是预测与每个输入变量相关的一些输出变量。例如,信用卡交易是否具有欺诈性,或者某个街区的房价。
监督学习需要有一个标记的(labeled)数据集,标签(label)指的是输出变量。在下面所示的信用卡示例中,输入数据是时间、位置、金额、门店以及是否是在线订单,输出或标签是指交易是否欺诈。
图1
对于分类问题,输出是一个类别(通常是有限数量的可能结果)。例如,信用卡交易是否具有欺诈性(二分类的一个示例),或者,是否水果是苹果、橘子或桃子。解决此问题的函数称为分类器(classifier)。
对于回归,输出通常是一个值或数字,就像上海的房价一样,或者明天的温度。我们把解决此问题的函数称为回归函数(regression function)。
下面,让我们看一下使用上述样本数据集描述数据时使用的一些常用术语。
输入(Input)/自(Independent)/特征(Features)变量
通常,输入变量也称为自变量(independent)或特征(features)。在我们的代码中,通常使用变量名X来表示输入变量,这通常是一个数据点表。每一列都是数据集的一个特征,每一行都是一个数据样本或观察值。
图2
输出(Output)/目标(Target)变量
输出变量(或标签)通常称为因变量(dependent)或目标变量(target)。在我们的代码中,通常使用变量y来表示目标变量。标签通常来自人工输入。如你所见,在某些情况下,生成这些标签可能是一项劳动密集型任务。例如,特斯拉使用人工为汽车拍摄的图像和视频添加标签——道路、车道标记、行人、汽车、停车标志等。这是人类通过提供标签来“监督”学习算法的部分。
机器学习模型将检查输入变量X和目标变量y之间的关系。我们的目标是学习某种函数,可以将输入变量X(特征)中的每一行映射到目标变量y中的一个标签。学习该函数后,我们可以给程序一组不同的X来预测y。
这里有几个初学者友好的(有监督的)机器学习算法示例:线性回归、k近邻、决策树等。这些算法可以是回归或分类。
无监督学习
对于无监督学习,通常我们只有输入数据X,没有任何标签。对于这类问题,通常希望检查输入数据,并尝试从中找到有用的聚类或分组。
图3
例如,YouTube算法可能会根据观看活动将用户分为不同的分组——喜欢看金融新闻的人、喜欢看编程教程的人或喜欢看有趣视频的人等等。一旦YouTube算法将我们放入一个集群,它将继续向我们推荐相关视频。这就是为什么我们经常发现YouTube推荐的视频很符合我们的口味。
我们在监督学习中讨论的所有事情也适用于无监督学习,除了无监督学习问题通常没有目标变量。
一些初学者友好的(无监督的)机器学习算法示例有k-means聚类、主成分分析等。
面向初学者的高级机器学习工作流
下面概述了高级机器学习工作流,将从定义想要解决的问题开始。
1.我们想解决什么问题?是回归还是分类?什么算法合适?
2.我们有足够的数据吗?如果没有,我们可以从其他来源或现有数据中获得数据吗?这被称为特征工程(feature engineering)。
3.将数据集分成两部分,通常是75%/25%的分割。其中一个子数据集称为训练集(75%),另一个子数据集称为测试集(25%)。
4.我们将使用训练集(training set)通过建立具有一些初始参数的模型来学习特征和目标变量之间的关系(函数)。
5.然后使用测试集(test set)来衡量模型预测的效果。记住,在测试集中,我们也有标签,因此我们可以衡量有多少预测是正确的。
6.通常,第一个模型的性能(例如准确性)并不好。现在,我们需要考虑我们在步骤1中选择的算法是否合适。如果我们需要使用不同的算法,我们必须重复步骤2-5。
7.一旦我们对算法满意,需要微调参数以提高性能。用一组不同的参数重复步骤4-5,直到我们对预测性能满意为止。
注:本文学习整理自pythoninoffice.com,供有兴趣的朋友学习参考。