予測問題、kaggle House Prices: Advanced Regression Techniques
index:
概要
予測問題で、kaggle House Prices: Advanced Regression
https://www.kaggle.com/c/house-prices-advanced-regression-techniques
今回は、sklern 重回帰分析で進める事にしてみました。
環境
python 3.5
scikit-learn
numpy
matplotlib
コード
参考ページ様を参考に
・説明変数の項目数は、多目にしました
・欠損値の対応
・カテゴリ変数は、ダミー変数も使用
・train, test データは、ダミー変数の変換後に
分割
・提出用のCSV出力
import numpy as np import numpy.random as random import scipy as sp from pandas import Series, DataFrame import pandas as pd # 可視化モジュール import matplotlib.pyplot as plt import matplotlib as mpl # 機械学習モジュール import sklearn from sklearn import linear_model import pickle import time # def conv_dats(df): #欠損値の補完 df["PoolQC"].fillna('NA', inplace=True) df["MiscFeature"].fillna('None', inplace=True) df["Alley"].fillna('NA', inplace=True) df["Fence"].fillna('NA', inplace=True) df["FireplaceQu"].fillna('NA', inplace=True) df["GarageQual"].fillna('NA', inplace=True) df["GarageFinish"].fillna('NA', inplace=True) df["GarageCond"].fillna('NA', inplace=True) df["GarageType"].fillna('NA', inplace=True) df["BsmtCond"].fillna('NA', inplace=True) df["BsmtExposure"].fillna('NA', inplace=True) df["BsmtQual"].fillna('NA', inplace=True) df["BsmtFinType2"].fillna('NA', inplace=True) df["BsmtFinType1"].fillna('NA', inplace=True) df["MasVnrType"].fillna('None', inplace=True) # df["GarageYrBlt"].fillna(0, inplace=True) df["MasVnrArea"].fillna(0, inplace=True) df["BsmtHalfBath"].fillna(0, inplace=True) df["BsmtFullBath"].fillna(0, inplace=True) df["TotalBsmtSF"].fillna(0, inplace=True) df["BsmtUnfSF"].fillna(0, inplace=True) df["BsmtFinSF2"].fillna(0, inplace=True) df["BsmtFinSF1"].fillna(0, inplace=True) df["GarageArea"].fillna(0, inplace=True) df["GarageCars"].fillna(0, inplace=True) # df["MSZoning"].fillna('RL', inplace=True) df["Functional"].fillna('Typ', inplace=True) df["Utilities"].fillna("AllPub", inplace=True) df['SaleType'] = df['SaleType'].fillna(df['SaleType'].mode()[0]) df['Exterior2nd'] = df['Exterior2nd'].fillna(df['Exterior2nd'].mode()[0]) df['Exterior1st'] = df['Exterior1st'].fillna(df['Exterior1st'].mode()[0]) df['KitchenQual'] = df['KitchenQual'].fillna(df['KitchenQual'].mode()[0]) df['Electrical'] = df['Electrical'].fillna(df['Electrical'].mode()[0]) # f = lambda x: x.fillna(x.mean()) df["LotFrontage"] = df.groupby("Neighborhood")["LotFrontage"].transform(f) return df # 学習データ global_start_time = time.time() train_data = pd.read_csv("train.csv" ) test_data = pd.read_csv("test.csv" ) #print( train_data.shape ) #print( train_data.head() ) #print(train_data["Id"][: 10]) train_sub = train_data.drop("Id", axis=1) test_sub = test_data.drop("Id", axis=1) # 目的変数 y_train = train_sub["SalePrice"] # 説明変数に "xx" 以外を利用 train_sub = train_sub.drop("SalePrice", axis=1) #学習用データとテストデータを一度統合する df_all = pd.concat((train_sub , test_sub)).reset_index(drop=True) print(df_all.shape ) df_all=conv_dats(df_all) #quit() tmp=df_all.isnull().sum()[ df_all.isnull().sum() != 0].sort_values(ascending=False) #print(tmp) #One Hot Encoding df_all = pd.get_dummies(df_all) print( df_all.shape ) ntrain = train_sub.shape[0] x_train = df_all[:ntrain] x_test = df_all[ntrain:] print( x_train.shape, y_train.shape ) print( x_test.shape ) #quit() # モデルのインスタンス model = linear_model.LinearRegression() # fit clf = model.fit( x_train ,y_train) print("train:",clf.__class__.__name__ ,clf.score(x_train,y_train)) #print("test:",clf.__class__.__name__ , clf.score(X_test,y_test))
評価
train.csv の価格と、予測した価格の比較