1.数据处理

import numpy as np
import pandas as pdtrain_data = pd.read_csv('E:/机器学习/my_code_kaggle/lesson2/input/train.csv',index_col = 0)
test_data = pd.read_csv('E:/机器学习/my_code_kaggle/lesson2/input/test.csv',index_col = 0)y_train = train_data['SalePrice']
X_train = train_data.drop(['SalePrice'],axis = 1)#判断平滑性
#y_train.hist()
#发现平滑性不怎么样,最好分布图类似于一个正态分布就比较好
y_train_log = np.log1p(y_train)
#y_train_log.hist()#把数据拼接在一起处理
data = pd.concat((X_train,test_data),axis = 0)#MSSubClass属性的数值无意义,作为类别标签看待,转为字符串
#MSSubClass是Categorical类型,用One-Hot的方法来表示
#pandas自带get_dummies方法,一键做到One-Hot
data['MSSubClass'] = data['MSSubClass'].astype(str)
#print(data['MSSubClass'].value_counts())#把MSSubClass换成字符串标签了之后,就和其他的英文分类差不多了,直接dummy
dummy_data = pd.get_dummies(data)#属性由79个变成了302个,1460*303#查看各个属性缺失值的个数,用平均值填补缺失值
#print(dummy_train.isnull().sum().sort_values(ascending = False).head(10))
mean_cols = dummy_data.mean()
dummy_data = dummy_data.fillna(mean_cols)#用mean_cols来填满空缺值
#print(dummy_data.isnull().sum().sum())#确定没有空缺值了#做regression的时候最好先标准化一下
#标准化numerical类型数据,不是One-Hot变成的numerical
numeric_cols = data.columns[data.dtypes != 'object']
#print(numeric_cols)#len(numeric_cols) = 36numeric_col_means = dummy_data.loc[:,numeric_cols].mean()
numeric_col_std = dummy_data.loc[:,numeric_cols].std()
dummy_data.loc[:,numeric_cols] = (dummy_data.loc[:,numeric_cols]-numeric_col_means)/numeric_col_std#合在一起处理完特征之后,分开测试集和训练集
dummy_train = dummy_data.loc[train_data.index,:]
dummy_test = dummy_data.loc[test_data.index,:]

2.弱分类器还是用ridge

#弱分类器ridge
from sklearn import linear_model
ridge = linear_model.Ridge(alpha = 15)
ridge.fit(dummy_train,y_train_log)

3.用AdaBoost

##Boosting
#AdaBoodt
from sklearn.ensemble import AdaBoostRegressor
from sklearn.model_selection import cross_val_scoreparams = [2,3,4,5,6,7,8,9,10]
test_scores = []
for param in params:clf = AdaBoostRegressor(n_estimators=param, base_estimator=ridge)test_score = np.sqrt(-cross_val_score(clf, dummy_train, y_train_log, cv=10, scoring='neg_mean_squared_error'))test_scores.append(np.mean(test_score))#显示结果
import matplotlib.pyplot as plt
plt.plot(params,test_scores)
plt.title('n_estimators vs CV Error')



均方误差越来越大,而且每次跑出来的结果都不一样,这应该是cross validation的原因,加上adaboost本身就不是很稳定
扩充了弱分类器的个数,发现均方误差也是一个递增的趋势

这么看好像分类器个数越少越好???
有的时候确实能够在35的时候看到最佳点,但是这基本都是随缘,而且均方误差来看也不怎么样

暴力的用2到50全部算了一遍,均方误差还是一个递增的趋势

可能还是把个数控制在10个以内比较好?请大神指教!!!

4.用xgboost

##Boosting
#XGBoost
from xgboost import XGBRegressor
from sklearn.model_selection import cross_val_scoreparams = [1,2,3,4,5,6]
test_scores = []
for param in params:clf = XGBRegressor(max_depth = param)test_score = np.sqrt(-cross_val_score(clf,dummy_train,y_train_log,cv = 10,scoring = 'neg_mean_squared_error'))test_scores.append(np.mean(test_score))#显示结果
import matplotlib.pyplot as plt
plt.plot(params,test_scores)
plt.title('n_estimators vs CV Error')


可以看到当深度为5的时候,均方误差已经低于0.13了课件xgboost是目前最好的模型

5.完整代码

