Python expm1中遇到溢出

Python expm1中遇到溢出,python,pandas,numpy,data-science,Python,Pandas,Numpy,Data Science,以下代码来自Kaggle House Price Prediction的参考笔记本: X=train_df.drop(['SalePrice'],axis=1) y=train_df.SalePrice X_pwr=power_transformer.fit_transform(X) test_std=std_scaler.fit_transform(test_df) test_rbst=rbst_scaler.fit_transform(test_df) test_pwr=power_tra

以下代码来自Kaggle House Price Prediction的参考笔记本:

X=train_df.drop(['SalePrice'],axis=1)
y=train_df.SalePrice

X_pwr=power_transformer.fit_transform(X)
test_std=std_scaler.fit_transform(test_df)
test_rbst=rbst_scaler.fit_transform(test_df)
test_pwr=power_transformer.fit_transform(test_df)

gb_reg = GradientBoostingRegressor(n_estimators=1792, 
learning_rate=0.01005, max_depth=4, max_features='sqrt', 
min_samples_leaf=15, min_samples_split=14, loss='huber', random_state =42)
gb_reg.fit(X_pwr, y)
y_head=gb_reg.predict(X_test)

test_pred_gb=gb_reg.predict(test_pwr)
test_pred_gb=pd.DataFrame(test_pred_gb,columns=['SalePrice'])
test_pred_gb.SalePrice =np.floor(np.expm1(test_pred_gb.SalePrice))

sample_sub.iloc[:,1]=(0.5 * test_pred_gb.iloc[:,0])+(0.5 * 
old_prediction.iloc[:,1])
#here old_prediction is the sample prediction given by kaggle
我想知道最后一行代码的原因。为什么他们要指定预测值的指数。
另外,最后一行给出运行时警告:expm1中遇到溢出。我还想知道如何解决这个溢出问题,因为在这一步之后,所有的SalePrice都被Nan替换了。对于第一个问题,很难说没有看到更多的代码,尽管我怀疑这是一个很好的理由,因为您输入的
np.expm1
数量显然很大(如果是房屋的销售价格,这是有道理的)。这就引出了第二个问题:

expm1
是一个用于计算
exp(x)-1
的特殊函数。对于非常小的
x
,它比仅使用
exp(x)返回更高的精度-1
。我不知道numpy执行计算的确切方式,尽管它通常是用泰勒级数完成的。您从
exp(x)
的泰勒级数开始,只需将初始项1移到另一侧即可得到
exp(x)-1=
一个大的多项式项和。这个多项式包含x^n和n!其中n是多项式的项数(即精度级别)。对于大的
x
,数字很快就会变得很难处理!换句话说,您很快就会接近操作系统上以位表示的数字的大小限制。要显示这一点,请尝试以下操作:

import numpy as np
import  warnings

warnings.filterwarnings('error')

for i in range(200000):
    try:
        np.expm1(i)
    except Warning:
        print(i)
        break

在我的系统上,它打印的是
710
。为了解决这个问题,您可以尝试将大数字缩小(即200000美元的价格实际上是20万美元).

对于第一个问题,因为可能在您的代码之前的某个地方,他们正在做np.SQRT。非常感谢您回答这个问题。我已经编辑了这个问题,并编写了模型培训的全部代码。希望现在您能够找到expm1背后的原因。另外,您编写的代码在我的系统上给出了704,但我仍然没有取消如何使20万到0.2米的倒立