如何修复“输入包含 NaN、无穷大或对于 dtype ('float64') 来说太大的值。”在计算 MSLE 时
How to fix 'Input contains NaN, infinity or a value too large for dtype('float64').' while calculating the MSLE
在尝试计算均方对数误差时出现以下错误:
ValueError: Input contains NaN, infinity or a value too large for dtype('float64').
计算均方误差不报错。
以下代码可用于重现问题:
from sklearn.datasets import load_boston
dataset = load_boston()
import pandas as pd
df = pd.DataFrame(dataset.data, columns=dataset.feature_names, )
df["MEDV"] = dataset.target
#tried this, no difference
df = df.reset_index()
df.isnull().sum()
#No missing values
df.dtypes
# all float64
cols = ["LSTAT", "RM"]
X = df[cols]#.astype(np.float)
y = df["MEDV"]#.astype(np.float)
from sklearn.linear_model import LinearRegression
slr = LinearRegression()
slr.fit(X, y)
y_pred = slr.predict(X)
np.all(np.isfinite(X))
# true
np.all(np.isfinite(y))
#true
np.all(np.isfinite(y_pred))
#true
from sklearn.metrics import mean_squared_error
mse = mean_squared_error(y, y_pred)
print(mse)
from sklearn.metrics import mean_squared_log_error
# THIS produces the error message:
msle = mean_squared_log_error(y, y_pred)
print(msle)
我做了几个检查:
- 没有缺失值
- 没有无限值
- 数据类型是 float64
我不明白为什么会出现错误。
有人知道我做错了什么吗?
亲切的问候,
夏侯
运行:
y_pred[y_pred<0]
你得到:
array([-4.66638608, -2.08933711])
你知道,这是自然对数的问题。
mean_squared_log_error(y, y_pred) 是如何工作的?
- 分别取y和y_pred的对数。
- 取差即 log(y) - log(y_pred).
- 平方差
- 差值的平均值就是平均值。
i.e. average((log(y)-log(y_pred))**2)
因此,如果您假设它将取差值的平方然后应用对数,则假设是错误的,因此它不适用于负值。
注意:我没有得到完全相同的错误,我得到的是“"Mean Squared Logarithmic Error cannot be used when " "targets contain negative values."”)
在尝试计算均方对数误差时出现以下错误:
ValueError: Input contains NaN, infinity or a value too large for dtype('float64').
计算均方误差不报错。 以下代码可用于重现问题:
from sklearn.datasets import load_boston
dataset = load_boston()
import pandas as pd
df = pd.DataFrame(dataset.data, columns=dataset.feature_names, )
df["MEDV"] = dataset.target
#tried this, no difference
df = df.reset_index()
df.isnull().sum()
#No missing values
df.dtypes
# all float64
cols = ["LSTAT", "RM"]
X = df[cols]#.astype(np.float)
y = df["MEDV"]#.astype(np.float)
from sklearn.linear_model import LinearRegression
slr = LinearRegression()
slr.fit(X, y)
y_pred = slr.predict(X)
np.all(np.isfinite(X))
# true
np.all(np.isfinite(y))
#true
np.all(np.isfinite(y_pred))
#true
from sklearn.metrics import mean_squared_error
mse = mean_squared_error(y, y_pred)
print(mse)
from sklearn.metrics import mean_squared_log_error
# THIS produces the error message:
msle = mean_squared_log_error(y, y_pred)
print(msle)
我做了几个检查:
- 没有缺失值
- 没有无限值
- 数据类型是 float64
我不明白为什么会出现错误。 有人知道我做错了什么吗?
亲切的问候,
夏侯
运行:
y_pred[y_pred<0]
你得到:
array([-4.66638608, -2.08933711])
你知道,这是自然对数的问题。
mean_squared_log_error(y, y_pred) 是如何工作的?
- 分别取y和y_pred的对数。
- 取差即 log(y) - log(y_pred).
- 平方差
- 差值的平均值就是平均值。
i.e. average((log(y)-log(y_pred))**2)
因此,如果您假设它将取差值的平方然后应用对数,则假设是错误的,因此它不适用于负值。
注意:我没有得到完全相同的错误,我得到的是“"Mean Squared Logarithmic Error cannot be used when " "targets contain negative values."”)