import numpy as np
import pandas as pdtrain_data = pd.read_csv('E:/机器学习/my_code_kaggle/lesson2/input/train.csv',index_col = 0)
test_data = pd.read_csv('E:/机器学习/my_code_kaggle/lesson2/input/test.csv',index_col = 0)y_train = train_data['SalePrice']
X_train = train_data.drop(['SalePrice'],axis = 1)#判断平滑性
#y_train.hist()
#发现平滑性不怎么样,最好分布图类似于一个正态分布就比较好
y_train_log = np.log1p(y_train)
#y_train_log.hist()#把数据拼接在一起处理
data = pd.concat((X_train,test_data),axis = 0)#MSSubClass属性的数值无意义,作为类别标签看待,转为字符串
#MSSubClass是Categorical类型,用One-Hot的方法来表示
#pandas自带get_dummies方法,一键做到One-Hot
data['MSSubClass'] = data['MSSubClass'].astype(str)
#print(data['MSSubClass'].value_counts())#把MSSubClass换成字符串标签了之后,就和其他的英文分类差不多了,直接dummy
dummy_data = pd.get_dummies(data)#属性由79个变成了302个,1460*303#查看各个属性缺失值的个数,用平均值填补缺失值
#print(dummy_train.isnull().sum().sort_values(ascending = False).head(10))
mean_cols = dummy_data.mean()
dummy_data = dummy_data.fillna(mean_cols)#用mean_cols来填满空缺值
#print(dummy_data.isnull().sum().sum())#确定没有空缺值了#做regression的时候最好先标准化一下
#标准化numerical类型数据,不是One-Hot变成的numerical
numeric_cols = data.columns[data.dtypes != 'object']
#print(numeric_cols)#len(numeric_cols) = 36numeric_col_means = dummy_data.loc[:,numeric_cols].mean()
numeric_col_std = dummy_data.loc[:,numeric_cols].std()
dummy_data.loc[:,numeric_cols] = (dummy_data.loc[:,numeric_cols]-numeric_col_means)/numeric_col_std#合在一起处理完特征之后,分开测试集和训练集
dummy_train = dummy_data.loc[train_data.index,:]
dummy_test = dummy_data.loc[test_data.index,:]#弱分类器ridge
from sklearn import linear_model
ridge = linear_model.Ridge(alpha = 15)
ridge.fit(dummy_train,y_train_log)##Boosting
#AdaBoodt#from sklearn.ensemble import AdaBoostRegressor
#from sklearn.model_selection import cross_val_score
#
#params = [10,15,20,25,30,35,40]
#test_scores = []
#for param in params:
#    clf = AdaBoostRegressor(n_estimators=param, base_estimator=ridge)
#    test_score = np.sqrt(-cross_val_score(clf, dummy_train, y_train_log, cv=10, scoring='neg_mean_squared_error'))
#    test_scores.append(np.mean(test_score))##Boosting
#XGBoost
from xgboost import XGBRegressor
from sklearn.model_selection import cross_val_scoreparams = [1,2,3,4,5,6]
test_scores = []
for param in params:clf = XGBRegressor(max_depth = param)test_score = np.sqrt(-cross_val_score(clf,dummy_train,y_train_log,cv = 10,scoring = 'neg_mean_squared_error'))test_scores.append(np.mean(test_score))#显示结果
import matplotlib.pyplot as plt
plt.plot(params,test_scores)
plt.title('n_estimators vs CV Error')

综上所述:

模型 score
Ridge(alpha = 15) 均方误差0.135
Random Forest(max_feature = 0.3) 均方误差0.137
AdaBoost(参数是个谜!) 均方误差0.14
xgboost(depth = 5) 均方误差0.125

