Python 如何使用准确度评分(或其他建议的函数)测量xgboost回归器的准确度
我正在编写一个代码来解决一个简单的问题,即预测库存中物品丢失的概率 我正在使用XGBoost预测模型来实现这一点 我将数据分为两个.csv文件,一个包含列车数据,另一个包含测试数据 代码如下:Python 如何使用准确度评分(或其他建议的函数)测量xgboost回归器的准确度,python,scikit-learn,xgboost,training-data,k-fold,Python,Scikit Learn,Xgboost,Training Data,K Fold,我正在编写一个代码来解决一个简单的问题,即预测库存中物品丢失的概率 我正在使用XGBoost预测模型来实现这一点 我将数据分为两个.csv文件,一个包含列车数据,另一个包含测试数据 代码如下: import pandas as pd import numpy as np train = pd.read_csv('C:/Users/pedro/Documents/Pedro/UFMG/8o periodo/Python/Trabalho Final/train.csv'
import pandas as pd
import numpy as np
train = pd.read_csv('C:/Users/pedro/Documents/Pedro/UFMG/8o periodo/Python/Trabalho Final/train.csv', index_col='sku').fillna(-1)
test = pd.read_csv('C:/Users/pedro/Documents/Pedro/UFMG/8o periodo/Python/Trabalho Final/test.csv', index_col='sku').fillna(-1)
X_train, y_train = train.drop('isBackorder', axis=1), train['isBackorder']
import xgboost as xgb
xg_reg = xgb.XGBRegressor(objective ='reg:linear', colsample_bytree = 0.3, learning_rate = 0.1,
max_depth = 10, alpha = 10, n_estimators = 10)
xg_reg.fit(X_train,y_train)
y_pred = xg_reg.predict(test)
# Create file for the competition submission
test['isBackorder'] = y_pred
pred = test['isBackorder'].reset_index()
pred.to_csv('competitionsubmission.csv',index=False)
这里是我尝试测量问题准确性的函数(使用RMSE和accuracy_scores函数并进行KFold交叉验证
#RMSE
from sklearn.metrics import mean_squared_error
rmse = np.sqrt(mean_squared_error(y_train, y_pred))
print("RMSE: %f" % (rmse))
#Accuracy
from sklearn.metrics import accuracy_score
# make predictions for test data
predictions = [round(value) for value in y_pred]
# evaluate predictions
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy: %.2f%%" % (accuracy * 100.0))
#KFold
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
# CV model
kfold = KFold(n_splits=10, random_state=7)
results = cross_val_score(xg_reg, X_train, y_train, cv=kfold)
print("Accuracy: %.2f%% (%.2f%%)" % (results.mean()*100, results.std()*100))
但是我有一些问题
上述精度测试均无效
使用RMSE功能和精度功能时,出现以下错误:
ValueError:找到样本数不一致的输入变量:[1350955578982]
我猜我使用的列车和测试数据分割结构是不正确的
因为我没有y_测试(并且我不知道如何在我的问题中创建它),所以我不能在函数的上述参数中使用它
K折叠验证也不起作用
有人能帮我吗?你唯一的问题是你需要验证数据。你不能测量
预测(x\u测试)之间的准确性
和不存在的y\u测试
。使用sklearn.model\u selection.train\u test\u split
根据训练数据创建验证集。您将拥有一个训练集、验证集和测试集。您可以在验证集上评估模型的性能
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(x, y)
其他备注:
准确度在这里毫无意义,因为你试图预测连续值。只对分类变量使用准确度
至少,这可以起到以下作用:
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
import xgboost as xgb
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
train = pd.read_csv('C:/Users/pedro/Documents/Pedro/UFMG/8o periodo/Python/Trabalho Final/train.csv', index_col='sku').fillna(-1)
test_data = pd.read_csv('C:/Users/pedro/Documents/Pedro/UFMG/8o '
'periodo/Python/Trabalho Final/test.csv', index_col='sku').fillna(-1)
x, y = train.drop('isBackorder', axis=1), train['isBackorder']
X_train, X_test, y_train, y_test = train_test_split(x, y)
xg_reg = xgb.XGBRegressor(objective ='reg:linear', colsample_bytree = 0.3, learning_rate = 0.1,
max_depth = 10, alpha = 10, n_estimators = 10)
xg_reg.fit(X_train,y_train)
kfold = KFold(n_splits=10, random_state=7)
results = cross_val_score(xg_reg, X_train, y_train, cv=kfold)
y_test_pred = xg_reg.predict(X_test)
mse = mean_squared_error(y_test_pred, y_test)
y_pred = xg_reg.predict(X_test)
pd.DataFrame(y_pred).to_csv('competitionsubmission.csv',index=False)
你好,Nicolas,谢谢你的回答。我尝试过使用train_test_split函数,但没有成功。我想我没有正确使用它。我不知道如何将我的训练集分离为变量X和Y,以便在train_test_split函数中使用它们。你能解释一下正确的方法吗?以及其他问题。因为准确性会影响对连续值没有意义,测量模型效率的最佳方法是什么?你建议我使用哪个函数?请参阅我的编辑。这就是我所能做的。它应该可以工作。如果不工作,错误将很小。工作!非常感谢Nicolas!真的帮助了我!嗨,你能再解释一下吗?你使用cross_val_分数生成“结果”()但之后不会再次使用结果。cross_val_score是否会修改xg_reg对象?