当前位置: 首页 > 科技观察

金钱能让人更快乐吗?通过机器学习寻找答案的分步指南

时间:2023-03-19 19:38:09 科技观察

对机器学习系统进行分类的一种方法是查看它们的泛化能力。大多数机器学习任务都是关于做出预测的。这意味着需要为系统提供训练示例,以便对它以前没有见过的示例进行预测(概括)。在训练数据上实现良好的性能指标很重要,但还不够。真正的目的是在新的对象实例上表现良好。有两种主要的泛化方法:基于实例的学习和基于模型的学习。1.基于实例的学习我们最常用的学习方法就是死记硬背。如果您以这种方式创建垃圾邮件过滤器,它可能只会标记与已被用户标记为垃圾邮件的完全相同的邮件——这不是最坏的解决方案,但肯定也不是最好的。除了相同之外,您还可以对系统进行编程以标记与已知垃圾邮件非常相似的电子邮件。这里需要两封电子邮件之间的相似性度量。相似性的(基本)度量是计算它们之间相同的单词数。如果一条新消息与已知的垃圾邮件有很多相同的词,系统可以将其标记为垃圾邮件。这被称为基于实例的学习:系统记住这些示例,然后通过使用相似性度量将它们与已经学习的实例(或它们的子集)进行比较来泛化到新实例。例如,图1-15中的新实例将被归类为三角形,因为大多数最相似的实例都属于该类别。▲Figure1-15:Instance-basedlearning2.Model-basedlearning另一种从一组例子中概括的方法是建立这些例子的模型,然后使用该模型进行预测。这称为基于模型的学习(见图1-16)。▲图1-16:Model-BasedLearning例如,假设你想知道金钱是否让人快乐,你可以从OECD网站下载“幸福指数”数据,然后从国际货币基金组织的人均数据中找到统计数据组织(IMF)网站上的GDP,将数据合并成一个表,按人均GDP排序,你会得到如表1-1所示的汇总。表1-1:钱能让人更快乐吗?让我们绘制这些国家/地区的数据(见图1-17)。▲图1-17:趋势图这里好像有趋势!虽然数据中含有噪声(即部分随机),但仍然可以看出,随着国家人均GDP的增长,生活满意度或多或少呈线性上升趋势。因此,您可以将生活满意度建模为人均GDP的线性函数。这个过程称为模型选择。您为生活满意度选择一个线性模型,该模型具有单一属性,即人均GDP(请参见公式1-1)。公式1-1:一个简单的线性模型生活满意度=θ0+θ1×人均GDP该模型有两个模型参数:θ0和θ1。通过调整这两个参数,该模型可以用来表示任何线性函数,如图1-18所示。▲图1-18:一些可能的线性模型在使用模型之前,需要定义参数θ0和θ1的值。我们如何知道什么值会使模型表现最佳?要回答这个问题,我们需要确定如何衡量模型的性能。要么定义一个效用函数(或适应度函数)来衡量模型有多好,要么定义一个成本函数来衡量模型有多差。对于线性回归问题,通常的选择是使用成本函数来衡量线性模型的预测与训练示例之间的差距,目标是最小化这种差距。这正是线性回归算法的意义所在:通过你提供的训练样本,找到最适合所提供数据的线性模型的参数,这就是训练模型。在这种情况下,算法找到的最优参数值是θ0=4.85和θ1=4.91×10^(-5)。注意:令人困惑的是,同一个词“模型”可以指代一种类型的模型(例如,线性回归),也可以指代完全特定的模型架构(例如,具有一个输入和一个输出的线性回归),或者最后一个经过训练的模型可以用于预测(例如具有一个输入和一个输出的线性回归,参数θ0=4.85和θ1=4.91×10^(-5))。模型选择涉及选择模型类型并完全指定其体系结构。训练模型意味着运行一种算法来找到最适合训练数据的模型参数(并希望对新数据做出良好的预测)。现在,(对于线性模型)模型大致接近训练数据,如图1-19所示。▲图1-19:最适合训练数据的线性模型现在终于可以运行模型进行预测了。例如,您想知道塞浦路斯人有多幸福,但经合组织的数据没有提供答案。幸运的是,你有这个模型可以做预测:先查一下塞浦路斯的人均GDP,发现是22587美元,然后套用到模型上,发现生活满意度大约是4.85+22587×4.91×10^(-5)=5.96。为了激发您的胃口,示例1-1是一段Python代码,用于加载数据、准备数据、创建散点图可视化,然后训练线性模型并进行预测。示例1-1:使用Scikit-Learn训练和运行线性模型',',delimiter='\t',encoding='latin1',na_values="n/a")#Preparethedatacountry_stats=prepare_country_stats(oecd_bli,gdp_per_capita)X=np.c_[country_stats["GDPpercapita"]]y=np.c_[country_stats["Lifesatisfaction"]]#可视化数据.fit(X,y)#MakeapredictionforCyprusX_new=[[22587]]#塞浦路斯的GDPpercapitaprint(model.predict(X_new))#outputs[[5.96242338]]如果你使用基于实例的学习算法,你会发现斯洛文尼亚的GDP人均最接近塞浦路斯(20,732美元),经合组织数据告诉我们,斯洛文尼亚人的生活满意度为5.7,因此您可能会预计塞浦路斯的生活满意度为5.7。如果你缩小一点,看看最接近的两个国家——葡萄牙和西班牙——生活满意度分别为5.1和6.5。取这三个值的平均值为5.77,这也非常接近基于模型预测的值。这个简单的算法称为k最近邻回归(在本例中,k=3)。将之前代码中的线性回归模型替换为k近邻回归模型非常简单,只需将下面这行代码:importsklearn.linear_model=sklearn.linear_model.LinearRegression()替换为:importsklearn.neighborsmodel=sklearn.neighbors.KNeighborsRegressor(n_neighbors=3)如果一切顺利,您的模型将做出很好的预测。如果不是,则需要使用更多属性(如就业率、健康、空气污染等),获取更多或更高质量的训练数据,或者选择更强大的模型(如多项回归模型)。简而言之:研究数据。选择一个模型。使用训练数据进行训练(即之前的学习算法搜索模型参数值使得成本函数最小化的过程)。最后,应用该模型对新示例进行预测(称为推理),希望该模型能够很好地泛化。以上是一个典型的机器学习项目。