房价预测5--Regression--Boosting(AdaBoost / xgboost)相关推荐

  1. 论文翻译之——《基于XGBoost的房价预测优化》-陶然

    目录 摘要 1 介绍 2.相关工作 2.1 文献综述 2.2 研究方法 3. 特征重要性和准确性改进 3.1 特征工程 3.1.1 数据描述 3.1.2 数据清洗 3.1.3 响应变量归一化 3.1. ...

  2. Python信贷风控模型:Adaboost,XGBoost,SGD, SVC,随机森林, KNN预测信贷违约支付

    全文链接:http://tecdat.cn/?p=26184 在此数据集中,我们必须预测信贷的违约支付,并找出哪些变量是违约支付的最强预测因子?以及不同人口统计学变量的类别,拖欠还款的概率如何变化?( ...

  3. 竞赛大杀器xgboost,波士顿房价预测

    经常出入DC竞赛.kaggle.天池等大数据比赛的同学应该很了解xgboost这座大山. 几乎所有的比赛都绕不过它,可能只需要这一个库,在比赛中就可以得到很高的分数,究竟是为什么呢?那么就来窥探一下它 ...

  4. ML之xgboost:利用xgboost算法对Boston(波士顿房价)数据集【特征列分段→独热编码】进行回归预测(房价预测)+预测新数据得分

    ML之xgboost:利用xgboost算法对Boston(波士顿房价)数据集[特征列分段→独热编码]进行回归预测(房价预测)+预测新数据得分 导读 对Boston(波士顿房价)数据集进行特征工程,分 ...

  5. 基于xgboost+GridSearchCV的波士顿房价预测

    xgboost中文叫做极致梯度提升模型,官方文档链接:https://xgboost.readthedocs.io/en/latest/tutorials/model.html GridSearchC ...

  6. 【kaggle】基于xgboost的boston房价预测

    学习总结 (1)本task其实较为简单.选用最熟悉(简单)的波士顿房价数据集,进行数据分析:另外主要是回顾sklearn的基本用法,复习xgboost模型及其参数的选择. 文章目录 学习总结 一.题目 ...

  7. kaggle简单实战——房价预测(xgboost实现)

    最近正在学习xgboost,因此在kaggle上用xgboost做了个简单的小项目--波士顿房价预测(https://www.kaggle.com/c/house-prices-advanced-re ...

  8. 基于xgboost的波士顿房价预测kaggle实战

    xgboost中文叫做极致梯度提升模型,官方文档链接:https://xgboost.readthedocs.io/en/latest/tutorials/model.html 2018年8月24日笔 ...

  9. kaggle房价预测(House Prices: Advanced Regression Techniques)详解

    这几天做kaggle上的房价预测题目,有一些需要记录的点. 1.当数据是skew的时候需要进行log操作,比如这里的房价 之后可以把所有偏度大于一个阈值的都log化,至于偏度相关的知识,请看https ...

  10. kaggle (02) - 房价预测案例(进阶版)

    房价预测案例(进阶版) 这是进阶版的notebook.主要是为了比较几种模型框架.所以前面的特征工程部分内容,我也并没有做任何改动,重点都在后面的模型建造section Step 1: 检视源数据集 ...

最新文章

  1. kali linux 安装 Mysql Can‘t read from messagefile 报错解决方案
  2. Java并发编程实战 第4章 对象的组合
  3. Linux 内核红黑树分析
  4. 运行项目到 微信开发者工具和浏览器
  5. Qt学习笔记-Qt中OpenGL的使用
  6. 电路理论与linkage Mapper的安装
  7. Windows环境下安装redis以及出现的一些未解决的问题
  8. 4. 2D绘制与控件绘制
  9. 20190313_C#反转绘制字符串
  10. 在本地Windows系统下搭建Apollo配置中心
  11. H3C交换机配置常用命令
  12. 人生的第一篇博客φ(>ω<*)
  13. 嵌入式开发-STM32硬件I2C驱动OLED屏
  14. Chrome插件-图片批量下载
  15. mysql 1677_MySQL之数据库主从复制配置报错Last_Errno: 1677
  16. 【动态规划】背包问题1
  17. placement new和placement delete
  18. web快速入门之基础篇-html:2、基本标签之标题标签、段落标签、换行标签
  19. mac如何卸载python2.7_mac python环境的安装与卸载
  20. 大众点评 爬虫 python_[Python爬虫练习]大众点评会员榜

热门文章

  1. 基于opencv 的人脸签到系统
  2. SwinTrack: A Simple and Strong Baseline for Transformer Tracking(NIPS2022)
  3. vue页面生成pdf 完整demo 及其踩得坑
  4. 穷人安装ubuntu1.18.4+docker+kind+k8s-1.19.1+kubeflow-1.3
  5. linux内核模块调试信息,linux 内核模块调试
  6. 生存还是毁灭的十字路口,中小企业已别无选择!
  7. PyQt5:绘制九宫格方块
  8. win10系统多屏互动怎么使用
  9. 有豪车,有帅哥,还有轻松年入十万美金的方法 | 宅客周刊
  10. 论文阅读:A Survey of Textual Event Extraction from Social Networks 综述:从社交媒体中抽取文本事件