机器学习中的 Transformation Pipelines(Machine Learning 研习之十)

这篇具有很好参考价值的文章主要介绍了机器学习中的 Transformation Pipelines(Machine Learning 研习之十)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Transformation Pipelines

有许多数据转换步骤需要以正确的顺序执行。幸运的是,Scikit-Learn提供了Pipeline类来帮助处理这样的转换序列。下面是一个用于数值属性的小管道,它首先对输入特性进行归并,然后对输入特性进行缩放:

from sklearn.pipeline import Pipeline
num_pipeline = Pipeline([
("impute", SimpleImputer(strategy="median")),
("standardize", StandardScaler()),
])

Pipeline构造函数采用名称/估算器对(2元组)的列表,定义了一系列步骤。名称可以是您喜欢的任何名称,只要它们是唯一的,并且不包含双下划线(__)。以后我们讨论超参数调优时,它们会很有用。估计器必须都是转换器(即,它们必须有一个fit_transform()方法),除了最后一个,它可以是任何东西:转换器、预测器或任何其他类型的估计器。

如果你不想命名transformers,你可以使用 make_pipeline() 函数; 它将transformers作为位置参数,并使用transformers类的名称(小写且不带下划线)创建管道(例如,“simpleimputer”):

from sklearn.pipeline import make_pipeline
num_pipeline = make_pipeline(SimpleImputer(strategy="median"), StandardScaler())

如果多个transformers具有相同的名称,则会在其名称后附加索引(例如“foo-1”、“foo-2”等)。

当您调用管道的 fit() 方法时,它会在所有transformers上顺序调用 fit_transform(),将每个调用的输出作为参数传递给下一个调用,直到到达最终估计器,为此它只调用 fit() 方法。

该管道公开与最终估计器相同的方法。 在此示例中,最后一个估计器是 StandardScaler,它是一个transformers,因此管道也充当transformers。 如果您调用管道的transform()方法,它将按顺序将所有转换应用于数据。 如果最后一个估计器是预测器而不是变换器,那么管道将具有 Predict() 方法而不是 Transform() 方法。 调用它会按顺序将所有转换应用于数据并将结果传递给预测器的 Predict()方法

让我们调用管道的 fit_transform() 方法并查看输出的前两行,四舍五入到小数点后两位:
机器学习中的 Transformation Pipelines(Machine Learning 研习之十),人工智能(AI),机器学习,人工智能,transform,管道,算法,转换管道,AI
如前所述,如果要恢复一个漂亮的DataFrame,可以使用管道的get_feature_names_
out()方法:

df_housing_num_prepared = pd.DataFrame(
housing_num_prepared, columns=num_pipeline.get_feature_names_out(),
index=housing_num.index)

管道支持索引;例如,管道[1]返回管道中的第二个估计值,管道[:-1]返回一个包含除最后一个估计值以外的所有估计值的管道对象。您还可以通过steps属性(它是名称/估算器对的列表)或named_steps字典属性(它将名称映射到估算器)访问估算器。例如,num_line[“
simpleimputer”]返回名为“simpleimputer”的估计器。

到目前为止,我们已经分别处理了分类列和数值列。如果有一个能够处理所有列的转换器,将适当的转换应用到每一列,那会更方便。为此,您可以使用olumnTransformer。例如,下面的ColumnTransformer将把num_pipeline(我们刚刚定义的那个)应用于数字属性,把cat_pipeline应用于类别属性:

from sklearn.compose import ColumnTransformer

num_attribs = ["longitude", "latitude", "housing_median_age", "total_rooms",
"total_bedrooms", "population", "households", "median_income"]
cat_attribs = ["ocean_proximity"]

cat_pipeline = make_pipeline(
SimpleImputer(strategy="most_frequent"),
OneHotEncoder(handle_unknown="ignore"))

preprocessing = ColumnTransformer([
("num", num_pipeline, num_attribs),
("cat", cat_pipeline, cat_attribs),
])

首先导入ColumnTransformer类,然后定义数字和分类列名的列表,并为分类属性构造一个简单的管道。最后,我们构造了一个列变换器。它的构造函数需要一个三元组(3-tuple)列表,每个三元组包含一个名称(必须是唯一的且不包含双下划线)、一个转换器和一个应该应用转换器的列的名称(或索引)列表。

