ML 模型无法估算值
Posted
技术标签:
【中文标题】ML 模型无法估算值【英文标题】:ML model is failing to impute values 【发布时间】:2021-02-08 19:56:05 【问题描述】:我尝试创建一个机器学习模型来进行一些预测,但我一直遇到一个绊脚石。即,代码似乎忽略了我给它的插补指令,导致以下错误:
ValueError: Input contains NaN, infinity or a value too large for dtype('float64').
这是我的代码:
import pandas as pd
import numpy as np
from sklearn.ensemble import AdaBoostRegressor
from category_encoders import CatBoostEncoder
from sklearn.compose import make_column_transformer
from sklearn.preprocessing import OneHotEncoder, StandardScaler
from sklearn.pipeline import make_pipeline
from sklearn.impute import SimpleImputer
data = pd.read_csv("data.csv",index_col=("Unnamed: 0"))
y = data.Installs
x = data.drop("Installs",axis=1)
strat = ["mean","median","most_frequent","constant"]
num_imp = SimpleImputer(strategy=strat[0])
obj_imp = SimpleImputer(strategy=strat[2])
# Set up the scaler
sc = StandardScaler()
# Set up Encoders
cb = CatBoostEncoder()
oh = OneHotEncoder(sparse=True)
# Set up columns
obj = list(x.select_dtypes(include="object"))
num = list(x.select_dtypes(exclude="object"))
cb_col = [i for i in obj if len(x[i].unique())>30]
oh_col = [i for i in obj if len(x[i].unique())<10]
# First Pipeline
imp = make_pipeline((num_imp))
enc_cb = make_pipeline((obj_imp),(cb))
enc_oh = make_pipeline((obj_imp),(oh))
# Col Transformation
col = make_column_transformer((imp,num),
(sc,num),
(enc_oh,oh_col),
(enc_cb,cb_col))
model = AdaBoostRegressor(random_state=(0))
run = make_pipeline((col),(model))
run.fit(x,y)
这是代码中用于复制目的的数据的link。你能说出什么是错的吗?感谢您的宝贵时间。
【问题讨论】:
请提供错误回溯:它可以帮助您找到错误的来源。 【参考方案1】:如果您检查数据集,则会在某些字段中存在 Nan 值,例如 Rating 字段。这解释了输入错误。处理丢失的数据取决于您,并且有许多方法可以处理丢失的数据。您可以咨询this pandas doc,帮助您处理此类缺失数据。
【讨论】:
感谢您抽出宝贵时间回复。是的,我知道有缺失值。让我感到困惑的是,尽管我在代码中使用了插补,但为什么它们仍然存在。【参考方案2】:您的数字缩放转换器可能是一个抱怨:在应用StandardScaler
之前您没有估算。可能你想要这样的东西:
imp_sc = make_pipeline((num_imp),(sc))
# Col Transformation
col = make_column_transformer((imp_sc,num),
(enc_oh,oh_col),
(enc_cb,cb_col))
【讨论】:
以上是关于ML 模型无法估算值的主要内容,如果未能解决你的问题,请参考以下文章
无法在 Azure Function Python3 中添加 ML 模型
Pyspark ml 无法拟合模型并且总是“AttributeError:'PipelinedRDD' 对象没有属性'_jdf'