一、数据预处理、特征工程

类别变量 labelencoder就够了,使用onehotencoder反而会降低性能。其他处理方式还有均值编码(对于存在大量分类的特征,通过监督学习,生成数值变量)、转换处理(低频分类合并)、特征构造(结合其他数值变量生成新特征)。

二、模型调参

网格调参、随机调参。

模型参数没必要太过于纠结,调参到合适的地步就好了,太过沉迷会导致过拟合。

三、样本划分

一般是对数据集按7:3、8:2、7.5:2.5等划分为训练集和测试集。

更用心一点,把数据集随机划分为k折,以任意一部分为测试集,其余部分为训练集,建立k个模型。分别调参。最后对预测结果求平均值(加权或单纯求平均)。这种思路原理在于每个模型都会存在一定方差,会学到部分特征,通过对多个模型求平均值,可以起到消除误差的作用。

我在sofasofa上,第一个练习题排名25/257。rmse:14.925

代码如下:

# -*- coding: utf-8 -*-
"""
Created on Sat Sep  1 21:20:29 2018
@author: 蚂蚁不在线
从原理上来说,机器学习最靠谱的调参方法就是对训练集进行n折交叉验证。
单纯划分训练集和测试集调参的过程中,不可避免地在训练集上过拟合。
k折交叉划分训练集、测试集。
"""
import pandas as pd
import numpy as np
from xgboost import XGBRegressor
#from sklearn.model_selection import train_test_split
from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import RandomizedSearchCV
from sklearn.model_selection import KFold
from sklearn import metrics

##网格搜索

def gsearcher(f_train,t_train,param_test):
    gs=GridSearchCV(estimator=XGBRegressor(objective='reg:linear',
                                           eval_metric='rmse'),
                    param_grid=param_test,
                    verbose=1,
                    cv=3)
    gs.fit(f_train,t_train)
    gs.score=np.sqrt(abs(gs.best_score_))
    return gs
##随机搜索
def rsearcher(f_train,t_train,param_test):
    rs=RandomizedSearchCV(estimator=XGBRegressor(objective='reg:linear'),
                          param_distributions=param_test,
                          verbose=1,
                          n_iter=100,
                          cv=3,
                          scoring='neg_mean_squared_error')
    rs.fit(f_train,t_train)
    rs.score=np.sqrt(abs(rs.best_score_))
    return rs
#k折交叉验证
def kmodel(train,y_train,param,test):
    result,col,score=pd.DataFrame(),0,[]
    kf = KFold(n_splits=5,shuffle=True,random_state=0)
    model=XGBRegressor(objective='reg:linear',
                       eval_metric='rmse',
                       n_estimators=param['n_estimators'],
                       max_depth=param['max_depth'],
                       learning_rate=param['learning_rate'],
                       subsample=param['subsample'],
                       colsample_bytree=param['colsample_bytree'],
                       min_child_weight=param['min_child_weight'],
                       reg_lambda=param['reg_lambda'],
                       reg_alpha=param['reg_alpha'],
                       gamma=param['gamma']
                       )
    scores=[]
    for train_index , test_index in kf.split(train):
        col+=1
        ktrain=train.iloc[list(train_index),:]
        ktest=train.iloc[list(test_index),:]
        y_ktrain=y_train[list(train_index)]
        y_ktest=y_train[list(test_index)]
        model.fit(ktrain,y_ktrain)
        yp=model.predict(ktest)
        score=np.sqrt(abs(metrics.mean_squared_error(y_ktest,yp)))
        print(score)
        scores.append(score)
        yp=model.predict(test)
        result['result_'+str(col)]=yp
        result['result_'+str(col)]=result['result_'+str(col)].apply(lambda x:0 if x<0 else x)
    result['score']=result.apply(lambda x:x.mean(),axis=1)
    print(sum(scores)/5)
    return result

# 读取数据
train = pd.read_csv("train.csv")
test = pd.read_csv("test.csv")
submit = pd.read_csv("sample_submit.csv")
# 删除id
train.drop(['id'], axis=1, inplace=True)
test.drop(['id'], axis=1, inplace=True)
# 取出训练集的y
t_train = train.pop('y')
#train,test=data_process(train,test)
param_test={'n_estimators':range(100,120,1),
            'max_depth':range(5,11,1),
            'learning_rate':[0.1+0.01*x for x in range(6)],
            'subsample':[0.7+0.01*x for x in range(11)],
            'colsample_bytree':[0.7+0.01*x for x in range(11)],
            'min_child_weight':range(5,15,1),
            'reg_lambda':range(1,3,2),
            'reg_alpha':range(2,8,1),
            'gamma':range(2,6,1)
            }
rs=rsearcher(train,t_train,param_test)
print('最优参数:',rs.best_params_,rs.score)
with open('log.txt','a+',encoding='utf-8') as f:
    f.write(str(rs.score)+str(rs.best_params_)+'\n')
result=kmodel(train,t_train,rs.best_params_,test)
submit['y']=result['score']
submit.to_csv('submit_0903_1.csv',index=False)

