gpt4 book ai didi

python - sklearn DictVectorizer(sparse=False) 具有不同的默认值,估算一个常数

转载 作者:太空宇宙 更新时间:2023-11-04 05:23:59 25 4
gpt4 key购买 nike

我正在构建一个以生成稀疏矩阵的 DictVectorizer 开头的管道。指定 sparse=True 会将输出从 scipy 稀疏矩阵更改为 numpy 稠密矩阵,这很好,但管道中的下一阶段会提示 NaN 值,这是我们显而易见的在我的案例中使用 DictVectorizer 的结果。我希望管道将缺少的字典值视为不可用,而是视为零。

据我所知,

Imputer 对我没有帮助,因为我想用一个常量值而不是依赖于列的其他值的统计值来“估算”。

以下是我一直在使用的代码:

vectorize = skl.feature_extraction.DictVectorizer(sparse=False)
variance = skl.feature_selection.VarianceThreshold()
knn = skl.neighbors.KNeighborsClassifier(4, weights='distance', p=1)

pipe = skl.pipeline.Pipeline([('vectorize', vectorize),
# here be dragons ('fillna', ),
('variance', variance),
('knn', knn)])
pipe.fit(dict_data, labels)

还有一些模拟字典:

dict_data = [{'city': 'Dubai', 'temperature': 33., 'assume_zero_when_missing': 7},
{'city': 'London', 'temperature': 12.},
{'city': 'San Fransisco', 'temperature': 18.}]

请注意,在此示例中,大多数词典中都缺少 assume_zero_when_missing,这将导致后来的估算器提示 NaN 值:

ValueError: Input contains NaN, infinity or a value too large for dtype('float64').

虽然我希望的结果是 NaN 值将替换为 0

最佳答案

使用 DF.fillnadictionarieslist 转换为 pandas dataframe 后,您可以用 0 填充 NaN如图:

df = pd.DataFrame(dict_data)
df.fillna(0, inplace=True)

为了将其用作流水线估算器中的步骤,您可以自己编写一个实现 fittransform 方法的自定义类,如下所示:

class FillingNans(object):
'''
Custom function for assembling into the pipeline object
'''
def transform(self, X):
nans_replaced = X.fillna(0)
return nans_replaced

def fit(self, X, y=None):
return self

然后,您可以修改管道中的手动特征选择步骤,如下所示:

pipe = skl.pipeline.Pipeline([('vectorize', vectorize),
('fill_nans', FillingNans()),
('variance', variance),
('knn', knn)])

关于python - sklearn DictVectorizer(sparse=False) 具有不同的默认值,估算一个常数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39437687/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com