機械学習-部屋の広さから家賃を求めてみる (プログラム)
sklearnで部屋の広さから家賃を求めてみます。今回は学習用のデータと評価を自作のデータを用いて計算してみます。一般的に部屋の広さが広いほど家賃は高くなっていき、狭くなれば狭くなるほど家賃は安くなっていく傾向があります、学習用のモデルとして最も簡単な線形回帰を用いて実装していきます。部屋の広さと、家賃が対応した80個のデータを学習させておき、その後、部屋の広さを入力することで家賃を推定させます。
使用するデータ
全データ :80件 (学習用:80件)
属性データ:部屋の広さ(m2)
正解ラベル:家賃(円)
学習用データの作成
今回は学習用のデータを自作します。以下の内容をファイル名"rent_area.txt"としてソースコードと同じディレクトリ配下に格納してください。
areaとは部屋の広さ(m2)で、rentとは家賃(円)を示しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
area rent 72.00 125000 52.85 121000 52.85 122000 20.50 83000 20.50 84000 20.50 84000 25.40 91000 23.01 91000 23.01 91000 23.00 91000 23.00 91000 20.44 75000 20.44 75000 20.44 75000 20.44 76000 20.44 76000 20.44 77000 20.44 78000 20.44 79000 20.31 79000 20.44 86000 20.44 89000 26.96 89000 34.16 112000 34.11 112000 34.11 114000 73.30 122000 72.74 122000 72.74 124000 73.30 126000 73.35 127000 73.30 130000 72.74 130000 74.10 132000 73.35 132000 73.35 134000 25.54 97000 31.26 115000 31.26 119000 72.06 125000 73.30 122000 72.74 122000 73.30 126000 73.30 127000 73.30 130000 73.35 132000 39.74 115000 52.85 121000 37.58 116000 37.58 118000 40.63 135000 75.10 190000 47.13 132000 47.13 137000 41.97 105000 34.11 112000 34.11 112000 34.11 114000 34.11 117000 52.00 138000 51.34 89000 51.34 89000 60.61 102000 70.92 170000 70.90 170000 61.06 188000 61.00 188000 70.92 170000 65.10 180000 61.06 188000 59.46 179000 55.66 137000 61.82 150000 67.84 153000 78.65 168000 42.52 127000 65.06 188000 52.46 179000 43.52 127000 60.46 182000 |
ソースコードの流れ
1、準備作業
2、学習用データの読み込み
3、学習用データの確認
4、matplotlibで学習用データの図示化
5、linear_model(線形回帰)での学習
6、matplotlibで学習結果の図示化
7、#評価(30m2 / 70m2))
ソースコード
ソースコードです。ソースコードの詳細は後で説明します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
#準備作業 import matplotlib.pyplot as plt import pandas as pd from sklearn import linear_model #学習用データの読み込み dataframe = pd.read_fwf('rent_area.txt') x_values = dataframe[["area"]] y_values = dataframe[["rent"]] #学習用データの確認 dataframe.head() dataframe.tail() #matplotlibで学習用データの図示化 array_x = x_values.as_matrix() array_y = y_values.as_matrix() plt.xlabel('area') plt.ylabel('rent') plt.scatter(array_x,array_y) plt.grid() plt.show() #linear_model(線形回帰)での学習 clf = linear_model.LinearRegression() clf.fit(x_values,y_values) #matplotlibで学習結果の図示化 plt.xlabel('area') plt.ylabel('rent') plt.scatter(array_x,array_y) plt.grid() plt.plot(x_values,clf.predict(x_values),color='red') plt.show() #評価(30m2 / 70m2) print(clf.predict(30)) print(clf.predict(70)) |
ソースコードの詳細
準備作業
1 2 3 |
import matplotlib.pyplot as plt import pandas as pd from sklearn import linear_model |
図示化を行うためにmatplotlibを線形回帰を用いるためにlinear_modelをインポートします。
学習用データの読み込み
1 2 3 |
dataframe = pd.read_fwf('rent_area.txt') x_values = dataframe[["area"]] y_values = dataframe[["rent"]] |
学習用データの確認
1 |
dataframe.head() |
head()を用いることで先頭から5件分のデータを表示することが出来ます。先ほど読み込んだrent_area.txtの先頭5行分が入っていることが分かります。
1 |
dataframe.tail() |
tail()を用いることで最後から5件分のデータを表示することが出来ます。先ほど読み込んだrent_area.txtの最後5行分が入っていることが分かります。
matplotlibで学習用データの図示化
1 2 3 4 5 6 7 |
array_x = x_values.as_matrix() array_y = y_values.as_matrix() plt.xlabel('area') plt.ylabel('rent') plt.scatter(array_x,array_y) plt.grid() plt.show() |
読み込んだ学習用データを図示化してみます。横軸が部屋の広さ(m2)、縦軸が家賃(円)となっています。例外もありますが、部屋の広さ(m2)に比例して家賃(円)も高くなっていることが分かります。
linear_model(線形回帰)での学習
1 2 |
clf = linear_model.LinearRegression() clf.fit(x_values,y_values) |
matplotlibで学習結果の図示化
1 2 3 4 5 6 |
plt.xlabel('area') plt.ylabel('rent') plt.scatter(array_x,array_y) plt.grid() plt.plot(x_values,clf.predict(x_values),color='red') plt.show() |
学習した結果を図示化してみます。赤い線が学習した結果となります。線形回帰はこのような直線上で表すモデルとなります。
評価(30m2 / 70m2)
1 |
print(clf.predict(30)) |
1 |
[[ 101060.92036007]] |
1 |
print(clf.predict(70)) |
1 |
[[ 146502.75789787]] |
学習の過程を確認したい場合は以下の記事も参考にして下さい。