由于列出所有的列名不是很方便,Scikit-Learn提供了一个make_column_selector()函数,该函数返回一个选择器函数,您可以使用它来自动选择给定类型的所有特性,例如数值型或类别型。可以将此选择器函数传递给ColumnTransformer,而不是传递给列名或索引。此外,如果您不关心命名转换器,可以使用make_column_transformer(),它为
您选择名称,就像make_pipeline()一样。例如,下面的代码创建了与前面相同的ColumnTransformer,只是转换器自动命名为“pipline-1”和“pipline-2”,而不是“num”和“cat”:

from sklearn.compose import make_column_selector, make_column_transformer

preprocessing = make_column_transformer(
(num_pipeline, make_column_selector(dtype_include=np.number)),
(cat_pipeline, make_column_selector(dtype_include=object)),
)

现在我们准备将此ColumnTransformer应用到住房数据:

housing_prepared = preprocessing.fit_transform(housing)

太好了!我们有一个预处理管道,用于获取整个训练数据集,并将每个转换器应用于适当的列,然后水平连接转换后的列。(变压器绝不能改变行数)。这再次返回一个NumPy数组,但是您可以使用preprocessing.get_feature_names_out()获得列名,并像我们之前所做的那样将数据包装在一个漂亮的DataFrame中。

你的项目进行得非常顺利,你几乎可以训练一些模型了!现在,您希望创建一个单一的管道,它将执行到目前为止您已经试验过的所有转换。让我们回顾一下管道将做什么,为什么:

  • 数值特征中的缺失值将通过用中位数替换它们来填补,因为大多数ML算法不期望缺失值。在分类特征中,缺失值将被最频繁的类别替换。
  • ·分类特征将是一热编码,因为大多数ML算法只接受数字输入。
  • 。一些比率特征将被计算并添加:基岩比率、每栋房屋的容积比率和每栋房屋的人口比率。希望这些将更好地与房屋的中位数价值相关,从而帮助ML模型。
  • 还将添加一些聚类相似性功能。这些可能比纬度和经度对模型更有用。
  • 具有长尾的特征将被替换为它们的对数,因为大多数模型更喜欢具有大致均匀分布或高斯分布的特征。
  • 所有数值特征都将被标准化,因为大多数ML算法喜欢所有特征具有大致相同的比例

构建完成所有这些工作的管道的代码现在应该看起来很熟悉了:

def column_ratio(X):
	return X[:, [0]] / X[:, [1]]
	
def ratio_name(function_transformer, feature_names_in):
	return ["ratio"] # feature names out

def ratio_pipeline():
	return make_pipeline(
		SimpleImputer(strategy="median"),
		FunctionTransformer(column_ratio, feature_names_out=ratio_name),
		StandardScaler())

log_pipeline = make_pipeline(
	SimpleImputer(strategy="median"),
	FunctionTransformer(np.log, feature_names_out="one-to-one"),
	StandardScaler())
cluster_simil = ClusterSimilarity(n_clusters=10, gamma=1., random_state=42)
default_num_pipeline = make_pipeline(SimpleImputer(strategy="median"),
											StandardScaler())

preprocessing = ColumnTransformer([
			("bedrooms", ratio_pipeline(), ["total_bedrooms", "total_rooms"]),
			("rooms_per_house", ratio_pipeline(), ["total_rooms", "households"]),
			("people_per_house", ratio_pipeline(), ["population", "households"]),
			("log", log_pipeline, ["total_bedrooms", "total_rooms", "population",
			"households", "median_income"]),
			("geo", cluster_simil, ["latitude", "longitude"]),
			("cat", cat_pipeline, make_column_selector(dtype_include=object)),
		],
		remainder=default_num_pipeline) # one column remaining: housing_median_age
		

如果运行此ColumnTransformer,它将执行所有转换并输出具有24个特性的NumPy数组:

机器学习中的 Transformation Pipelines(Machine Learning 研习之十),人工智能(AI),机器学习,人工智能,transform,管道,算法,转换管道,AI文章来源地址https://www.toymoban.com/news/detail-764681.html

