from xgboost.sklearn import XGBRegressor
from sklearn import datasets
from sklearn.model_selection import GridSearchCV,train_test_split
import pandas as pd
from sklearn import metrics
data.to_csv('./random.csv')
csv = pd.read_csv(data)
x = csv.loc[:,['xx','xx']].values.tolist()
y = csv['xx'].tolist()
print(x.shape)
x_train, x_test, y_train, y_test = train_test_split(x,y,test_size=0.25,random_state=10)
xgbr = XGBRegressor()
xgbr.fit(x_train, y_train)
print(xgbr.intercept_)
print(xgbr.coef_)
利用测试集拟合 然后评估,用MSE(均方差)或RMSE(根方差) MAE(平均绝对误差)来评价模型的好坏。
y_pred=xgbr.predict(x_test) #得到预测后的y值 验证测试集的x值
mae=metrics.mean_absolute_error(y_test, y_pred)
交叉验证能对数据进行训练和验证,导入的是没有经过训练的模型,当类别数目较多,或者每类样本数目不均衡时,采用分层交叉验证。交叉验证(cv)能减少偶然性,可以先在一个子集上做分析,而其它子集则用来做后续对此分析的确认及验证。一开始的子集被称为训练集。而其它的子集则被称为验证集或测试集 在K折交叉验证中,用到的数据是训练集中的所有数据,将训练集的所有数据平均划分出K份(通常选择K=3、5、10),取第K份作为验证集,余下的K-1份作为交叉验证的训练集。对不同的数据进行了多次训练和评估,因此更加准确,几折是进行几次交叉验证。
Grid Search:也叫穷举搜索,在所有候选的参数选择中,通过循环遍历,尝试每一种可能性,表现最好的参数就是最终的结果。采用栅格搜索(grid search),先大范围地粗略参数,然后再小范围的微调。网格搜索,搜索的是参数,即在指定的参数范围内,按步长依次调整参数,利用调整的参数训练学习器,从所有的参数中找到在验证集上精度最高的参数,这其实是一个训练和比较的过程。GridSearchCV可以保证在指定的参数范围内找到精度最高的参数,但是这也是网格搜索的缺陷所在,他要求遍历所有可能参数的组合,在面对大数据集和多参数的情况下,非常耗时。
GridSearchCV参数: cv = None:交叉验证参数,默认None,可使用三折交叉验证。 estimator:选择使用的分类器,并且传入除需要确定最佳的参数之外的其他参数。 param_grid:需要最优化的参数的取值,值为字典或者列表 scoring = None :模型评价标准,默认为None,这时需要使用score函数;或者如scoring = 'roc_auc',或scoring = 'r2',根据所选模型不同,评价准则不同。
学习率eta(learning rate):在0.05~0.3之间波动,通常首先设置为0.1。 booster:分类器。 特定参数调整:max_depth和min_child_weight。max_depth和min_child_weight参数对最终结果有很大的影响。max_depth通常在3-10之间。
'roc_auc' :只支持二分类,多分类需要修改scoring。
n_estimators:迭代次数(树的数量)。
gamma:叶节点上进行进一步分裂所需的最小"损失减少"。
subsample:训练集抽样比例(样本数量大的时候),默认为1。
colsample_bytree:每次拟合一棵树之前,决定使用多少个特征。
colsample_bylevel:每层树节点,可以使用多少个特征。
colsample_bynode:每个节点分裂之前,决定使用多少个特征。
tree_method:树方法。
*ambda(reg_lambda):默认=1,L2正则化权重项。增加此值将使模型更加保守。(减少过拟合)
seed:随机数种子。
正则化参数reg_alpha(得分不变) 越大越不容易过拟合。
正则化参数reg_lambda(得分不变)。