0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

機械学習でターゲットをlogで正規分布した結果

Posted at

概要

大した内容ではありません。
2ヶ月くらい前に下書きした内容なのですが、削除するくらいなら公開しようと思いました。
この記事では機械学習の初心者レベルの実験をしています。

https://qiita.com/katsu1110/items/a1c3185fec39e5629bcb
↑このページを参考にしています。勉強になりました。

欠損値などを自分の考えできれいにしたりして、ランダムフォレストの分類器に入れて、評価をしました。

logを使ってターゲットの列を正規分布にしたら、どのくらい効果があるのか

これが、今回の記事の目的です。これ以外の作業は一切修正しないで、結果を比較してみようという考えです。

# RandomForestで学習させる
from sklearn.ensemble import RandomForestRegressor
rdf = RandomForestRegressor(n_estimators=200, max_depth=5, max_features=0.5, random_state=449, jobs=-1)
clf = rdf.fit(x_train, y_train)
print('train: {:.4%}'.format(clf.score(x_train, y_train))) 
print('test : {:.4%}'.format(clf.score(x_test, y_test))) 

y_pred_train = rdf.predict(x_train)
y_pred_test = rdf.predict(x_test)

from sklearn.metrics import r2_score
print("trainのR2              : {:.4%}".format(r2_score(y_train, y_pred_train)))
print("test のR2              : {:.4%}".format(r2_score(y_test , y_pred_test)))

# 平均絶対誤差(MAE)
from sklearn.metrics import mean_absolute_error
print("trainの平均絶対誤差(MAE) : {:.4f}".format(mean_absolute_error(y_train, y_pred_train)))
print("test の平均絶対誤差(MAE) : {:.4f}".format(mean_absolute_error(y_test , y_pred_test )))

# 平方根平均二乗誤差(RMSE)
from sklearn.metrics import mean_squared_error
print("trainの平均二乗誤差(RMSE): {:.4f}".format(np.sqrt(mean_squared_error(y_train, y_pred_train))))
print("test の平均二乗誤差(RMSE): {:.4f}".format(np.sqrt(mean_squared_error(y_test , y_pred_test ))))

# RMSLE (Root Mean Squared Logarithmic Error)
# 外れ値に強い
from sklearn.metrics import mean_squared_log_error
print("trainのRMSLE           : {:.4f}".format(np.sqrt(mean_squared_log_error(y_train, y_pred_train))))
print("test のRMSLE           : {:.4f}".format(np.sqrt(mean_squared_log_error(y_test , y_pred_test ))))

このようにやりました。
そして、ターゲットをlogを使わないで出てきた結果はこのようになりました。

trainの正解率 (Accuracy): 91.4618%
test の正解率 (Accuracy): 83.6505%
trainのR2              : 91.4618%
test のR2              : 83.6505%
trainの平均絶対誤差(MAE) : 16175.1998
test の平均絶対誤差(MAE) : 19230.9896
trainの平均二乗誤差(RMSE): 22927.9516
test の平均二乗誤差(RMSE): 33601.6305
trainのRMSLE           : 0.1432
test のRMSLE           : 0.1511

これに対して、ターゲットをlogを使って正規分布に疑似化した場合は、以下のようになりました。

trainの正解率 (Accuracy): 90.5080%
test の正解率 (Accuracy): 86.0260%
trainのR2              : 90.5080%
test のR2              : 86.0260%
trainの平均絶対誤差(MAE) : 0.0893
test の平均絶対誤差(MAE) : 0.0990
trainの平均二乗誤差(RMSE): 0.1238
test の平均二乗誤差(RMSE): 0.1455
trainのRMSLE           : 0.0096
test のRMSLE           : 0.0111

なんか、評価の数値が全然ちがう結果になっているところがありますが、MAEはlogにしているからだと思いますが、RMSLEがぜんぜん違うのは、ちょっと意味不明です。(何か間違っていると思いますが、とりあえず記事にしてしまいました。)

結果

以上の評価結果で、提出ファイルを作って提出したところ、
ターゲットにlogを使わないで学習させた場合の結果は、
RMSLE 0.17481 4,635チーム中3591位でした。
これに対して、ターゲットにlogを使って学習させた場合の結果は、
RMSLE 0.16123 4,635チーム中3277位でした。

ということで、ターケットの正規化は効果ありということを確認出来ました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?