到了这里,关于机器学习中的 Transformation Pipelines(Machine Learning 研习之十)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 现实生活中机器学习的具体示例(Machine Learning 研习之二)

    机器学习在现实中的示例 通过上一篇的讲解,我们多多少少对 机器学习 (Machine Learning)有了些许了解,同时也对 机器学习 (Machine Learning)一词不再那么抗拒了。 那么, 机器学习 到底在现实生活为我们解决哪些难题呢?亦或是传统方案目前无法实现的。 1、可以分析生产

    2024年02月16日
    浏览(33)
  • 机器学习在网络安全领域的应用 Demystifying Cybersecurity with Machine Learning

    作者:禅与计算机程序设计艺术 什么是机器学习(Machine Learning)?又是如何应用在网络安全领域呢?本文将详细阐述其定义、分类及历史沿革,同时介绍一些机器学习的基本概念和技术,帮助企业界更好地理解和掌握机器学习在网络安全领域的应用。通过相关案例实践,全

    2024年02月06日
    浏览(35)
  • Azure Machine Learning - 聊天机器人构建

    本文介绍如何部署和运行适用于 Python 的企业聊天应用示例。 此示例使用 Python、Azure OpenAI 服务和 Azure AI 搜索中的检索扩充生成(RAG)实现聊天应用,以获取虚构公司员工福利的解答。 关注TechLead,分享AI全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理

    2024年01月19日
    浏览(37)
  • [machine Learning]强化学习

    强化学习和前面提到的几种预测模型都不一样,reinforcement learning更多时候使用在控制一些东西上,在算法的本质上很接近我们曾经学过的DFS求最短路径. 强化学习经常用在一些游戏ai的训练,以及一些比如火星登陆器,月球登陆器等等工程领域,强化学习的内容很简单,本质就是获取

    2024年02月09日
    浏览(31)
  • [Machine Learning] 领域适应和迁移学习

    在机器学习中,我们的目标是找到一个假设或模型,它可以很好地描述或预测数据。当我们基于训练集训练模型时,我们的目的是让模型能够捕获到数据中的主要模式。然而,为了确保模型不仅仅是对训练数据进行记忆,而是真正理解了数据的结构,我们需要在测试集上评估

    2024年02月08日
    浏览(38)
  • Azure Machine Learning - Azure AI 搜索中的矢量搜索

    矢量搜索是一种信息检索方法,它使用内容的数字表示形式来执行搜索方案。 由于内容是数字而不是纯文本,因此搜索引擎会匹配与查询最相似的矢量,而不需要匹配确切的字词。本文简要介绍了 Azure AI 搜索中的矢量支持。 其中还解释了与其他 Azure 服务的集成,以及与矢量

    2024年02月05日
    浏览(48)
  • 【Machine Learning 系列】一文带你详解什么是强化学习(Reinforcement Learning)

    机器学习主要分为三类:有监督学习、无监督学习和强化学习。在本文中,我们将介绍强化学习(Reinforcement Learning)的原理、常见算法和应用领域。 强化学习(Reinforcement Learning)是机器学习中一种重要的学习范式,其目标是通过与环境的交互来学习如何做出最优的决策。 强化

    2024年02月14日
    浏览(37)
  • Azure Machine Learning - Azure AI 搜索中的集成数据分块和嵌入

    在基于索引器的索引编制中,Azure AI _集成矢量化_将数据分块和文本到矢量嵌入添加到技能中,它还为查询添加文本到矢量的转换。 关注TechLead,分享AI全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,

    2024年02月05日
    浏览(32)
  • [Machine Learning][Part 8]神经网络的学习训练过程

    目录 训练过程 一、建立模型: 二、建立损失函数 J(w,b): 三、寻找最小损失函数的(w,b)组合 为什么需要激活函数  激活函数种类 二分法逻辑回归模型 线性回归模型 回归模型 根据需求建立模型,从前面神经网络的结果可以知道,每一层都有若干个模型在运行,因此建立神经网

    2024年02月05日
    浏览(33)
  • (转载)极限学习机(extreme learning machine, ELM)的回归拟合及分类(matlab实现)

            单隐含层前馈神经网络(single-hidden layer feedforward neural network,SLFN)以其良好的学习能力在许多领域中得到了广泛的应用。然而,传统的学习算法(如BP算法等)固有的一些缺点,成为制约其发展的主要瓶颈。前馈神经网络大多采用梯度下降方法,该方法主要存在以下几个

    2024年02月13日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包