Skip to content

Instantly share code, notes, and snippets.

@vinceallenvince
Created October 16, 2016 11:32
Show Gist options
  • Save vinceallenvince/a402b57c0f0dc926823971c401c961e1 to your computer and use it in GitHub Desktop.
Save vinceallenvince/a402b57c0f0dc926823971c401c961e1 to your computer and use it in GitHub Desktop.
Kaggle notebook for the House Prices: Advanced Regression Techniques competition
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Housing prices\n",
"This notebook borrows ideas and techniques from [klyusba](https://www.kaggle.com/klyusba/house-prices-advanced-regression-techniques/lasso-model-for-regression-problem/comments), [mshih2](https://www.kaggle.com/mshih2/house-prices-advanced-regression-techniques/using-xgboost-for-feature-selection/comments), and [apapiu](https://www.kaggle.com/apapiu/house-prices-advanced-regression-techniques/regularized-linear-models/comments). The majority of the strategy focuses on data cleanup and feature engineering. I added more numerically ranked features. Eventually we create a Lasso model to identify the most effective features. Later we combine the predictions from Lasso and XBGRegressor.\n",
"\n",
"TODO:\n",
"* compare how preprocessing.scale and np.log1p perform\n",
"* determine we can resolve any multicolinearity problems"
]
},
{
"cell_type": "code",
"execution_count": 2669,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"%matplotlib inline\n",
"\n",
"from sklearn import preprocessing\n",
"from sklearn.preprocessing import LabelEncoder\n",
"\n",
"import xgboost as xgb"
]
},
{
"cell_type": "code",
"execution_count": 2670,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"train = pd.read_csv(\"./input/train.csv\") # 1460 entries\n",
"test = pd.read_csv(\"./input/test.csv\") # 1459 entries\n",
"ids = pd.concat((train.loc[:,'Id'],\n",
" test.loc[:,'Id']), ignore_index=True)"
]
},
{
"cell_type": "code",
"execution_count": 2671,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"all_data = pd.concat((train.loc[:,'MSSubClass':'SaleCondition'],\n",
" test.loc[:,'MSSubClass':'SaleCondition']), ignore_index=True)"
]
},
{
"cell_type": "code",
"execution_count": 2672,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>MSSubClass</th>\n",
" <th>MSZoning</th>\n",
" <th>LotFrontage</th>\n",
" <th>LotArea</th>\n",
" <th>Street</th>\n",
" <th>Alley</th>\n",
" <th>LotShape</th>\n",
" <th>LandContour</th>\n",
" <th>Utilities</th>\n",
" <th>LotConfig</th>\n",
" <th>...</th>\n",
" <th>ScreenPorch</th>\n",
" <th>PoolArea</th>\n",
" <th>PoolQC</th>\n",
" <th>Fence</th>\n",
" <th>MiscFeature</th>\n",
" <th>MiscVal</th>\n",
" <th>MoSold</th>\n",
" <th>YrSold</th>\n",
" <th>SaleType</th>\n",
" <th>SaleCondition</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>60</td>\n",
" <td>RL</td>\n",
" <td>65.0</td>\n",
" <td>8450</td>\n",
" <td>Pave</td>\n",
" <td>NaN</td>\n",
" <td>Reg</td>\n",
" <td>Lvl</td>\n",
" <td>AllPub</td>\n",
" <td>Inside</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>0</td>\n",
" <td>2</td>\n",
" <td>2008</td>\n",
" <td>WD</td>\n",
" <td>Normal</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>20</td>\n",
" <td>RL</td>\n",
" <td>80.0</td>\n",
" <td>9600</td>\n",
" <td>Pave</td>\n",
" <td>NaN</td>\n",
" <td>Reg</td>\n",
" <td>Lvl</td>\n",
" <td>AllPub</td>\n",
" <td>FR2</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>0</td>\n",
" <td>5</td>\n",
" <td>2007</td>\n",
" <td>WD</td>\n",
" <td>Normal</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>60</td>\n",
" <td>RL</td>\n",
" <td>68.0</td>\n",
" <td>11250</td>\n",
" <td>Pave</td>\n",
" <td>NaN</td>\n",
" <td>IR1</td>\n",
" <td>Lvl</td>\n",
" <td>AllPub</td>\n",
" <td>Inside</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>0</td>\n",
" <td>9</td>\n",
" <td>2008</td>\n",
" <td>WD</td>\n",
" <td>Normal</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>70</td>\n",
" <td>RL</td>\n",
" <td>60.0</td>\n",
" <td>9550</td>\n",
" <td>Pave</td>\n",
" <td>NaN</td>\n",
" <td>IR1</td>\n",
" <td>Lvl</td>\n",
" <td>AllPub</td>\n",
" <td>Corner</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>0</td>\n",
" <td>2</td>\n",
" <td>2006</td>\n",
" <td>WD</td>\n",
" <td>Abnorml</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>60</td>\n",
" <td>RL</td>\n",
" <td>84.0</td>\n",
" <td>14260</td>\n",
" <td>Pave</td>\n",
" <td>NaN</td>\n",
" <td>IR1</td>\n",
" <td>Lvl</td>\n",
" <td>AllPub</td>\n",
" <td>FR2</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>0</td>\n",
" <td>12</td>\n",
" <td>2008</td>\n",
" <td>WD</td>\n",
" <td>Normal</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5 rows × 79 columns</p>\n",
"</div>"
],
"text/plain": [
" MSSubClass MSZoning LotFrontage LotArea Street Alley LotShape \\\n",
"0 60 RL 65.0 8450 Pave NaN Reg \n",
"1 20 RL 80.0 9600 Pave NaN Reg \n",
"2 60 RL 68.0 11250 Pave NaN IR1 \n",
"3 70 RL 60.0 9550 Pave NaN IR1 \n",
"4 60 RL 84.0 14260 Pave NaN IR1 \n",
"\n",
" LandContour Utilities LotConfig ... ScreenPorch PoolArea PoolQC \\\n",
"0 Lvl AllPub Inside ... 0 0 NaN \n",
"1 Lvl AllPub FR2 ... 0 0 NaN \n",
"2 Lvl AllPub Inside ... 0 0 NaN \n",
"3 Lvl AllPub Corner ... 0 0 NaN \n",
"4 Lvl AllPub FR2 ... 0 0 NaN \n",
"\n",
" Fence MiscFeature MiscVal MoSold YrSold SaleType SaleCondition \n",
"0 NaN NaN 0 2 2008 WD Normal \n",
"1 NaN NaN 0 5 2007 WD Normal \n",
"2 NaN NaN 0 9 2008 WD Normal \n",
"3 NaN NaN 0 2 2006 WD Abnorml \n",
"4 NaN NaN 0 12 2008 WD Normal \n",
"\n",
"[5 rows x 79 columns]"
]
},
"execution_count": 2672,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"all_data.head()"
]
},
{
"cell_type": "code",
"execution_count": 2673,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# Transform MSSubClass from a numeric variable to a categorical variable bc numbers are totally arbitrary.\n",
"all_data = all_data.replace({'MSSubClass': {20: 'SubClass_20', \n",
" 30: 'SubClass_30', \n",
" 40: 'SubClass_40', \n",
" 45: 'SubClass_45',\n",
" 50: 'SubClass_50', \n",
" 60: 'SubClass_60',\n",
" 70: 'SubClass_70',\n",
" 75: 'SubClass_75',\n",
" 80: 'SubClass_80',\n",
" 85: 'SubClass_85',\n",
" 90: 'SubClass_90',\n",
" 120: 'SubClass_120',\n",
" 150: 'SubClass_150',\n",
" 160: 'SubClass_160',\n",
" 180: 'SubClass_180',\n",
" 190: 'SubClass_190'}})"
]
},
{
"cell_type": "code",
"execution_count": 2674,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# Convert all ints64s to float64s.\n",
"all_data.ix[:,(all_data.dtypes=='int64')] = all_data.ix[:,(all_data.dtypes=='int64')].astype('float64')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Clean and transform data"
]
},
{
"cell_type": "code",
"execution_count": 2675,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# Replace null values with zero.\n",
"scalarlist=['MasVnrArea','TotalBsmtSF','BsmtFinSF1','BsmtFinSF2','BsmtUnfSF','BsmtFullBath', 'BsmtHalfBath','MasVnrArea','Fireplaces','GarageArea','GarageYrBlt','GarageCars']\n",
"for i in scalarlist:\n",
" all_data.ix[pd.isnull(all_data.ix[:,i]),i] = 0\n",
"\n",
"# Replace null values with median.\n",
"medlist=['LotFrontage']\n",
"for i in medlist:\n",
" all_data.ix[pd.isnull(all_data.ix[:,i]),i] = np.nanmedian(all_data.ix[:,i]) "
]
},
{
"cell_type": "code",
"execution_count": 2676,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'Total remaining features w NaN values: 23'"
]
},
"execution_count": 2676,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"\"Total remaining features w NaN values: %d\" %len(np.array(all_data.columns[(pd.isnull(all_data).sum()>0)]))"
]
},
{
"cell_type": "code",
"execution_count": 2677,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# all features w missing data\n",
"nacount_category=np.array(all_data.columns[((all_data.dtypes=='object')) & (pd.isnull(all_data).sum()>0)])\n",
"\n",
"# assigned the most frequent value in their column\n",
"mFreqSet = ['MSZoning', 'Utilities', 'Exterior1st', 'Exterior2nd',\n",
" 'MasVnrType', 'Electrical', 'KitchenQual', 'Functional']\n",
"\n",
"Bsmtset=set(['BsmtQual', 'BsmtCond','BsmtExposure','BsmtFinType1','BsmtFinType2'])\n",
"Garageset=set(['GarageType','GarageFinish','GarageQual','GarageCond'])\n",
"Fireplaceset=set(['FireplaceQu'])\n",
"Poolset=set(['PoolQC'])\n",
"Otherset=set(['SaleType'])\n",
"NAset=set(['Alley', 'Fence', 'MiscFeature'])\n",
"\n",
"# if no area, replace null value w 'NA'\n",
"# everything else, assign the most frequent value\n",
"for i in nacount_category:\n",
" if i in Bsmtset:\n",
" all_data.ix[pd.isnull(all_data.ix[:,i]) & (all_data['TotalBsmtSF']==0),i] = 'NA'\n",
" all_data.ix[pd.isnull(all_data.ix[:,i]),i] = all_data.ix[:,i].value_counts().index[0]\n",
" elif i in Garageset:\n",
" all_data.ix[pd.isnull(all_data.ix[:,i]) & (all_data['GarageArea']==0),i]='NA'\n",
" all_data.ix[pd.isnull(all_data.ix[:,i]),i] = all_data.ix[:,i].value_counts().index[0]\n",
" elif i in Fireplaceset:\n",
" all_data.ix[pd.isnull(all_data.ix[:,i]) & (all_data['Fireplaces']==0),i]='NA'\n",
" all_data.ix[pd.isnull(all_data.ix[:,i]),i] = all_data.ix[:,i].value_counts().index[0]\n",
" elif i in Poolset:\n",
" all_data.ix[pd.isnull(all_data.ix[:,i]) & (all_data['PoolArea']==0),i]='NA'\n",
" all_data.ix[pd.isnull(all_data.ix[:,i]),i] = all_data.ix[:,i].value_counts().index[0]\n",
" elif i in Otherset:\n",
" all_data.ix[pd.isnull(all_data.ix[:,i]),i] = 'Other'\n",
" elif i in NAset:\n",
" all_data.ix[pd.isnull(all_data.ix[:,i]),i] = 'NA'\n",
" else:\n",
" all_data.ix[pd.isnull(all_data.ix[:,i]),i] = all_data.ix[:,i].value_counts().index[0]\n"
]
},
{
"cell_type": "code",
"execution_count": 2678,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# Some features express a categorical ranking (ie. Ex, Gd, TA, etc.). Transform these to a numerical ranking.\n",
"ranking_lookup = {\n",
" 'Utilities': {\n",
" 'AllPub': 1.0,\n",
" 'NoSeWa': 0.0,\n",
" 'NoSewr': 0.0,\n",
" 'ELO': 0.0\n",
" },\n",
" 'Street': {\n",
" 'Pave': 1.0,\n",
" 'Grvl': 0.0\n",
" },\n",
" 'FireplaceQu': {\n",
" 'Ex': 5.0, \n",
" 'Gd': 4.0, \n",
" 'TA': 3.0, \n",
" 'Fa': 2.0,\n",
" 'Po': 1.0,\n",
" 'NA': 0.0\n",
" },\n",
" 'ExterQual': {\n",
" 'Ex': 5.0,\n",
" 'Gd': 4.0,\n",
" 'TA': 3.0,\n",
" 'Fa': 2.0,\n",
" 'Po': 1.0\n",
" },\n",
" 'ExterCond': {\n",
" 'Ex': 5.0,\n",
" 'Gd': 4.0,\n",
" 'TA': 3.0,\n",
" 'Fa': 2.0,\n",
" 'Po': 1.0\n",
" },\n",
" 'BsmtQual': {\n",
" 'Ex': 5.0,\n",
" 'Gd': 4.0,\n",
" 'TA': 3.0,\n",
" 'Fa': 2.0,\n",
" 'Po': 1.0,\n",
" 'NA': 0.0\n",
" },\n",
" 'BsmtExposure': {\n",
" 'Gd': 3.0,\n",
" 'Av': 2.0,\n",
" 'Mn': 1.0,\n",
" 'No': 0.0,\n",
" 'NA': 0.0\n",
" },\n",
" 'BsmtCond': {\n",
" 'Ex': 5.0,\n",
" 'Gd': 4.0,\n",
" 'TA': 3.0,\n",
" 'Fa': 2.0,\n",
" 'Po': 1.0,\n",
" 'NA': 0.0\n",
" },\n",
" 'GarageQual': {\n",
" 'Ex': 5.0,\n",
" 'Gd': 4.0,\n",
" 'TA': 3.0,\n",
" 'Fa': 2.0,\n",
" 'Po': 1.0,\n",
" 'NA': 0.0\n",
" },\n",
" 'GarageCond': {\n",
" 'Ex': 5.0, \n",
" 'Gd': 4.0, \n",
" 'TA': 3.0, \n",
" 'Fa': 2.0,\n",
" 'Po': 1.0,\n",
" 'NA': 0.0\n",
" },\n",
" 'GarageFinish': {\n",
" 'Fin': 3.0, # Finished\n",
" 'RFn': 2.0, # Rough Finished\n",
" 'Unf': 1.0, # Unfinished\n",
" 'NA': 0.0 # No Garage\n",
" },\n",
" 'GarageType': { # Garage location\n",
" '2Types': 6.0, # More than one type of garage\n",
" 'Attchd': 5.0, # Attached to home\n",
" 'Basment': 4.0, # Basement Garage\n",
" 'BuiltIn': 3.0, # Built-In (Garage part of house - typically has room above garage)\n",
" 'CarPort': 2.0, # Car Port\n",
" 'Detchd': 1.0, # Detached from home\n",
" 'NA': 0.0 # No Garage\n",
" },\n",
" 'KitchenQual': {\n",
" 'Ex': 5.0, \n",
" 'Gd': 4.0, \n",
" 'TA': 3.0, \n",
" 'Fa': 2.0,\n",
" 'Po': 1.0\n",
" },\n",
" 'PoolQC': {\n",
" 'Ex': 4.0, \n",
" 'Gd': 3.0, \n",
" 'TA': 2.0, \n",
" 'Fa': 1.0,\n",
" 'NA': 0.0\n",
" },\n",
" 'Functional': {\n",
" 'Typ': 5.0,\n",
" 'Min1': 4.0,\n",
" 'Min2': 4.0,\n",
" 'Mod': 3.0,\n",
" 'Maj1': 2.0,\n",
" 'Maj2': 2.0,\n",
" 'Sev': 1.0,\n",
" 'Sal': 0.0\n",
" },\n",
" 'Fence': {\n",
" 'GdPrv': 4.0,\n",
" 'MnPrv': 3.0,\n",
" 'GdWo': 2.0,\n",
" 'MnWw': 1.0,\n",
" 'NA': 0.0\n",
" },\n",
" 'RoofMatl': {\n",
" 'ClyTile': 5.0,\n",
" 'WdShngl': 4.0,\n",
" 'WdShake': 4.0,\n",
" 'CompShg': 3.0,\n",
" 'Membran': 2.0,\n",
" 'Metal': 2.0,\n",
" 'Roll': 1.0,\n",
" 'Tar&Grv': 0.0\n",
" },\n",
" 'PavedDrive': {\n",
" 'Y': 1.0,\n",
" 'P': 0.0,\n",
" 'N': 0.0\n",
" },\n",
" 'Condition1': {\n",
" 'PosA': 5.0, # Adjacent to postive off-site feature\n",
" 'PosN': 4.0, # Near positive off-site feature--park, greenbelt, etc.\n",
" 'Norm': 3.0, # Normal\n",
" 'Artery': 2.0, # Adjacent to arterial street\n",
" 'Feedr': 2.0, # Adjacent to feeder street\n",
" 'RRNn': 1.0, # Within 200' of North-South Railroad\n",
" 'RRNe': 1.0, # Within 200' of East-West Railroad\n",
" 'RRAn': 0.0, # Adjacent to North-South Railroad\n",
" 'RRAe': 0.0 # Adjacent to East-West Railroad\n",
" },\n",
" 'Condition2': {\n",
" 'PosA': 5.0, # Adjacent to postive off-site feature\n",
" 'PosN': 4.0, # Near positive off-site feature--park, greenbelt, etc.\n",
" 'Norm': 3.0, # Normal\n",
" 'Artery': 2.0, # Adjacent to arterial street\n",
" 'Feedr': 2.0, # Adjacent to feeder street\n",
" 'RRNn': 1.0, # Within 200' of North-South Railroad\n",
" 'RRNe': 1.0, # Within 200' of East-West Railroad\n",
" 'RRAn': 0.0, # Adjacent to North-South Railroad\n",
" 'RRAe': 0.0 # Adjacent to East-West Railroad\n",
" },\n",
" 'BsmtFinType1': {\n",
" 'GLQ': 6.0, # Good Living Quarters\n",
" 'ALQ': 5.0, # Average Living Quarters\n",
" 'BLQ': 4.0, # Below Average Living Quarters\n",
" 'Rec': 3.0, # Average Rec Room\n",
" 'LwQ': 2.0, # Low Quality\n",
" 'Unf': 1.0, # Unfinshed\n",
" 'NA': 0.0 # No Basement\n",
" },\n",
" 'BsmtFinType2': {\n",
" 'GLQ': 6.0, # Good Living Quarters\n",
" 'ALQ': 5.0, # Average Living Quarters\n",
" 'BLQ': 4.0, # Below Average Living Quarters\n",
" 'Rec': 3.0, # Average Rec Room\n",
" 'LwQ': 2.0, # Low Quality\n",
" 'Unf': 1.0, # Unfinshed\n",
" 'NA': 0.0 # No Basement\n",
" },\n",
" 'HeatingQC': {\n",
" 'Ex': 5.0, \n",
" 'Gd': 4.0, \n",
" 'TA': 3.0, \n",
" 'Fa': 2.0,\n",
" 'Po': 1.0\n",
" },\n",
" 'CentralAir': {\n",
" 'N': 0.0,\n",
" 'Y': 1.0\n",
" },\n",
" 'MiscFeature': {\n",
" 'Elev': 3.0, # Elevator\n",
" 'Gar2': 2.0, # 2nd Garage (if not described in garage section)\n",
" 'TenC': 2.0, # Tennis Court\n",
" 'Othr': 1.0, # Other\n",
" 'Shed': 1.0, # Shed (over 100 SF)\n",
" 'NA': 0.0 # None\n",
" },\n",
" 'HouseStyle': {\n",
" '2.5Fin': 7.0, # Two and one-half story: 2nd level finished 7\n",
" '2.5Unf': 6.0, #Two and one-half story: 2nd level unfinished 6\n",
" '2Story': 5.0, #Two story 5\n",
" '1.5Fin': 4.0, #One and one-half story: 2nd level finished 4\n",
" '1.5Unf': 3.0, #One and one-half story: 2nd level unfinished 3\n",
" '1Story': 2.0, #One story 2\n",
" 'SLvl': 1.0, #Split Level 1\n",
" 'SFoyer': 0.0 #Split Foyer 0\n",
" },\n",
" 'RoofStyle': {\n",
" 'Mansard': 5.0, # Mansard\n",
" 'Hip': 4.0, # Hip\n",
" 'Gable': 3.0, # Gable\n",
" 'Gambrel': 2.0, # Gabrel (Barn)\n",
" 'Flat': 1.0, # Flat\n",
" 'Shed': 0.0 #Shed\n",
" },\n",
" 'MasVnrType': {\n",
" 'Stone': 3.0, # Stone\n",
" 'BrkCmn': 2.0, # Brick Common\n",
" 'BrkFace': 1.0, # Brick Face\n",
" 'None': 1.0, # None\n",
" 'CBlock': 0.0 # Cinder Block \n",
" },\n",
" 'Foundation': {\n",
" 'PConc': 3.0, # Poured Contrete\n",
" 'CBlock': 2.0, # Cinder Block\n",
" 'Slab': 2.0, # Slab\n",
" 'BrkTil': 1.0, # Brick & Tile\n",
" 'Stone': 1.0, # Stone\n",
" 'Wood': 0.0 #Wood\n",
" },\n",
" 'Electrical': { # Electrical system\n",
" 'SBrkr': 4.0, # Standard Circuit Breakers & Romex\n",
" 'FuseA': 3.0, # Fuse Box over 60 AMP and all Romex wiring (Average)\n",
" 'FuseF': 2.0, # 60 AMP Fuse Box and mostly Romex wiring (Fair)\n",
" 'FuseP': 1.0, # 60 AMP Fuse Box and mostly knob & tube wiring (poor)\n",
" 'Mix': 0.0 # Mixed\n",
" }\n",
"}\n",
"all_data = all_data.replace(ranking_lookup)\n"
]
},
{
"cell_type": "code",
"execution_count": 2679,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"VinylSd 1015\n",
"MetalSd 447\n",
"HdBoard 406\n",
"Wd Sdng 391\n",
"Plywood 270\n",
"CmentBd 126\n",
"Wd Shng 81\n",
"BrkFace 47\n",
"Stucco 47\n",
"AsbShng 38\n",
"Brk Cmn 22\n",
"ImStucc 15\n",
"Stone 6\n",
"AsphShn 4\n",
"CBlock 3\n",
"Other 1\n",
"Name: Exterior2nd, dtype: int64"
]
},
"execution_count": 2679,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"all_data['Exterior2nd'].value_counts()"
]
},
{
"cell_type": "code",
"execution_count": 2680,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# Convert these to float64.\n",
"numeric_ranked = [\n",
" 'Utilities',\n",
" 'Street',\n",
" 'FireplaceQu',\n",
" 'ExterQual',\n",
" 'ExterCond',\n",
" 'BsmtQual',\n",
" 'BsmtExposure',\n",
" 'BsmtCond',\n",
" 'GarageQual',\n",
" 'GarageCond',\n",
" 'GarageFinish',\n",
" 'KitchenQual',\n",
" 'PoolQC',\n",
" 'Functional',\n",
" 'Fence',\n",
" 'RoofMatl',\n",
" 'PavedDrive',\n",
" 'Condition1',\n",
" 'Condition2',\n",
" 'BsmtFinType1',\n",
" 'BsmtFinType2',\n",
" 'HeatingQC',\n",
" 'CentralAir',\n",
" 'MiscFeature',\n",
" 'HouseStyle',\n",
" 'RoofStyle',\n",
" 'Foundation',\n",
" 'Electrical',\n",
" 'GarageType'\n",
"]\n",
"for ranked in numeric_ranked:\n",
" all_data[ranked] = all_data[ranked].astype('float64')"
]
},
{
"cell_type": "code",
"execution_count": 2681,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'Total remaining features w NaN values: 0'"
]
},
"execution_count": 2681,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# check if there are any missing values\n",
"\"Total remaining features w NaN values: %d\" %len(np.array(all_data.columns[(pd.isnull(all_data).sum()>0)]))"
]
},
{
"cell_type": "code",
"execution_count": 2682,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array(['MSSubClass', 'MSZoning', 'Alley', 'LotShape', 'LandContour',\n",
" 'LotConfig', 'LandSlope', 'Neighborhood', 'BldgType', 'Exterior1st',\n",
" 'Exterior2nd', 'Heating', 'SaleType', 'SaleCondition'], dtype=object)"
]
},
"execution_count": 2682,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.array(all_data.columns[all_data.dtypes=='object'])"
]
},
{
"cell_type": "code",
"execution_count": 2683,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# not sure if this helps us\n",
"#le=LabelEncoder()\n",
"\n",
"# all non-float features\n",
"#category=np.array(all_data.columns[all_data.dtypes=='object'])\n",
"\n",
"# transform all non-float features to label encoded\n",
"#for i in category:\n",
" #all_data.ix[:,i]=le.fit_transform(all_data.ix[:,i])"
]
},
{
"cell_type": "code",
"execution_count": 2684,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([], dtype=object)"
]
},
"execution_count": 2684,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.array(all_data.columns[all_data.dtypes=='int64'])"
]
},
{
"cell_type": "code",
"execution_count": 2685,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"dummy_features = np.array(all_data.columns[all_data.dtypes=='object'])\n",
"dummies_df = pd.DataFrame(ids)\n",
"for feature in dummy_features:\n",
" dummies = pd.get_dummies(all_data[feature], prefix=feature)\n",
" all_data.drop(feature, axis=1, inplace=True)\n",
" dummies_df = dummies_df.join(dummies)\n",
"dummies_df.drop('Id', axis=1, inplace=True)"
]
},
{
"cell_type": "code",
"execution_count": 2686,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array(['LotFrontage', 'LotArea', 'Street', 'Utilities', 'Condition1',\n",
" 'Condition2', 'HouseStyle', 'OverallQual', 'OverallCond',\n",
" 'YearBuilt', 'YearRemodAdd', 'RoofStyle', 'RoofMatl', 'MasVnrType',\n",
" 'MasVnrArea', 'ExterQual', 'ExterCond', 'Foundation', 'BsmtQual',\n",
" 'BsmtCond', 'BsmtExposure', 'BsmtFinType1', 'BsmtFinSF1',\n",
" 'BsmtFinType2', 'BsmtFinSF2', 'BsmtUnfSF', 'TotalBsmtSF',\n",
" 'HeatingQC', 'CentralAir', 'Electrical', '1stFlrSF', '2ndFlrSF',\n",
" 'LowQualFinSF', 'GrLivArea', 'BsmtFullBath', 'BsmtHalfBath',\n",
" 'FullBath', 'HalfBath', 'BedroomAbvGr', 'KitchenAbvGr',\n",
" 'KitchenQual', 'TotRmsAbvGrd', 'Functional', 'Fireplaces',\n",
" 'FireplaceQu', 'GarageType', 'GarageYrBlt', 'GarageFinish',\n",
" 'GarageCars', 'GarageArea', 'GarageQual', 'GarageCond',\n",
" 'PavedDrive', 'WoodDeckSF', 'OpenPorchSF', 'EnclosedPorch',\n",
" '3SsnPorch', 'ScreenPorch', 'PoolArea', 'PoolQC', 'Fence',\n",
" 'MiscFeature', 'MiscVal', 'MoSold', 'YrSold'], dtype=object)"
]
},
"execution_count": 2686,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# look at all scalar categories\n",
"np.array(all_data.columns[all_data.dtypes=='float64'])"
]
},
{
"cell_type": "code",
"execution_count": 2687,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# separate the numerically ranked features from the scalar\n",
"float_feats = np.array(all_data.columns[all_data.dtypes=='float64'])\n",
"numeric_ranked = np.array(numeric_ranked)\n",
"features_to_scale = np.setdiff1d(float_feats, numeric_ranked)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Feature scaling"
]
},
{
"cell_type": "code",
"execution_count": 2688,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# TODO: compare preprocessing.scale to np.log1p\n",
"#all_data[features_to_scale] = preprocessing.scale(all_data[features_to_scale])\n",
"all_data[features_to_scale] = np.log1p(all_data[features_to_scale])"
]
},
{
"cell_type": "code",
"execution_count": 2689,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# add dummy columns; note, by joining dummies as a last step, we avoid scaling the dummy values\n",
"all_data = all_data.join(dummies_df)"
]
},
{
"cell_type": "code",
"execution_count": 2690,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>LotFrontage</th>\n",
" <th>LotArea</th>\n",
" <th>Street</th>\n",
" <th>Utilities</th>\n",
" <th>Condition1</th>\n",
" <th>Condition2</th>\n",
" <th>HouseStyle</th>\n",
" <th>OverallQual</th>\n",
" <th>OverallCond</th>\n",
" <th>YearBuilt</th>\n",
" <th>...</th>\n",
" <th>SaleType_New</th>\n",
" <th>SaleType_Oth</th>\n",
" <th>SaleType_Other</th>\n",
" <th>SaleType_WD</th>\n",
" <th>SaleCondition_Abnorml</th>\n",
" <th>SaleCondition_AdjLand</th>\n",
" <th>SaleCondition_Alloca</th>\n",
" <th>SaleCondition_Family</th>\n",
" <th>SaleCondition_Normal</th>\n",
" <th>SaleCondition_Partial</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>4.189655</td>\n",
" <td>9.042040</td>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>3.0</td>\n",
" <td>3.0</td>\n",
" <td>5.0</td>\n",
" <td>2.079442</td>\n",
" <td>1.791759</td>\n",
" <td>7.602900</td>\n",
" <td>...</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>4.394449</td>\n",
" <td>9.169623</td>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>2.0</td>\n",
" <td>3.0</td>\n",
" <td>2.0</td>\n",
" <td>1.945910</td>\n",
" <td>2.197225</td>\n",
" <td>7.589336</td>\n",
" <td>...</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>4.234107</td>\n",
" <td>9.328212</td>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>3.0</td>\n",
" <td>3.0</td>\n",
" <td>5.0</td>\n",
" <td>2.079442</td>\n",
" <td>1.791759</td>\n",
" <td>7.601902</td>\n",
" <td>...</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>4.110874</td>\n",
" <td>9.164401</td>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>3.0</td>\n",
" <td>3.0</td>\n",
" <td>5.0</td>\n",
" <td>2.079442</td>\n",
" <td>1.791759</td>\n",
" <td>7.557995</td>\n",
" <td>...</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>4.442651</td>\n",
" <td>9.565284</td>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>3.0</td>\n",
" <td>3.0</td>\n",
" <td>5.0</td>\n",
" <td>2.197225</td>\n",
" <td>1.791759</td>\n",
" <td>7.601402</td>\n",
" <td>...</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5 rows × 188 columns</p>\n",
"</div>"
],
"text/plain": [
" LotFrontage LotArea Street Utilities Condition1 Condition2 \\\n",
"0 4.189655 9.042040 1.0 1.0 3.0 3.0 \n",
"1 4.394449 9.169623 1.0 1.0 2.0 3.0 \n",
"2 4.234107 9.328212 1.0 1.0 3.0 3.0 \n",
"3 4.110874 9.164401 1.0 1.0 3.0 3.0 \n",
"4 4.442651 9.565284 1.0 1.0 3.0 3.0 \n",
"\n",
" HouseStyle OverallQual OverallCond YearBuilt ... \\\n",
"0 5.0 2.079442 1.791759 7.602900 ... \n",
"1 2.0 1.945910 2.197225 7.589336 ... \n",
"2 5.0 2.079442 1.791759 7.601902 ... \n",
"3 5.0 2.079442 1.791759 7.557995 ... \n",
"4 5.0 2.197225 1.791759 7.601402 ... \n",
"\n",
" SaleType_New SaleType_Oth SaleType_Other SaleType_WD \\\n",
"0 0.0 0.0 0.0 1.0 \n",
"1 0.0 0.0 0.0 1.0 \n",
"2 0.0 0.0 0.0 1.0 \n",
"3 0.0 0.0 0.0 1.0 \n",
"4 0.0 0.0 0.0 1.0 \n",
"\n",
" SaleCondition_Abnorml SaleCondition_AdjLand SaleCondition_Alloca \\\n",
"0 0.0 0.0 0.0 \n",
"1 0.0 0.0 0.0 \n",
"2 0.0 0.0 0.0 \n",
"3 1.0 0.0 0.0 \n",
"4 0.0 0.0 0.0 \n",
"\n",
" SaleCondition_Family SaleCondition_Normal SaleCondition_Partial \n",
"0 0.0 1.0 0.0 \n",
"1 0.0 1.0 0.0 \n",
"2 0.0 1.0 0.0 \n",
"3 0.0 0.0 0.0 \n",
"4 0.0 1.0 0.0 \n",
"\n",
"[5 rows x 188 columns]"
]
},
"execution_count": 2690,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"all_data.head()"
]
},
{
"cell_type": "code",
"execution_count": 2691,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# convert all ints64s to float64s\n",
"all_data.ix[:,(all_data.dtypes=='int64')] = all_data.ix[:,(all_data.dtypes=='int64')].astype('float64')"
]
},
{
"cell_type": "code",
"execution_count": 2692,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# split data back into training, testing and targets\n",
"X_train = all_data[:train.shape[0]]\n",
"X_test = all_data[train.shape[0]:]\n",
"y = np.log1p(train.SalePrice)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Outlier detection\n",
"We'll drop any outliers with a threshold lower than 0.1. May want to experiment with increasing the threshold."
]
},
{
"cell_type": "code",
"execution_count": 2693,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"import statsmodels.api as sm\n",
"model = sm.OLS(y, X_train)\n",
"results = model.fit()"
]
},
{
"cell_type": "code",
"execution_count": 2694,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Outliers: [31, 89, 463, 524, 589, 633, 682, 969, 1183, 1299, 1325]\n"
]
}
],
"source": [
"outlier_threshold = 0.1\n",
"outlier_test = results.outlier_test()\n",
"outliers = [x[i] for i,t in enumerate(outlier_test.iloc[:,2]) if t < outlier_threshold]\n",
"print 'Outliers: ', outliers"
]
},
{
"cell_type": "code",
"execution_count": 2695,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x178ae2190>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from statsmodels.graphics.regressionplots import plot_leverage_resid2\n",
"fig, ax = plt.subplots(figsize=(8,6))\n",
"fig = plot_leverage_resid2(results, ax = ax)"
]
},
{
"cell_type": "code",
"execution_count": 2696,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# drop the outliers\n",
"o = np.array(outliers) - 1\n",
"X_train = X_train.drop(o, axis=0)\n",
"y = y.drop(o, axis=0)\n",
"\n",
"X_train.index = range(0, X_train.shape[0])\n",
"y.index = range(0, y.shape[0])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Feature selection\n",
"What features should we use?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Lasso"
]
},
{
"cell_type": "code",
"execution_count": 2697,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"0.00050000000000000001"
]
},
"execution_count": 2697,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.linear_model import Lasso, LassoCV\n",
"model_lasso_cv = LassoCV(alphas = [1e-4, 5e-4, 1e-3, 5e-3, 1e-2, 5e-2]).fit(X_train, y)\n",
"model_lasso_cv.alpha_"
]
},
{
"cell_type": "code",
"execution_count": 2698,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x17a0f3410>"
]
},
"execution_count": 2698,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nDgAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x17a17fa90>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from sklearn.cross_validation import cross_val_score\n",
"from sklearn.metrics import make_scorer, mean_squared_error\n",
"\n",
"scorer = make_scorer(mean_squared_error, False)\n",
"\n",
"def rmse_cv(model, X, y):\n",
" return (cross_val_score(model, X, y, scoring=scorer)).mean()\n",
"\n",
"alphas = [1e-4, 5e-4, 1e-3, 5e-3]\n",
"cv_lasso = [rmse_cv(Lasso(alpha = alpha, max_iter=50000), X_train, y) for alpha in alphas]\n",
"pd.Series(cv_lasso, index = alphas).plot()"
]
},
{
"cell_type": "code",
"execution_count": 2699,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Feature</th>\n",
" <th>Coefficient Estimate</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>35</th>\n",
" <td>BsmtHalfBath</td>\n",
" <td>0.383369</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>OverallQual</td>\n",
" <td>0.301478</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>OverallCond</td>\n",
" <td>0.197466</td>\n",
" </tr>\n",
" <tr>\n",
" <th>129</th>\n",
" <td>Neighborhood_Veenker</td>\n",
" <td>0.111021</td>\n",
" </tr>\n",
" <tr>\n",
" <th>113</th>\n",
" <td>Neighborhood_Gilbert</td>\n",
" <td>0.093909</td>\n",
" </tr>\n",
" <tr>\n",
" <th>123</th>\n",
" <td>Neighborhood_SWISU</td>\n",
" <td>0.086292</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>LotArea</td>\n",
" <td>0.084698</td>\n",
" </tr>\n",
" <tr>\n",
" <th>122</th>\n",
" <td>Neighborhood_OldTown</td>\n",
" <td>0.083532</td>\n",
" </tr>\n",
" <tr>\n",
" <th>32</th>\n",
" <td>LowQualFinSF</td>\n",
" <td>0.083040</td>\n",
" </tr>\n",
" <tr>\n",
" <th>128</th>\n",
" <td>Neighborhood_Timber</td>\n",
" <td>0.067312</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Feature Coefficient Estimate\n",
"35 BsmtHalfBath 0.383369\n",
"7 OverallQual 0.301478\n",
"8 OverallCond 0.197466\n",
"129 Neighborhood_Veenker 0.111021\n",
"113 Neighborhood_Gilbert 0.093909\n",
"123 Neighborhood_SWISU 0.086292\n",
"1 LotArea 0.084698\n",
"122 Neighborhood_OldTown 0.083532\n",
"32 LowQualFinSF 0.083040\n",
"128 Neighborhood_Timber 0.067312"
]
},
"execution_count": 2699,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"coeff_df = pd.DataFrame(X_train.columns)\n",
"coeff_df.columns = ['Feature']\n",
"coeff_df[\"Coefficient Estimate\"] = pd.Series(model_lasso.coef_)\n",
"coeff_df.sort_values('Coefficient Estimate', ascending=False).head(10)"
]
},
{
"cell_type": "code",
"execution_count": 2700,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Lasso picked 56 variables and eliminated the other 72 variables\n"
]
}
],
"source": [
"print(\"Lasso picked \" + str(sum(coeff_df[\"Coefficient Estimate\"] > 0)) + \" variables and eliminated the other \" + str(sum(coeff_df[\"Coefficient Estimate\"] == 0)) + \" variables\")"
]
},
{
"cell_type": "code",
"execution_count": 2701,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# get only the features w coefficients > 0\n",
"features = coeff_df[coeff_df[\"Coefficient Estimate\"] > 0]['Feature'].values"
]
},
{
"cell_type": "code",
"execution_count": 2702,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"0.93927740809728477"
]
},
"execution_count": 2702,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"model_lasso = Lasso(alpha=model_lasso_cv.alpha_, max_iter=50000).fit(X_train, y)\n",
"model_lasso.score(X_train, y)"
]
},
{
"cell_type": "code",
"execution_count": 2703,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x177e56310>]"
]
},
"execution_count": 2703,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nilIIIYTC+BvIgv68bvO+DwAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x17a17f590>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# This is a good way to see how model predict data\n",
"p_pred = np.expm1(model_lasso.predict(X_train))\n",
"plt.scatter(p_pred, np.expm1(y))\n",
"plt.plot([min(p_pred),max(p_pred)], [min(p_pred),max(p_pred)], c=\"red\")"
]
},
{
"cell_type": "code",
"execution_count": 2704,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"p = np.expm1(model_lasso.predict(X_test))\n",
"solution = pd.DataFrame({'id':test.Id, 'SalePrice':p}, columns=['id', 'SalePrice'])\n",
"solution.to_csv('lasso_sol.csv', index = False)"
]
},
{
"cell_type": "code",
"execution_count": 2705,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"import xgboost as xgb\n",
"dtrain = xgb.DMatrix(X_train[features], label = y)\n",
"dtest = xgb.DMatrix(X_test[features])\n",
"\n",
"params = {\"max_depth\":5, \"eta\":0.1}\n",
"model = xgb.cv(params, dtrain, num_boost_round=500, early_stopping_rounds=100)"
]
},
{
"cell_type": "code",
"execution_count": 2706,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x177ed8bd0>"
]
},
"execution_count": 2706,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAEDCAYAAAAlRP8qAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xl8VPW9//HXmX0m+0ICIYSdL5uAolYFFVukuNflWmmL\nttpK69Ji/VVrfw9vLfaWW7WrWIu9tqX2trSoWP3VBW1FKxXByKIsX/YQshKWLJPJ7L8/ziQESMIQ\nArPk83yUMnPOmXM+3wTf55zvOec7RjQaRQghROqzJLoAIYQQfUMCXQgh0oQEuhBCpAkJdCGESBMS\n6EIIkSYk0IUQIk3Y4llIKTUb+DnmDuBZrfWPj5l/KfA3YFds0ota6x/2ZaFCCCF6dsJAV0pZgEXA\nZ4BqYK1S6m9a663HLPqu1vra01CjEEKIOMTT5XI+sF1rXaG1DgJLgeu6WM7o08qEEEKclHi6XAYD\nlZ3e78MM+WNdqJRaD1QB39Fab+6D+oQQQsSpry6KlgNlWuspmN0zL/XReoUQQsQpniP0KqCs0/vS\n2LQOWuuWTq9fU0r9SimVr7U+2N1Ky8vLZRAZIYTohalTp3bZxR1PoK8FRimlhgI1wC3AnM4LKKWK\ntdZ1sdfnA0ZPYd6pqDg2f+rKy8vP2LbOJGlXapF2pZZkbVd5eXm3804Y6FrrsFLqHmAFR25b3KKU\nmgdEtdbPADcppb4BBAEf8Pk+qVwIIUTc4roPXWv9OqCOmba40+ungKf6tjQhhBAnQ54UFUKINCGB\nLoQQaUICXQgh0oQEuhBCpImEBnpbIJTIzQshRFpJaKBX1beceCEhRNJqbm7mzTff7NVnlyxZgt/v\n7+OK+reEBnp1gzeRmxdCnKLGxkbeeuutXn12yZIl+Hy+Ey4XDod7tf7+KK770E+X6gY5Qhcilf30\npz+lvr6e66+/nosuuoj8/Hxee+01gsEgl19+Offccw8+n4/58+dTV1dHOBzmrrvuoqGhgfr6em69\n9Vby8vJYsmTJUetdvnw5K1asoLW1lUgkwr333suTTz5JVlYW27dvZ/bs2YwZM4Y//OEP+P1+nnrq\nKYYMGcJrr73Gr371K6xWK1lZWTz33HNEIhGeeOIJ1q5dSyAQ4Itf/CI333zzcW156KGHcDqdbNmy\nhYMHD3LbbbfxwgsvsH79eiZPnszChQsBWLVqFU8++SSBQICysjIWLlyI2+3mqaeeYuXKlbS1tXH2\n2WezYMECAObOncvkyZP54IMPaG5u5r/+679O2xOoCQ30Pfv3c8zzSkKIXvrtK5tYtaHqxAuehGmT\nB3P7NRO6nX///fezceNGli9fzqpVq3jjjTd4/vnniUajfOMb3+DDDz/k4MGDFBcXs3ix+SxiS0sL\nmZmZ/P73v+e5554jJyeny3Vv2bKFV155haysLNasWYPWmtdee42srCxmzpzJzTffzLJly/jDH/7A\nH//4Rx566CF+9atf8eyzz1JUVERLi3nA+Pzzz5Odnc2yZcsIBALMmTOHadOmMXjw4OO22dzczF/+\n8hf+8Y9/cP/99/P8888zatQobrjhBrZu3UpxcTFPP/00v//973G5XPzmN7/ht7/9LXfffTdz587l\n7rvvBuCBBx5g5cqVzJgxAzDPMpYtW8Y777zDokWL+N3vfncqv5ZuJTTQqxrrErl5IUQfeu+991i1\nahXXX3890WgUn89HRUUFU6dO5cc//jE/+clPuPTSSzn33HMBiEajRKPdj9F30UUXkZWV1fH+rLPO\noqCgAICysjKmTZsGwJgxY1izZg1gjg/13e9+lyuuuILLL7+8o65t27bx+uuvA+YOpaKiostAv+yy\nyzrWmZuby6hRowAYPXo0VVVV1NbWsmPHDubMmUM0GiUUCjFlyhQA3n//fZ599ll8Ph9NTU2MHj26\nI9BnzZoFwMSJE6muru7FTzc+CQ30/b6GRG5eiLRy+zUTejyaPhPmzZvXZXfG8uXLeeedd/jFL37B\nhRdeyF133XXU/LfeeotFixZhGAY//KH57ZUej+eoZex2e8drwzBwOBwAWCwWQiHzjrlHHnmEjRs3\nsnLlSm644QZefPFFAB5++OGOHUC7n/3sZ7zzzjsYhsHy5csBjlqnzXYkHi0WC+FwGIvFwrRp0/jJ\nT35y1LoCgQALFizgxRdfpLi4mEWLFh11wberWk+HxN62SBNeXzCRJQghTkFGRgZtbW0ATJ8+nRde\neIHW1lYA6urqOHjwIPX19bhcLq655hruuOMONm82v/smMzOzo1tk5syZvPTSSyxfvpwJE3q/U6qs\nrGTSpEl885vfpKCggNraWqZPn86f/vSnjiDds2cPbW1t3HfffR3bjNfkyZNZt24de/fuBcDn87Fn\nzx78fj+GYZCXl4fX6+WNN97odh09nZWcqoQeoRvOVqobWhg9JC+RZQgheik3N5cxY8ZwzTXXcMkl\nl3D11Vfz+c+bg61mZGTw+OOPU1FRwWOPPYbFYsFut/PII48AcPPNN/PVr36V4uLi4y6KnohhdP2N\nl4899hh79uwB4MILL2Ts2LEopaiqquL6668HID8/n6ee6t1Ygvn5+SxcuJBvf/vbBAIBDMNg/vz5\nDBs2jJtuuomrrrqKAQMGcNZZZ3Vba3e19wXjdO4telJeXh5duOGv3DvlXi49p/R0byspxzU+VdKu\n1CLtSi3J2q5YXV3uFRLa5WI4W6naL7cuCiFEX0hsoNtC7G2QC6NCCNEXEj441z65dVEIIfpEwgN9\nf6scoQshRF9IeKAHLM00eQOJLkMIIVJewgO9/dZFIYQQpyahgW7BgsXVSvV+GXVRiFTU2+Fz582b\n1/FQkeg7CQ30XGe+HKELkcK6Gz73REPeLl68mMzMzF5vN1HPzyS7hD4pOihrAAf9DVTuP5jIMoQQ\nvdR5+Fyr1YrT6SQ7O5vdu3fz+uuvc/fdd1NbW0sgEODWW2/lP/7jPwD49Kc/zYsvvojX6+VrX/sa\nU6dOZd26dR2jGbaPfdKuqqqKO+64g8mTJ7N582YWL17MVVddxZw5c3j33XcpKipi/vz5PP7449TW\n1vK9732Pyy67jB07dvDQQw8RCoWIRCI8+eSTlJWV8fLLL/Pcc88RCoWYNGkSjzzyyHFPcL777rv8\n9re/7Rhk7PbbbycYDPK3v/0Np9PJM888Q3Z2NpWVlfzgBz/g0KFDuN1uHn30UYYPH87bb7/N008/\nTSgUIjc3lyeeeIL8/HwWLVpEdXU1lZWV1NbWcuuttzJ37tw++X0kNNDL8gayqWELlXLrohCn7Ln1\nL7C68qM+XecFQ85h7pQbu53fefjcNWvWMG/ePP7+979TUlICwMKFC8nOzsbv93PTTTcxa9YscnJy\njgrPvXv38rOf/YxHH32U+fPn88Ybb3DNNdcct629e/fy2GOPMWnSJMAcR+Wiiy7igQce4J577uEX\nv/gFS5YsYdu2bXz3u9/lsssuY+nSpdx2221cffXVHaG+c+dOXn31VZYuXYrVauUHP/gBL7/8Mtdd\nd91x29yxYwcvvfQSPp+PWbNm8cADD7B8+XIWLlzISy+9xK233srDDz/MggULKCsrY+PGjTzyyCMs\nWbKEc889l7/+9a8ALFu2jN/85jc8+OCDAOzevZvnnnuO5uZmZs+ezRe+8AWsVmvvf1ExCT5CLwKg\n3ttAJBLFYjl9YxwIIU6/SZMmdYQ5mN9K1N4lU1tbS0VFBZMmTTqqy2Tw4MEoZX4vwoQJE6iq6npM\n95KSko4wB3MEw+nTpwPmcLdOpxOLxYJSqmOI2ilTpvDrX/+ampoaZs2axdChQ1m9ejWbN2/mpptu\nIhqN4vf7O4blPdanPvUp3G43breb7OzsjuFwx4wZw7Zt22htbWXdunV861vf6mhT+yBgNTU1zJ8/\nn/r6ekKhEKWlR4Y4mTFjBjabjby8PAoLC2loaKC4uDj+H3Q3EhroxZmFAIRtLew/7KM433OCTwgh\nujN3yo09Hk2fCW63u+P1mjVrWL16NcuWLcPhcDB37twuv0O0c/eK1WrF7/dTW1vL17/+dQzD4JZb\nbmH69OlHrRs4bnjb9vUYhtERqldffTWTJ09m5cqV3HnnnSxYsIBoNMr111/Pfffdd9T6uhrC99iu\nn87D4IbDYSKRCNnZ2V2O2Pjoo49yxx13MGPGDNasWcOiRYu6bHP7uvpCQgN9YKZ5hG44vVTWNUug\nC5FiOg+fe+yFyubmZrKzs3E4HOzcuZMNGzbEvd6BAwfy0ksvdbzv6qi9pwuj7fMqKysZMmQIc+fO\npbq6Gq0106ZN46677uK2224jPz+fxsZGvF4vM2fOZObMmR3rWLFixQnrzMzMpLS0lNdff53Zs2cD\nsHXrVsaOHYvX66WoyMy4kxmi91QkNNAHZBRgYGC4Wqmsa+bccad+yiGEOHM6D5/rcrmO6rq4+OKL\nWbp0KVdddRXDhw/v+GYf6JshZHtaR/u81157jZdffhmbzcaAAQP4xje+QXZ2NvPnz+f2228nEolg\nt9v5/ve/f1RX0cls7/HHH+eRRx7h6aefJhwOc+WVVzJ27FjuvvtuvvnNb5KTk8MFF1zQbVdSX0ro\n8LlTp07lrpcfZn9TIxfbv8I3P3/26dpWUg6DeaqkXalF2pVakrVdSTt8LkBZ7iAMe5Dd9TKmixBC\nnIqEB3ppzkAAqptq5WEBIYQ4BQkP9JIsM9D91kYONrUluBohhEhdCQ/0wdnmhVDDZd7pIoQQoncS\nH+ixI3SL20tlnYzpIoQQvZXwQM90ZpBpz5QjdCGEOEUJD3SAwTkDMZytVNQfTnQpQgiRsuIKdKXU\nbKXUVqXUNqXUgz0sd55SKqiUuuFkihiSPRDDgMrDtSfzMSGEEJ2cMNCVUhZgEfBZYAIwRyk1tpvl\n/ht442SLKMk2+9G9kcM0thw/1oMQQogTi+cI/Xxgu9a6QmsdBJYCx48zCfcCzwP1J1tE+50uFreX\nffVyYVQIIXojnkAfDFR2er8vNq2DUqoE+JzW+mngpAdpaL/TxXC1sLe26WQ/LoQQgr4bnOvnQOe+\n9bhCvby8HIBINIIVKxG3l7Ubd1Lk7PtvMGrfVrqRdqUWaVdqSbV2xRPoVUBZp/elsWmdnQssVUoZ\nQCFwhVIqqLV+uacVdx74pqThDfaGa/H6nH0+IE6yDrJzqqRdqUXalVqStV097WTiCfS1wCil1FCg\nBrgFmNN5Aa31iPbXSqnfAa+cKMyPVZo9kMrGKvbsryMajfbJ8JpCCNGfnLAPXWsdBu4BVgCbgKVa\n6y1KqXlKqTu7+EivRthqvzDaZjSy/5CvN6sQQoh+La4+dK3164A6Ztribpa9vTeFtA/SZbhb2F3d\nSJF8e5EQQpyUpHhSFKA0exAAFncLe2rkThchhDhZSRPog7OLsRiW2BG6BLoQQpyspAl0u9XOoKwi\nrJ4WdtfImC5CCHGykibQAcpyBoM1RE3TAdr8oUSXI4QQKSWpAn1Ijvmt24armb0ylK4QQpyUpAr0\nsligWzzmnS5CCCHil5SBbrib2SMXRoUQ4qQkVaAXZRbisNrNI3S5dVEIIU5KUgW6xbAwJLsEi9vL\n7upDRKO9euhUCCH6paQKdIAhuSVgRPDRRL0MASCEEHFLukA/cmG0mZ375H50IYSIVxIGuvndGYa7\nhe2VEuhCCBGvpAv09nvRLe5mdkigCyFE3JIu0HNd2WQ5MrBnedm+77BcGBVCiDglXaAbhsGQnBIi\nNi9ev4+aA95ElySEECkh6QIdYv3oRqwffa90uwghRDySMtCH5Q0BwOJpYofc6SKEEHFJykAfEQt0\na0aT3OkihBBxSspAL80ehM1iw5njZee+w4QjcmFUCCFOJCkD3Wa1UZZTQtjRSFswyL56GUpXCCFO\nJCkDHWB4XhlRI4LhapH70YUQIg5JHOixC6PSjy6EEHFJ2kAfkVcGgDWjme2VhxJcjRBCJL+kDfSy\nnBIshgV3npddVU0EguFElySEEEktaQPdYXNQmj2IsOMwoXBYul2EEOIEkjbQAYbllRImhOHysmXP\nwUSXI4QQSS2pA729H93iaWLLbgl0IYToSVIHevudLhkFrWzZc1BGXhRCiB4kdaAPyzUD3Z3TSnNr\ngH31LQmuSAghkldSB7rb7qIkqxif9QAQlX50IYToQVIHOsCogmEEo34Ml5fNuw8kuhwhhEhaSR/o\no/OHA+DKa5YLo0II0YPkD/QCM9Bzi3xUN3g53OxPcEVCCJGckj7Qy3IH47DaiXrMo3PpRxdCiK4l\nfaDbLFZG5JXRFD4AlpD0owshRDds8SyklJoN/BxzB/Cs1vrHx8y/FngUiABB4D6t9aq+KnJ0wXC2\nNuzEntXMxh0NfbVaIYRIKyc8QldKWYBFwGeBCcAcpdTYYxZ7S2s9WWt9NnAH8D99WWR7P3rxkAC7\nqhppbJF+dCGEOFY8XS7nA9u11hVa6yCwFLiu8wJa69ZObzMxj9T7THugO3OaAOQoXQghuhBPoA8G\nKju93xebdhSl1OeUUluAV4Db+6Y8U4Enj3x3Lk3UA1E2bN/fl6sXQoi00GcXRbXWL2mtxwGfA37Y\nV+ttN6pgGC3BZjxZIQl0IYToQjwXRauAsk7vS2PTuqS1fk8pNUIpla+17vEew/Ly8viqBDw+BwAF\nxU1U7rDz5jsfkJ8Z1zXdk95WKpF2pRZpV2pJtXbFk4hrgVFKqaFADXALMKfzAkqpkVrrnbHX5wCO\nE4U5wNSpU+Mu1LM/m5X/XMOAsgiVOyDiLGbq1GFxfba8vPyktpUqpF2pRdqVWpK1XT3tZE7Y5aK1\nDgP3ACuATcBSrfUWpdQ8pdSdscVuVEp9opT6CHgSuPnUyz7ayLyhWC1Wmo06ANZvk24XIYToLK4+\nC63164A6ZtriTq8fAx7r29KO5rA5GJU/jG0HdlGQP4UN2xuIRKJYLMbp3KwQQqSMpH9StLNxA0YR\njUYZNjJMc2uAXdWNiS5JCCGSRkoF+vgBowFwF5hBXr6lLpHlCCFEUkmpQB9TOALDMGikFovFYM3m\n2kSXJIQQSSOlAt1jdzM8dwi7D1cwbngO2/Ye5lBTW6LLEkKIpJBSgQ4wbsBowpEww0eZowt8KN0u\nQggBpGSgjwLAnnsYQLpdhBAiJmUDvaq1gsEDMli3bT+BYDjBVQkhROKlXKBnOTMZklPCtobdTB03\nAH8gzMc7ZfRFIYRIuUAH8yjdHw5QOtQ8Ml+zSbpdhBAiJQN9YpH50GqLrYYMt501m+uIRqMJrkoI\nIRIrZQPdwOCT+q2cN76YhsM+dMWhRJclhBAJlZKBnunMYGT+ULY17OKCSQMAeGfdvgRXJYQQiZWS\ngQ4waeBYwtEItpxDZHkcvLehmnC4T7/5TgghUkrqBnrxeAA21W9l+uQSDjf75W4XIUS/lrKBPqZg\nOE6bk411W7jkbPMrTt9d1+0XKQkhRNpL2UC3WW1MKBpDdXMdRcUGhTku/r2xmmBIHjISQvRPKRvo\nAJOKxwLwSf1WLj67FG9biA+31Ce4KiGESIyUDvTJA81+9A21R7pd3vlI7nYRQvRPKR3oJVnFFLjz\n+LhuK8MHZTF0YBYfbKqhscWf6NKEEOKMS+lANwyDswdNoCXgZfvB3Vz+qaGEwlHeLpejdCFE/5PS\ngQ5w7uBJAHxYvZEZ55Risxq8uaZChgIQQvQ7KR/oE4vH4rQ6WFu1gZxMJxdMHMTe2mb0XhkKQAjR\nv6R8oDusdiYPHE9Ncz3VTbVc/qmhALz5wd4EVyaEEGdWygc6HN3tMmX0AAbkufnX+n34/KEEVyaE\nEGdOWgT6OYMmYhgGH1ZtxGIxuPy8Mnz+sNzCKIToV9Ii0LNdWaiCEegDu2hqa2bWBUOxWQ1e/tdO\nuTgqhOg30iLQwex2iUajfFTzCQU5bqZPGUxlXQsfaXlyVAjRP6RPoJeY/ehr9q0H4LpLRgLwt3d2\nJqwmIYQ4k9Im0EuyB1KWM5j1tZvxBloZVZrLxJEFrNu2n7rDwUSXJ4QQp13aBDrARWVTCUVCrK3a\nAMDnYkfpq3VzIssSQogzIs0C/VwAVu39EIDzxg9kUGEGG3e3cqDRl8jShBDitEurQB+YOYBR+cP4\nuG4rTW3NWCwGN142mnAElv1je6LLE0KI0yqtAh3Mo/RINMLqfR8B8JnzhpCXaeWN1RXUH2pNcHVC\nCHH6pF+gD5mKgcGqveUA2KwWLp2YTSgc4a9vbUtwdUIIcfqkXaDne3IZN2AUW/fv4ECrOUDXpGEe\nBg/I5K01e6lp8Ca4QiGEOD3SLtABppWdR5Qo/6pYA4DFYvDFz44lHInypxVbE1ydEEKcHnEFulJq\ntlJqq1Jqm1LqwS7mf0EptSH25z2l1Fl9X2r8Liqbit1q5+3d/+549H/a5BJGDM5hZfk+Nu06kMjy\nhBDitDhhoCulLMAi4LPABGCOUmrsMYvtAi7RWk8Gfgj8pq8LPRkZDg+fKj2bmuZ6dIP5pKjFYvCN\nG8ynSX/94kbC4UgiSxRCiD4XzxH6+cB2rXWF1joILAWu67yA1nq11rox9nY1MLhvyzx5nx5+EQD/\n2LWqY9rYYfnM+tRQ9tQ08cp7uxNVmhBCnBbxBPpgoLLT+330HNhfBV47laL6wvii0RRnFLK68iP8\nkUDH9FuvHEeWx86f3tgiDxsJIdJKn14UVUpdBnwFOK6f/UyzGBYuG3ER/nCALc27OqbnZDq57aoJ\n+PxhfvnX9UQiMryuECI92OJYpgoo6/S+NDbtKEqpScAzwGytdVxf6FleXh7PYr2WH8rAwGBjkz5q\nW/m2KCMHOfloaz1P//kdLhibdVrrOJ1O988wUaRdqUXalRziCfS1wCil1FCgBrgFmNN5AaVUGfAC\nMFdrHfd4tVOnTj2JUnvnff/HrKv5hLzhAxiRf2S/NGpMG/f+5G3e2tDMlZedzfCSnNNeS18rLy8/\nIz/DM03alVqkXWdWTzuZE3a5aK3DwD3ACmATsFRrvUUpNU8pdWdssYeBfOBXSql1Sqk1p15237hi\n9AwAXt3+z6Om52W7mH/LOYTCER7/44e0yfePCiFSXDxH6GitXwfUMdMWd3r9NeBrfVta35g0cBz5\n9hxW7f2QL026nlz3kSPxc8cVc83FI3jlX7v45V/X850vTcUwjARWK4QQvZeWT4p2ZjEsnJs7kXAk\nzIqd7x43/ytXT2DcsHz+tb6K5St3JKBCIYToG2kf6AATskaR4fCwYse7BMJHf3uR3WbhodvOoyDH\nxZK/b+ajrfIdpEKI1NQvAt1hsfOZEdNp8rfw79iXX3SWl+3ie18+H6vVwo+fW8uOfYcTUKUQQpya\nfhHoALNHX4rFsPDK1jeJRI9/7H9MWR73zTkHnz/E9595n8o6+do6IURq6TeBXujJZ/rQ86hsqmHN\nvvVdLnPxlMHcfdNkmrwB/nPxv6k7KF+IIYRIHf0m0AFuHH8lhmGwbNPfuzxKB/jsBcP48lXjaWhs\n48FF/2JPTdMZrlIIIXqnXwX6oKwiLi47n8rG6m6P0gFu/PRobr9mAgdiob5xx/4zWKUQQvROvwp0\ngBsmXIFhGLyw6dVuj9IBrp8xiv/zxakEgmG+/8z7/L/3dnWMrS6EEMmo3wV6SVYx08vOo6Kxqsej\ndIBLzyllwZ0X4XHZWbz8Y370+zU0twZ6/IwQQiRKvwt0gBsnXInVsPDnjX8jFO75kf+zRhXyy/tn\nMGlUIas/qeXeJ95m7ebaM1SpEELEr18GeklWMZePvISalvounx49VkGOmwXzLuJLV4ylscXPgmc/\n4Cf/W05ji/8MVCuEEPHpl4EOcNPEq/DY3Szb9Hda/N4TLm+1GHx+puLn981gTFkuKz/ax7z//gcv\nv7uTkHydnRAiCfTbQM92ZnLj+CvxBlp5fvOrcX9u6KBsHrv3Er523USIRvnN3z7h3ife5u3ySoIh\nCXYhROL020AH8+nR4oxC3ti+kn1NNXF/zmoxuPaSkSx+aCZXXDiM6v0t/PRPH/G1H73Jsn9s41Bz\n22msWgghutavA91utXPb2TcRjkZ4Zu3/9ngbY1dyMp3cddNkFj80k2svGUFrW5A/vLqFryxYwY9+\nv4bVn9TQFpBx1oUQZ0Zc46Gns3MHT+b80ims2beef+5axcyRF5/0OgYWZPC1685izqyxrCyv5I3V\nFbz/cQ3vf1yDw27l7DEDOGdsEZNGFTJ4QKaMuS6EOC36faAD3H7O5/m4bit/3LCcqSWTyHP37uvo\nMt12rp4+gqumDWfHvsP8e2MNqz+p4YNNtXywybzVMT/bycQRhYwfUcD44fmUDczGapGAF0KcOgl0\nIN+dyxcnXc//lP+ZZz9ayv0X3XlKR9GGYTB6SB6jh+Rx21XjqW5oYeP2BjbuaODjnQ28u76Kd9eb\n37PtdloZVZrH6CG5jCzNYWRpLgPzPVit/bo3TAjRCxLoMTNHTmfV3rWs2beet3f/m0+PmNZn6y4p\nzKSkMJPZFw4jGo1S3eDlk50H0BUH2VpxiE92mUHfzma1UDIgg8EDMikpzKBkQCaDCjIozvdQkOuW\nI3ohRJck0GMshoV7P/UVvvPGD/ntR39hTMEISnMG9fl2DMNg8IBMBg/I5LMXDAXA6wuyq7qRnfsO\ns6uqkX31Leyrb2Fv7fFjslstBgU5Lgpy3BgRH+/vWk+m2052hpOcTAc5mU6yPHYyPQ4y3ebfsgMQ\non+QQO+kMCOfb5x/K0+sWszP3v8fFs58EIfNcdq3m+G2c9bIQs4aWdgxLRqNcqjZT02Dl+r9LdQe\nbKX2gJe6g600HPahKw4SicLmvRU9rtswINPtIMtjx+O2k+GyYbdZsVkNbFYLDrsVh92Ky2HF4zLn\nu5w2HHYrTrsVpyP2t92Kw24ub7dZsFos2KwGhmFgGGCxGDhsViyy8xAiYSTQj3F+6RRmjbyEFTvf\n5dmP/sLXz/tSQu5KMQyD/GwX+dkuJowoOG5+OBzhX+9/yMjR42hpDdLk9XO4JUCT109za5CW1gDN\nrQGaW4M0tvjx+oI0HPYROM0PP9msFuw2A0ss8K0WC3abBZvVgsUCYGC1GFgsxpGdis2KzWbBajF3\nDo2NjbzfcV2DAAATjElEQVS1aW1smSOfj0SjRCLRTtsxp7evz2IxsBjm+q1WC3ar0fUOxjAwzL8w\nDANL+98WcwdlNQws1th6YtNiHzt+VRjE/meur/19p2UthrmOvfv9ZOw5CEb7NI76t2UA1lh72ttk\nxGptX8CcZ8EwIBqFKFEMjuxU2wcENWLLWtrX1al9In1JoHfh1ik3sv3gbt7e/W+G5w1h9ugZiS7p\nOFarhSy3lSHFWSf1uWAoQjAUJhyJxl5HCATD+PwhWtuCeNtC+AMh/MEI/kCYQDCMPxg+6nUoHCEc\njnYMeRCJRgmHox3rCoYjRCLRjuWCIfPzUaJEIsSCOUIoto4uRyWu9PXBTykJvZnYsfUtseC3mHuT\n2E6o8w7oyM7L/L1EO6Yf2QGaO4n2HVkwFMTx/xo61m21WI7bkVqtsZ3KsTsUg6N3qBzZUR21WOyz\nHTuyaJRoFMKxnXy0/e+jWgGRo9pwZKNGbKfaua3RaJRI9MjPyOfzkfHuymPLPW5tnbfXeV40eswE\n4/iDiM7z2+d1/hF13gG3t/+G811dVGCSQO+Cw+bgO9O+zkNv/je/X7eMITklTCgak+iy+oTdZh7Z\nJotoNEooFvrRqBn269at56yzJhHpNC8UjnYcdQKEwlECwTDhcNTcoUTMnUgkAuHYziIcMXconf8D\nMcPCfBGNbb99J9O+fXM9UcKRKOFwpGO5ruuPhU9svdGO/zNFYvMjkSg1NbUUFxd3fC4SNWtvPwaP\nRs1thmI7xPZljqzrSF2RSDQWykd+jpFItCMA2tsV6vi5HPlcpFP4dW5Xx8tOR/6dkypKLEQj7WdK\n5nsjGsZpt8Z+hlH8wXDHmVR7AoYj5u/j2J8dmCEajcT+jkY7Qq1zSLb/LKLRqDndOHLWYbUcOQsy\n2x+ry1wwFpSdfl+dttv+76A9ZMGIBXuUUChMY2vLcf92jt4BHvXrhmPmtW+/fZtmOzr/vtp/SLGa\nIp1+H8f9rEw3nF9KdyTQu1GYkc/90+7kByt/zk9XPcMPZz7AoKyiRJeVdgzDwG4zjtrJZLis5GV3\nfxSSqsrLfUydOiHRZfS58vJypk6dmugy+lyytat9J7B+/bpul0meQ7UkNHbAKO445xaaA14WrPw5\n+70HEl2SEKKfMgzjhM+nSKCfwMyR0/nCpM9xoPUQC97+OQdbDye6JCGE6JIEehw+N+6z3Dj+Suq8\nDSxYKaEuhEhOEuhxunni1Vw79nKqm+v4z38+QX1Lw4k/JIQQZ5AEepwMw+CLk67npglXUe89wPf/\n+VOqm+S7RYUQyUMC/SQYhsHNE6/mS5Nv4IDvEP/3rcdYX7M50WUJIQQggd4r1469nLvPv41AOMjC\nfy3i5a1vdnufshBCnCkS6L106fALeOTT3ybXmc0fN7zI4+/9mqa24wfTEkKIM0UC/RSMLhjOf896\niAlFY/iweiP3v/FD1tV8kuiyhBD9lAT6Kcpz5/DwjG/xpck30BLwsvDdp3jqgyW0+L2JLk0I0c9I\noPcBi2Hh2rGXs3DmdxmeO4R39qzmvtd+wHsVa6RvXQhxxsQV6Eqp2UqprUqpbUqpB7uYr5RS/1ZK\ntSmlvt33ZaaGYXml/OjyB/nipOtpDbXxy9W/4z//8QQ7DuxJdGlCiH7ghIGulLIAi4DPAhOAOUqp\nsccsdgC4F3i8zytMMVaLlevGzeKnsx/m/NIp6AO7+N5bP+aJ9xZLsAshTqt4Rls8H9iuta4AUEot\nBa4DtrYvoLVuABqUUleflipTUHHmAP7PtHlsqt/GHze8yJqq9aypWs+EojFcMfoyppachdViTXSZ\nQog0Ek+gDwYqO73fhxnyIg4Tisbwo5kPsqles3zLG3xct5VN9dvId+fy6REXMWP4RRRlHP+NREII\ncbISOh56eXl5Wm6rO1dmTec8xwTWN23hk+btPL/pVZ7f9CpD3SVMyh7DmIxh2Cwn9ytJhnadDtKu\n1CLtSg7xpEcVUNbpfWls2ik7U4PHJ9tA9bOZSVvIz+rKj3h79/ts2b+dCl81GQ4PFw89nwtKz0YV\njjxhl0yytauvSLtSi7TrzOppJxNPoK8FRimlhgI1wC3AnB6Wl2+hjYPL5mTG8AuZMfxCaprreXv3\nv3l79/u8vn0lr29fSZYjg7MHTWTywPGcNXAsua7sRJcshEhyJwx0rXVYKXUPsALzrphntdZblFLz\ngKjW+hmlVDHwIZAFRJRS3wLGa61bul+zaDcoq4gvTPocN0+8hk/qtrK2agMfVm/k3YoPeLfiAwDK\ncgYzvmg0E4rGMGHAGDKdGQmuWgiRbOLqsNVavw6oY6Yt7vS6DhjSt6X1PzaLlSmDJjBl0ATuiN7C\n3sPVbKzbzIbaLeiGnextrOL17SsxMBieN4SCaA6+ijDD8oZQklmMxSLPiQnRn8mXRCcpi2FhWF4p\nw/JKuXbsLILhIDsPVvBJ/TY+qduKPrCLXZG9rF39MQB2q52y7BKG5g5maG4pQ3MHU5Y7mEyHHMkL\n0V9IoKcIu9XO2AGjGDtgFDdNuJK2kJ/XV7+Jo8jD7kOV7D1cRUVjFTsPVRz1uTx3DmU5JZRmlzAk\nZxCl2YMoziwk25mFYcjlDiHSiQR6inLZnAxxD2LqmCNX4UORMNVNtextrGLP4Sr2Ht5HZVMNG2q3\nsKF2y1Gfd1jtFHryGZBRQFFGAQMyCijOLKQ4o5ABGQVkOjIk8IVIMRLoacRmsVIW62qZPvTIdG+g\nlaqmWiobq9nXVEu9t4GG1oPs9x6kurmuy3U5rQ4KPfkMzBpASVYxg7KKKMoopCijgHxPHg6r/Qy1\nSggRLwn0fiDD4WFM4QjGFI44bp4v2MZ+7wHqvQeoa9lPXYsZ9gdaD1HfeoCq5lrK+fi4z3nsbnJd\n2eS7cynw5FHgyaPQk0ehJ598dy757lwyHB45yhfiDJJA7+fcdlfHUX1Xmv0tVDfXUdu8n3pvA/Xe\nAxzyNXK4rYlDbY3dHuGD2e+f786l0JNHnjuXPFc2ua4cclxZZDkzyHJkkuPKIseVLUf8QvQBCXTR\noyxnJsqZiSoc2eX8QDjIwdZDNLQe4kDrIRpaD3LQd7jTn0Y21W874XY8djcZdjceu5toIMKqwAby\nPbnkuXLIc+eQ68oh25lJpjODTEcGNhnYTIjjSKCLU+Kw2hmYVcTArKJulwmFQxxsa+Rw7Mi+sa2Z\n5kALzX4vjf5mGtsaaWxroTXoY3/rQVqDPvburelxu06bk0y7h2xnJrlu88g/y5lJpsNDpiODDIeb\nDLuHDIeHTIeHLEcmbrtLuoBEWpNAF6edzWqjKHY3TTzWfLiWEeNGctB3mENtjbEunkaa/V6aA15a\n/F68gVZaAl6qm+vYfbjyxCvFvLc/02GGvBn2btx2N26bC7fdRYbdTZYzkwy7B4/DjdvmxGVz4bGb\n8902F3arXXYKImlJoIukYzUsFGbkU5iRH9fybcE2DrU10exvoSUW9K1BXyz0W2kOtHTaCZjz93sP\nEoqETro2wzBw2Zx4bG48dhceuxtPbCeRafeQ7co0u4YcGXjsHjx2V2wH4iYYCRGNRmWHIE4bCXSR\n8lx2F4PsLgb10O3TlUA4SGvQhy/YRmvQR2vQR0vAS4u/FV/Ihy/oxxf04Qv58QXb8IXaaAv5aQu2\n0RoydyJVzXVEopG4t2nd/QdzJ9D+x2GeFeQ4s8h2ZpLlzCQrdp3gyJmCC5fNidPmwGLI8A6iexLo\not9yWO04rPZTGskyGo3SFvLjDbbS4vfS5G+hyd9MS6C14yyhNdiGN9hKbUMddo+jYydS3VKPP+Q/\nqe157O6Os4FMp4cMRwaZdo95lmB3d+wMsp1ZsYvJ2bjtrl63T6QWCXQhToFhGGb/ut1FoafnLqKu\nxtcORcI0x3YCTX7zQnGzvwVvsBVvwPzTFvLTFvLjC7XRGvDREmw1dwaH49sZ2K32IxeLY11EHrt5\njcBtd+GKnQG4bE4yHO6O5Vyxawjt82Twt+QngS5EAtksVvLc5q2ZJysUDtES8OLtdL2gJeCN7SBa\nOBS7s6jZ76Ul4OVg6yH2BWuIEu1Vrc5YsLttTtw2Fw6bA4fVjq+llffeX4/T6sBtd5PhMLuTXDYn\nDqsDt91FjjOLXFc2mc4MnFaHXEc4TSTQhUhRNquNXHcOuSexM4hEI7SF/LQGfbQFY3/HzgDap7cE\nvLQEWvGHArSF2vDFrhv4Qm20Bc0zhcNtTfjDAaJRc+eww7s37hoMw8Bjc+GJdR1lODy47K6OHYXL\nbp4ZOKx27BYbdqsdt93ZcS3BbrVjt9hx2hzmnUh2c1m5viCBLkS/YjEsHRdkT1U0GiUcCfNB+RrG\nTRxPW9gM/vYzBn8o0HHhudHfzGFfI96geU2hNeijNeDr1XWE7tgsNuxWGy6reQHZ1alLyWlz4LI6\ncdjsse4ms5vMYXXgtNk7upbcNmfHmUhb2E8kGkmpHYUEuhCiVwzDwBYL0HxPbq/XE4qEaet09N8W\nu6soGAkRDAcJhIPmmULQPIsIRkIEwoHYGYSftlAbgdhygVAAf2xeY1szbSF/r7uYAH6x+zncNhee\n2INqHrv5LELHziN2VuG0OTsusrdfczhyNmHDZrF1zHfYHDgs9o73fflsgwS6ECKhbBYrmY6M0/Jl\nLJFohEAoQFs4gL/94nLQ33FbaiAcIBAO0NbevRT0m8uFA9Q21OLwOPHGbmk94DtEZZOvo5upLzms\ndpw2J06ro6OryRbbYbSfMXhiZxXjGdbteiTQhRBpy2JYcNlduHpx62ZXdyVFo1HC0Qih9jOHcIC2\nYBv+cCB2lhDo2Gm0hdoIRcKEIqGjziACkWDH+2DsM/5OZxbeQKt5dhI7QznW+FFf7bZmCXQhhIiT\nYRjYDCs2ixWX3UXvn2CITyQSiV2bMLujfME2Gvcc6HZ5CXQhhEhSFosFj+Xoi9jlPQR66ly+FUII\n0SMJdCGESBMS6EIIkSYk0IUQIk1IoAshRJqQQBdCiDQhgS6EEGlCAl0IIdKEBLoQQqQJCXQhhEgT\nEuhCCJEmJNCFECJNSKALIUSakEAXQog0EdfwuUqp2cDPMXcAz2qtf9zFMr8ErgC8wJe11uv7slAh\nhBA9O+ERulLKAiwCPgtMAOYopcYes8wVwEit9WhgHvDr01CrEEKIHsTT5XI+sF1rXaG1DgJLgeuO\nWeY64A8AWusPgBylVHGfViqEEKJH8QT6YKCy0/t9sWk9LVPVxTJCCCFOI7koKoQQaSKei6JVQFmn\n96WxaccuM+QEyxynvLw8js33jTO5rTNJ2pVapF2pJdXaFU+grwVGKaWGAjXALcCcY5Z5Gbgb+ItS\n6gLgsNa6rqeVTp061ehFvUIIIbpxwi4XrXUYuAdYAWwClmqttyil5iml7owt8yqwWym1A1gM3HUa\naxZCCNEFIxqNJroGIYQQfUAuigohRJqQQBdCiDQhgS6EEGkirrFcUk1suIIPgX1a62uVUnnAX4Ch\nwB7gZq11YwJL7BWlVA7wP8BEIALcDmwjhdumlLoPuAOzPR8DXwEySME2KaWeBa4G6rTWk2LTuv23\np5R6CPN3GAK+pbVekYi6T6Sbdj0GXAP4gZ3AV7TWTbF5KduuTvPuBx4HCrXWB2PTkr5d6XqE/i1g\nc6f33wXe0lor4J/AQwmp6tT9AnhVaz0OmAxsJYXbppQqAe4Fzon9B2XDvCU2Vdv0O8wxjzrrsi1K\nqfHAzcA4zEHtfqWUStZbebtq1wpggtZ6CrCd9GkXSqlS4HKgotO0caRAu9Iu0GO/jCsxj2TbXQcs\nib1eAnzuTNd1qpRS2cDFWuvfAWitQ7EjvVRvmxXIUErZADfmA2kp2Sat9XvAoWMmd9eWazFvAQ5p\nrfdghuL5Z6LOk9VVu7TWb2mtI7G3qzEfJoQUb1fMz4DvHDPtOlKgXWkX6Bz5ZXS+H7O4/UEnrXUt\nUJSIwk7RcKBBKfU7pdRHSqlnlFIeUrhtWutq4CfAXswgb9Rav0UKt6kLRd20JZ3GP7odeDX2OqXb\npZS6FqjUWn98zKyUaFdaBbpS6irM/rD1QE+nQ6l4870NOAd4Smt9Dua489/l+LakTNuUUrmYRz5D\ngRLMI/UvksJtikM6tQWl1P8FglrrPye6llOllHID3wO+n+haeiutAh2YBlyrlNoF/Bn4tFLqOaC2\nfThfpdRAoD6BNfbWPswjhw9j71/ADPi6FG7bTGCX1vpg7Ink5cBFpHabjtVdW3o1/lEyUUp9GbN7\n8wudJqdyu0YCw4ANSqndmLV/pJQqIr4xrRIurQJda/09rXWZ1noE5pgz/9RazwVeAb4cW+w24G8J\nKrHXYqftlUqpMbFJn8EciuFlUrdte4ELlFKu2AWmz2BezE7lNhkcfXbYXVteBm5RSjmUUsOBUcCa\nM1VkLxzVrti3mH0HuFZr7e+0XMq2S2v9idZ6oNZ6hNZ6OOZB1Nla63rMdn0+2duVto/+K6UuBe6P\n3baYD/wV88ihAvPWscMJLbAXlFKTMS/22oFdmLf4WUnhtimlvo+58w0C64CvAlmkYJuUUn8CZgAF\nQB3mqftLwDK6aEvsNrg7MNuelLfBQbft+h7gAA7EFluttb4rtnzKtqv9poPY/F3AucfctpjU7Urb\nQBdCiP4mrbpchBCiP5NAF0KINCGBLoQQaUICXQgh0oQEuhBCpAkJdCGESBMS6EIIkSYk0IUQIk38\nf3ivFYxFGB0gAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1795b9ed0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"model.loc[30:,[\"test-rmse-mean\", \"train-rmse-mean\"]].plot()"
]
},
{
"cell_type": "code",
"execution_count": 2714,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"XGBRegressor(base_score=0.5, colsample_bylevel=1, colsample_bytree=1, gamma=0,\n",
" learning_rate=0.1, max_delta_step=0, max_depth=2,\n",
" min_child_weight=1, missing=None, n_estimators=360, nthread=-1,\n",
" objective='reg:linear', reg_alpha=0, reg_lambda=1,\n",
" scale_pos_weight=1, seed=0, silent=True, subsample=1)"
]
},
"execution_count": 2714,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"model_xgb = xgb.XGBRegressor(n_estimators=360, max_depth=2, learning_rate=0.1) #the params were tuned using xgb.cv\n",
"model_xgb.fit(X_train, y)"
]
},
{
"cell_type": "code",
"execution_count": 2715,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"xgb_preds = np.expm1(model_xgb.predict(X_test))\n",
"lasso_preds = np.expm1(model_lasso.predict(X_test))"
]
},
{
"cell_type": "code",
"execution_count": 2716,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"WARNING: Output cache limit (currently 1000 entries) hit.\n",
"Flushing oldest 200 entries.\n"
]
},
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x17afe9c50>"
]
},
"execution_count": 2716,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nwTIzs7bwD3KQrp5SMKmkAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x17b10f1d0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"predictions = pd.DataFrame({\"xgb\":xgb_preds, \"lasso\":lasso_preds})\n",
"predictions.plot(x = \"xgb\", y = \"lasso\", kind = \"scatter\")"
]
},
{
"cell_type": "code",
"execution_count": 2717,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"preds = 0.7*lasso_preds + 0.3*xgb_preds"
]
},
{
"cell_type": "code",
"execution_count": 2718,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"solution = pd.DataFrame({\"id\":test.Id, \"SalePrice\":preds})\n",
"solution.to_csv(\"xgb_lasso_sol.csv\", index = False)"
]
},
{
"cell_type": "raw",
"metadata": {},
"source": [
"0.0*lasso_preds + 1.0*xgb_preds: 0.12609\n",
"0.3*lasso_preds + 0.7*xgb_preds: 0.12102\n",
"0.5*lasso_preds + 0.5*xgb_preds: 0.11937\n",
"0.7*lasso_preds + 0.3*xgb_preds: 0.11928 # lowest\n",
"0.9*lasso_preds + 0.1*xgb_preds: 0.12071"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Selected features\n",
"Let's try using only the Lasso features w coefficients > 0."
]
},
{
"cell_type": "code",
"execution_count": 2713,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"model_xgb.fit(X_train[features], y)\n",
"preds = np.expm1(model_xgb.predict(X_test[features]))\n",
"solution = pd.DataFrame({\"id\":test.Id, \"SalePrice\":preds})\n",
"solution.to_csv(\"xgb_sol.csv\", index = False)"
]
},
{
"cell_type": "raw",
"metadata": {},
"source": [
"not an improvement: 0.14673 # stick w stacked model"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.12"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment