- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 scikit-learn
中的加州住房数据集。我想设计两个二元特征:“旧金山 10 公里以内”和“洛杉矶 10 公里以内”。我创建了一个自定义转换器,它自己可以正常工作,但是当我将它放入 ColumnTransformer
时抛出 TypeError
.这是代码:
from math import radians
from sklearn.base import BaseEstimator, TransformerMixin
from sklearn.compose import ColumnTransformer
from sklearn.metrics.pairwise import haversine_distances
from sklearn.datasets import fetch_california_housing
import numpy as np
import pandas as pd
# Import data into DataFrame
data = fetch_california_housing()
X = pd.DataFrame(data['data'], columns=data['feature_names'])
y = data['target']
# Custom transformer for 'Latitude' and 'Longitude' cols
class NearCity(BaseEstimator, TransformerMixin):
def __init__(self, distance=10):
self.la = (34.05, -118.24)
self.sf = (37.77, -122.41)
self.dis = distance
def calc_dist(self, coords_1, coords_2):
coords_1 = [radians(_) for _ in coords_1]
coords_2 = [radians(_) for _ in coords_2]
result = haversine_distances([coords_1, coords_2])[0,-1]
return result * 6_371
def fit(self, X, y=None):
return self
def transform(self, X):
dist_to_sf = np.apply_along_axis(self.calc_dist, 1, X, coords_2=self.sf)
dist_to_sf = (dist_to_sf < self.dis).astype(int)
dist_to_la = np.apply_along_axis(self.calc_dist, 1, X, coords_2=self.la)
dist_to_la = (dist_to_la < self.dis).astype(int)
X_trans = np.column_stack((X, dist_to_sf, dist_to_la))
return X_trans
ct = ColumnTransformer([('near_city', NearCity(), ['Latitude', 'Longitude'])],
remainder='passthrough')
ct.fit_transform(X)
#> /Users/.../anaconda3/envs/data3/lib/python3.7/site-packages/sklearn/base.py:197: FutureWarning: From version 0.24, get_params will raise an AttributeError if a parameter cannot be retrieved as an instance attribute. Previously it would return None.
#> FutureWarning)
#> Traceback (most recent call last):
#> <ipython-input-13-603f6cd4afd3> in transform(self, X)
#> 17 def transform(self, X):
#> 18 dist_to_sf = np.apply_along_axis(self.calc_dist, 1, X, coords_2=self.sf)
#> ---> 19 dist_to_sf = (dist_to_sf < self.dis).astype(int)
#> 20
#> 21 dist_to_la = np.apply_along_axis(self.calc_dist, 1, X, coords_2=self.la)
#> TypeError: '<' not supported between instances of 'float' and 'NoneType'
由 reprexpy package 创建于 2020-04-23
问题是 self.dis
属性不会持续存在。如果我自己实例化转换器,没问题:self.dis = distance = 10
。但在 ColumnTransformer
中,它最终为 NoneType
。奇怪的是,如果我只是在 self.dis = 10
中进行硬编码,它就可以工作。
人们认为发生了什么事?
Session info --------------------------------------------------------------------
Platform: Darwin-18.7.0-x86_64-i386-64bit (64-bit)
Python: 3.7
Date: 2020-04-23
Packages ------------------------------------------------------------------------
numpy==1.18.1
pandas==1.0.1
reprexpy==0.3.0
scikit-learn==0.22.1
最佳答案
原来问题出在sklearn.base
.
deep_items = value.get_params().items()
get_params()
函数查看 init
参数以找出类参数是什么,然后假设它们与内部变量名称相同。
所以我可以通过将我的 init
方法更改为来解决这个问题:
def __init__(self, distance=10):
self.la = (34.05, -118.24)
self.sf = (37.77, -122.41)
self.distance = distance # <-- give same name
非常感谢我的一位同事解决了这个问题!
关于python - 为什么我的 sklearn 自定义转换器在 ColumnTransformer 中使用时不保存属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61394346/
我想用sklearn.compose.ColumnTransformer始终如一(不是并行的,因此,第二个转换器应该只在第一个转换器之后执行)以这种方式交叉列列表: log_transformer =
使用 scikit-learn ColumnTransformer 对 DataFrame 应用转换时,我收到 SettingWithCopyWarning,但我不确定这是为什么。 这是我的代码。 i
我将读取 csv、训练模型和预测请求数据的以下函数放在一起。 我有以下 ValueError:使用剩余关键字时,列顺序必须相等才能适合和转换 训练数据和用于预测的数据具有完全相同的列数,例如 15。我
我正在尝试制作一个处理数字、分类和文本变量的管道。我希望在运行分类器之前将数据输出到新的数据帧。我收到以下错误 ValueError: all the input array dimensions f
我想了解如何在管道中应用逆变换,而不是使用 StandardScaler直接发挥作用。 我正在使用的代码如下: import pandas as pd import numpy as np from
这是我的输入数据: 这是所需的输出,其中对列 r、f 和 m 进行了转换,并将结果附加到原始数据 这是代码: import pandas as pd import numpy as np from s
我正在尝试预处理数据。 data = {'Country':['Germany', 'Turkey', 'England', 'Turkey', 'Germany', 'Turkey'],
我正在尝试使用参数定义自定义转换器,并在 sklearn.compose.ColumnTransformer 中使用它们。我不明白为什么当我在 ColumnTransformer 上运行 fit_tr
我有一个实体,我使用 ColumnTransformer 来绑定(bind)和提取值: @Entity class BPoint { @Id private Integer id;
我想知道是否可以在 ColumnTransformer 中使用 MultilabelBinarizer。 我有一个玩具 Pandas 数据框,例如: df = pd.DataFrame({"id":[
sklearn 中的 FeatureUnion() 和 ColumnTransformer() 有什么区别? 如果我想构建一个包含混合数据类型(分类、数字、非结构化文本)的特征的监督模型,我应该使用哪
我已经定义了适合一个分类特征“性别”的数据: data = pd.DataFrame({ 'age': [25,19, 17], 'sex': ['female', 'male', '
在 ColumnTransformer 中,我想使用 Tfidf 管道。但即使对于这个简单的示例,原始管道的转换输出类型和放入 ColumnTransformer 中的转换输出类型也是非常不同的类型。
这是我的第一个机器学习项目,也是我第一次使用 ColumnTransformer。我的目标是执行两步数据预处理,并为每一步使用 ColumnTransformer。 在第一步中,我想用字符串 'mis
我正在寻求使用 sklearn 的 ColumnTransformer 函数构建数据预处理管道的帮助。 目前我的流水线看起来像这样: from scipy.stats.mstats import wi
我正在关注 Aurelion Geron 的机器学习书籍。 我正在试验 ColumnTransformer 类。当我包含 SimplerImputer 时,会创建一个额外的列。我知道 SimplerI
我想在引用 ColumnTransformer(它是管道的一部分)中包含在 grid_search 的 param_grid 中的单个预处理器时找出正确的命名约定。 环境&样本数据: import s
我正在使用 scikit-learn 中的加州住房数据集。我想设计两个二元特征:“旧金山 10 公里以内”和“洛杉矶 10 公里以内”。我创建了一个自定义转换器,它自己可以正常工作,但是当我将它放入
我目前有一个这样注释的字段: ColumnTransformer( read="AES_DECRYPT(C_first_name, 'yourkey')", w
我通过加载 .pkl 文件来预测分类模型的值。它在我的本地工作,但在 AWS lambda 函数中抛出错误。本地和AWS上的pkl文件是相同的,因此问题不应该出现在pkl文件中。另外,我正确读取了 p
我是一名优秀的程序员,十分优秀!