「ゼロ基礎データマイニング入門~中古車取引価格予測~」Task4:モデリングとパラメータ調整

タスク 2 の EDAタスク 3 の機能エンジニアリングの後、データの準備が整い、次はモデリングとパラメーター調整を開始するプロセスです。

ステップ 1: 関数ツールボックスのインポート

## 基础工具
import numpy as np
import pandas as pd
import warnings
import matplotlib
import matplotlib.pyplot as plt
import seaborn as sns
from scipy.special import jn
from IPython.display import display, clear_output
import time

warnings.filterwarnings('ignore')
%matplotlib inline

## 模型预测的
from sklearn import linear_model
from sklearn import preprocessing
from sklearn.svm import SVR
from sklearn.ensemble import RandomForestRegressor, GradientBoostingRegressor

## 数据降维处理的
from sklearn.decomposition import PCA, FastICA, FactorAnalysis, SparsePCA

import lightgbm as lgb
import xgboost as xgb

## 参数搜索和评价的
from sklearn.model_selection import GridSearchCV, cross_val_score, StratifiedKFold, train_test_split
from sklearn.metrics import mean_squared_error, mean_absolute_error

ステップ 2: データの読み取り

タスク 3: 機能エンジニアリングでは、データを準備し、サブディレクトリ出力に保存しました。

1) データのインポート

# 从特征工程存储的数据文件中读取数据
data = pd.read_csv('.\output\data_for_tree-V2.csv')

2) データ分割

# 训练集和测试集放在一起,需要拆分
Train_data = data.loc[data.train == 1]
Test_data = data.loc[data.train == 0]

3) トレーニングとテストのサンプルを作成する

# 从导入数据构造训练样本和测试样本
X_data = Train_data.drop(['price', 'train'], axis=1)
Y_data = Train_data['price']

X_test = Test_data.drop(['price', 'train'], axis=1)

print(('X train shape:', X_data.shape))
print(('X test shape:', X_test.shape))

4) 統計関数を作成する

## 定义了一个统计函数,方便后续信息统计
def Statistics_inf(data):
    print('_min', np.min(data))
    print('_max:', np.max(data))
    print('_mean', np.mean(data))
    print('_ptp', np.ptp(data))
    print('_std', np.std(data))
    print('_var', np.var(data))

5)統計ラベルの分布基本情報

print('Statistics of label:')
Statistics_inf(Y_data)
## 绘制标签的统计图,查看标签分布
matplotlib.rcParams['figure.figsize'] = (12.0, 6.0)
prices1 = pd.DataFrame({
    
    "Price": Y_data})
prices1.hist()

ここに画像の説明を挿入

6) デフォルト値は -1 で埋められます

X_data = X_data.fillna(-1)
X_test = X_test.fillna(-1)

ステップ 3: モデルのトレーニングと予測

1) ランダム フォレスト RF モデル関数を定義する

forest = RandomForestRegressor(criterion='mse',
                               n_estimators=100,
                               max_depth=20,
                               min_samples_split=2,
                               min_samples_leaf=2,
                               random_state=10,
                               n_jobs=-1)

2) モデルのトレーニング、評価、予測のためのセグメント データ セット (Train、Val)

# Split data with validation, 
# Test data set is 50000, split train data set 33% to validation data set
x_train, x_val, y_train, y_val = train_test_split(X_data,
                                                  Y_data,
                                                  test_size=0.33)

3) モデルのトレーニングと予測のための RF

トレーニング、検証

print('Training rf...')
forest.fit(x_train, y_train)
val_rf = forest.predict(x_val)
MAE_rf = mean_absolute_error(y_val, val_rf)
print('MAE of val with rf:', (MAE_rf))

結果は次のとおりです。
ここに画像の説明を挿入

トレーニング、予測

print('Predicting rf...')
forest.fit(X_data, Y_data)
sub_rf = forest.predict(X_test)
print('Statistics of Predict RF:')
Statistics_inf(sub_rf)

結果は次のとおりです。
ここに画像の説明を挿入

予測結果の統計グラフを見ると、学習データセットと同様の分布をしていることがグラフからわかります。

ここに画像の説明を挿入

4) 出力結果

sub = pd.DataFrame()
sub['SaleID'] = Test_data.SaleID
sub['price'] = sub_rf
sub.to_csv('.\sub\sub-V15-LR-RF-1.csv', index=False)

出力の最初の 5 行を確認します

sub.head()

フォーマットは正しいです。
ここに画像の説明を挿入

要約する

私は特徴量工学に詳しくないため、結果はあまり良くなく、ランダム フォレストの学習能力は XGBoost や LightGBM よりもわずかに劣っています。
機能エンジニアリング、モデル、およびパラメーターの調整には、さらに改善の余地があります。

おすすめ

転載: blog.csdn.net/hinker/article/details/105243306