【问题标题】:ValueError: Input contains NaN, infinity or a value too large for dtype('float64') using LinearRegressionValueError:输入包含 NaN、无穷大或对于使用 LinearRegression 的 dtype('float64') 而言太大的值
【发布时间】:2018-02-12 21:38:08
【问题描述】:

我正在用 python 练习机器学习。我被困在障碍物上,但我遇到了困难。我使用的数据集是 titanic.csv。我正在尝试使用线性回归计算年龄列缺失值。

training = dftrain[['Age','SibSp','Parch','Fare','Pclass','Sex_female',
                'Sex_male','Embarked_C','Embarked_Q','Embarked_S']]
testing  = dftest[['Age','SibSp','Parch','Fare','Pclass','Sex_female',
               'Sex_male','Embarked_C','Embarked_Q','Embarked_S']]
unify = pd.concat([training, testing])
train = unify[unify['Age'].notnull()]
clf = LinearRegression()
#clf.fit(train.drop(['Age'],axis = 1), train['Age'])
pd.set_option('display.max_rows',None )
train 

我已经手动尝试通过这样做来修复错误,

train[train['Age'].isnull()]

使用上面的代码,我得到没有值的列,表明没有 NaN 值。我对所有列都这样做了。我还检查了使用,

train.notnull().count() 
Age           1046
SibSp         1046
Parch         1046
Fare          1046
Pclass        1046
Sex_female    1046
Sex_male      1046
Embarked_C    1046
Embarked_Q    1046
Embarked_S    1046
dtype: int64    

但是每当我认为一切都很好并且我取消注释 clf.fit() 函数时,我会收到错误

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

请帮助我无法弄清楚我的代码有什么问题。

【问题讨论】:

    标签: python machine-learning


    【解决方案1】:

    我遇到了同样的错误,因为我的数据(在几列中)包含一些非数字值。一旦我做了一些数据整理(用该列的平均值替换空值),它就可以正常工作了。

    mean=df['bedrooms'].mean()
    df['bedrooms'].replace(np.nan,mean, inplace=True)
    

    然后

    features =["floors" ,"bedrooms" ,"sqft" ,"bathrooms"]     
    X = df[features]
    Y = df['price']
    lm = LinearRegression()
    lm.fit(X,Y)
    lm.score(X, Y)
    

    【讨论】:

      【解决方案2】:

      您正在使用 train.notnull().count() :这将返回每列中非 NaN 值的总数。它不会返回 NaN 值的计数。您还可以通过将此数字(在本例中为 1046)与数据集中存在的总行数进行比较来检查这一点。

      使用train.isnull().sum()查找训练数据集中存在的 NaN 值的总数。如果您看到正数,那么您的训练集中就有 NaN 值。

      【讨论】:

        【解决方案3】:

        如果您只想从不包含 NaN 值的“统一”行构建训练集:

        train = unify.dropna()
        

        【讨论】:

        • 是的。我试图这样做。我将进一步解释。在执行 train.isnull.sum() 之后,Fare 列中有一个值为 NaN 的值,此外,我想查看该行,结果发现它有 2 行具有相同的索引,其中一个没有 null,另一个票价中有一个空值。所以我用平均值填充了 NaN 值,后来具有相同索引的两行消失了。不知何故......但它起作用了,所以我猜这很好
        猜你喜欢
        • 2019-10-11
        • 2017-11-23
        • 2019-06-01
        • 2019-03-26
        • 2016-07-31
        • 2020-08-16
        • 2020-05-25
        • 2019-02-17
        • 2020-10-23
        相关资源
        最近更新 更多