怎么使用ColumnTransformer处理Python中不同类型的数据
怎么使用ColumnTransformer处理Python中不同类型的数据,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
当所有输入变量都是同一类型时,应用数据转换(例如缩放或编码分类变量)非常简单。Python机器学习库scikit-learn提供了ColumnTransformer,可选择地将数据转换应用于数据集中的不同列。
工作中常使用的数据转换有很多,比如SimpleImputer类可用于替换缺少的值,MinMaxScaler类可用于缩放数值,而OneHotEncoder可用于编码分类变量。
...# prepare transformscaler = MinMaxScaler()# fit transform on training datascaler.fit(train_X)# transform training datatrain_X = scaler.transform(train_X)
如何使用ColumnTransformer?
ColumnTransformer在Python的机器学习库scikit-learn中,可以选择地进行数据转换。例如,它允许将特定的转换或转换序列仅应用于数字列,而将单独的转换序列仅应用于类别列。
要使用ColumnTransformer,必须指定一个转换器列表。每个转换器是一个三元素元组,用于定义转换器的名称,要应用的转换以及要应用于其的列索引,例如:(名称,对象,列)。
例如,下面的ColumnTransformer将OneHotEncoder应用于列0和1。
transformer = ColumnTransformer(transformers=[('cat', OneHotEncoder(), [0, 1])])
下面的示例对数字列0和1应用具有中值插补的SimpleImputer,对分类列2和3应用最频繁插补的SimpleImputer。
t = [('num', SimpleImputer(strategy='median'), [0, 1]), ('cat', SimpleImputer(strategy='most_frequent'), [2, 3])]transformer = ColumnTransformer(transformers=t)
例如,如果第0列和第1列是数字列,而第2列和第3列是分类列,而我们只想转换分类数据并不改变数字列,则可以按以下方式定义ColumnTransformer:
transformer = ColumnTransformer(transformers=[('cat', OneHotEncoder(), [2, 3])], remainder='passthrough')
ColumnTransformer也可以在管道中使用,以在将模型拟合到转换后的数据之前选择性地准备数据集的列。这是最可能的用例,因为它可以确保在拟合模型和进行预测时,例如在通过交叉验证对测试数据集上的模型进行评估或对新数据进行预测时,对原始数据自动执行转换。
...# define modelmodel = LogisticRegression()# define transformtransformer = ColumnTransformer(transformers=[('cat', OneHotEncoder(), [0, 1])])# define pipelinepipeline = Pipeline(steps=[('t', transformer), ('m',model)])# fit the model on the transformed datamodel.fit(train_X, train_y)# make predictionsyhat = model.predict(test_X)
看完上述内容,你们掌握怎么使用ColumnTransformer处理Python中不同类型的数据的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!