我是Python的新手,我需要迭代3个主要变量来检查人工智能模型中最佳的平均误差。
这3个模型分别是:梯度提升、随机森林和XGBooster。
每个模型分别对数据进行拟合。最后我需要将它们组合起来,但迭代过程非常耗时,因为需要进行27次迭代。
方程如下:
y_predict = x*gradientBossterPredict + y*randomForest + z*XGBooster
其中
- x、y和z的值在0到1之间(每个的步长为0.1)
- x + y + z始终应该等于1
我尝试了以下代码:
rmse = []for (gbrCount in np.arange(0, 1.0, 0.1)): for(xgbCount in np.arange(0, 1.0, 0.1)): for(regCount in np.arange(0, 1.0, 0.1)): y_p = (xgbCount*xgb.predict(testset)+ gbrCount*gbr.predict(testset)+regCount*regressor.predict(testset)) testset['SalePrice']=np.expm1(y_p) y_train_p = xgb.predict(dataset) y_train_p = np.expm1(y_train_p) rmse.append(np.sqrt(mean_squared_error(y, y_train_p))) rmse.append(xgbCount) rmse.append(gbrCount) rmse.append(regCount)
但我得到了以下错误:
SyntaxError: unexpected EOF while parsing for gbrCount in np.arange(0, 1.0, 0.1):
回答:
您的代码可以通过以下FOR循环语法正常工作:
import numpy as npfor gbrCount in np.arange(0, 1.0, 0.1): for xgbCount in np.arange(0, 1.0, 0.1): for regCount in np.arange(0, 1.0, 0.1): y_p = (xgbCount*xgb.predict(testset)+ gbrCount*gbr.predict(testset)+regCount*regressor.predict(testset)) testset['SalePrice']=np.expm1(y_p) y_train_p = xgb.predict(dataset) y_train_p = np.expm1(y_train_p) rmse.append(np.sqrt(mean_squared_error(y, y_train_p))) rmse.append(xgbCount) rmse.append(gbrCount) rmse.append(regCount)
要在循环中确保总和始终等于1,请看下面的代码:
import numpy as npfor gbrCount in np.arange(0, 1.0, 0.1): for xgbCount in np.arange(0, 1.0, 0.1): for regCount in np.arange(0, 1.0, 0.1): #检查总和是否为1 if int(gbrCount+xgbCount+regCount) == 1: y_p = (xgbCount*xgb.predict(testset)+ gbrCount*gbr.predict(testset)+regCount*regressor.predict(testset)) testset['SalePrice']=np.expm1(y_p) y_train_p = xgb.predict(dataset) y_train_p = np.expm1(y_train_p) rmse.append(np.sqrt(mean_squared_error(y, y_train_p))) rmse.append(xgbCount) rmse.append(gbrCount) rmse.append(regCount)
要将每个结果放在同一行,而不是每个值单独一行,请看下面的代码:
import numpy as npfor gbrCount in np.arange(0, 1.0, 0.1): for xgbCount in np.arange(0, 1.0, 0.1): for regCount in np.arange(0, 1.0, 0.1): #检查总和是否为1 if int(gbrCount+xgbCount+regCount) == 1: y_p = (xgbCount*xgb.predict(testset)+ gbrCount*gbr.predict(testset)+regCount*regressor.predict(testset)) testset['SalePrice']=np.expm1(y_p) y_train_p = xgb.predict(dataset) y_train_p = np.expm1(y_train_p) rmse.append([np.sqrt(mean_squared_error(y, y_train_p)), xgbCount, gbrCount, regCount ])