机器学习 xgboost 笔记的更多相关文章

  1. 机器学习&数据挖掘笔记_14(GMM-HMM语音识别简单理解)

    为了对GMM-HMM在语音识别上的应用有个宏观认识,花了些时间读了下HTK(用htk完成简单的孤立词识别)的部分源码,对该算法总算有了点大概认识,达到了预期我想要的.不得不说,网络上关于语音识别的通俗 ...

  2. 机器学习&数据挖掘笔记(常见面试之机器学习算法思想简单梳理)

    机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理) 作者:tornadomeet 出处:http://www.cnblogs.com/tornadomeet 前言: 找工作时( ...

  3. [转]机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理)

    机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理) 转自http://www.cnblogs.com/tornadomeet/p/3395593.html 前言: 找工作时(I ...

  4. Andrew Ng机器学习课程笔记(五)之应用机器学习的建议

    Andrew Ng机器学习课程笔记(五)之 应用机器学习的建议 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7368472.h ...

  5. Andrew Ng机器学习课程笔记--week1(机器学习介绍及线性回归)

    title: Andrew Ng机器学习课程笔记--week1(机器学习介绍及线性回归) tags: 机器学习, 学习笔记 grammar_cjkRuby: true --- 之前看过一遍,但是总是模 ...

  6. Andrew Ng机器学习课程笔记--汇总

    笔记总结,各章节主要内容已总结在标题之中 Andrew Ng机器学习课程笔记–week1(机器学习简介&线性回归模型) Andrew Ng机器学习课程笔记--week2(多元线性回归& ...

  7. Andrew 机器学习课程笔记

    Andrew 机器学习课程笔记 完成 Andrew 的课程结束至今已有一段时间,课程介绍深入浅出,很好的解释了模型的基本原理以及应用.在我看来这是个很好的入门视频,他老人家现在又出了一门 deep l ...

  8. ng机器学习视频笔记(一)——线性回归、代价函数、梯度下降基础

    ng机器学习视频笔记(一) --线性回归.代价函数.梯度下降基础 (转载请附上本文链接--linhxx) 一.线性回归 线性回归是监督学习中的重要算法,其主要目的在于用一个函数表示一组数据,其中横轴是 ...

  9. ng机器学习视频笔记(二) ——梯度下降算法解释以及求解θ

    ng机器学习视频笔记(二) --梯度下降算法解释以及求解θ (转载请附上本文链接--linhxx)   一.解释梯度算法 梯度算法公式以及简化的代价函数图,如上图所示. 1)偏导数 由上图可知,在a点 ...

随机推荐

  1. 王之泰《面向对象程序设计(java)》课程学习总结

    第一部分:理论知识学习部分 总复习纲要 1. Java语言特点与开发环境配置(第1章.第2章) 2. Java基本程序结构(第3章) 3. Java面向对象程序结构(第4章.第5章.第6章) 4. 类 ...

  2. 新的尝试!ComponentOne WinForm 和 .NET Core 3.0

    在微软 Build 2018 开发者大会上,.NET 团队公布了 .NET Core 的下一个主要版本 .NET Core 3.0 的规划蓝图:.NET Core 3将开始支持Windows桌面应用程 ...

  3. html 的 crossorigin 属性

    添加这个属性, 并且服务器允许跨域后,会得到精确的报错信息. 添加这个属性,但服务器不允许跨域,就会被同源策略阻止加载资源. 不添加这个属性,只能知道报错,不知道具体信息. https://www.j ...

  4. 在线预览-Java 使用 Print2Flash 实现Office文档在线阅读

    近期项目上遇到一个需求是用户上传的文档进行在线浏览,之前有过一篇使用 OpenOffice 将 word 转换成 html 页面进行展示的.现在介绍一个新的工具那就是 Print2Flash .    ...

  5. Nginx 安装及配置、负载均衡https网站及转发后页面js、css等路径找不到问题、更换证书导致问题解决

    官网下载nginx:http://nginx.org/en/download.html 安装nginx编译环境:yum install -y gcc-c++ 安装pcre库解析正则:yum insta ...

  6. Hibernate实例——Customer表的展示

    Hibernate.cfg.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibe ...

  7. 模板引擎ejs入门学习

    1:利用 NPM 安装 EJS 很简单 npm install ejs 2:安装完成肯定就是使用了 var template = ejs.compile(str, options); template ...

  8. VNPY加密教程(Python生成pyd文件)

    安装成功之后,再修改设置.让Cython可以找到vcarsall.bat.此处有两种方案.(我采用方案1,亲测可用.方案2未测试,看似可用.) 方案1:修改Python安装目录的文件设置 window ...

  9. 403 Access Denied :进入Tomcat的manager时拒绝访问

    解决办法: https://blog.csdn.net/Hello_World_QWP/article/details/79581174

  10. webdirver.Chrom() selenium webdirver调用谷歌浏览器的问题解决

    第一个坑: 没有将谷歌驱动放到   /usr/local/bin  目录下 第二个坑: 没有将谷歌浏览器.exe放在    /usr/local/bin  目录下(注意:驱动和浏览器在一个路径下才能使 ...