皆さん、こんにちは。エンジニアのトゥエンです。
あなたは家を探したことがありますか。私はもうすぐ引っ越しする予定です。 ですから、今日、「線形回帰」を使って、東京でシェアハウスの家賃を予測してみましょう。

問題
下記のような、部屋の家賃や面積、フロアについてのデータがあるとします。
面積(m²) | フロア(F) | 家賃(千円) |
---|---|---|
7 | 2 | 45 |
7.12 | 1 | 51 |
7.2 | 1 | 52 |
7.69 | 1 | 53 |
7.79 | 1 | 52.6 |
8 | 1 | 52 |
8.28 | 1 | 54 |
8.37 | 2 | 54.2 |
8.7 | 2 | 56 |
9.93 | 2 | 64 |
10.5 | 2 | 65 |
10.53 | 1 | 72 |
11 | 3 | 75 |
12.19 | 3 | 78.3 |
12.4 | 1 | 80 |
これを使って別の部屋の家賃を予測してみましょう。
少し数学について
線形回帰
上の問題は、「線形回帰」と呼ばれる、「教師あり学習」の一形態です。
線形回帰の公式は
: 予測の値
: 実際の値
: インプットデータの値
: ウェイト
損失関数
目標は実際の値(Y')と予測の値(Y)の差が最小です。ということは、関数の得る価値を最小するために を見つける必要があります!
問題の解決
損失関数の定義から、これが最適化問題であることがわかります。最適化問題を解決するために、一般的な方法の1つは、導関数を使用することです。
ちなみに、以前、凸最適化問題を紹介しました。よかったら、読んでください。
家賃予測
家賃は、次の式で計算されます。
家賃を予測するために、の適切な値を見つけなければなりません。
Pythonの scikit-learn
ライブラリを使って、早く解決することができます。
import numpy as np from sklearn import linear_model X = np.array([ [7, 7.12, 7.2, 7.69, 7.79, 8, 8.28, 8.37, 8.7, 9.93, 10.5, 10.53, 11, 12.19, 12.4], [2, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 3, 3, 1] ]).T Y = np.array([ [45, 51, 52, 53, 52.6, 52, 54, 54.2, 56, 64, 65, 72, 75, 78.3, 80] ]).T linear = linear_model.LinearRegression(fit_intercept=False) linear.fit(X, Y) print(linear.coef_)
結果:
[[ 6.74732924 -0.88385193]]
ですから、3階にあり、面積8m²の部屋の家賃は約54700円です。

精度をテストしてみます。本例ではデータセット全体を 80:20
の割合でトレーニングデータとテストデータに分割します。
from sklearn.model_selection import train_test_split X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2) linear.fit(X_train, Y_train) linearScore = linear.score(X_test, Y_test) print(linearScore)
結果:
0.8280773078631194
1に近いほど精度は高くなります。
おわりに
我々みんなのマーケットテックチームでは「くらしのマーケット」を一緒に作る仲間を募集しています!興味がある方はぜひ気軽に連絡ください。
次回は、都築さんの予定です。
参考文献
[1] ウィキペディア
[2] Machine Learning is Fun! – Adam Geitgey
[3] Machine Learning co ban - Vu Huu Tiep, 2018
[4] scikit-learn