【AI】機械学習 by Python:回帰分析編②~モジュールのインポート~

AI・機械学習

 前回

の続き。

 今回から、前回紹介した回帰分析の実装例のコード解説に入る。
 下記にもう一度、プログラムの実装例とその出力例を示しておく。

 

実装例

# モジュールのインポート
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
import sklearn
from sklearn.linear_model import LinearRegression

# データセットのインポート
file=pd.read_csv('apartment.csv',encoding='cp932')
#データセットのサイズ確認
print('データセットのサイズ:',file.shape)

# 説明変数
X=file.iloc[:,1:]
# 目的変数
Y=file.iloc[:,0]

# 説明変数Xと目的変数を、学習データ(8割)とテストデータ(2割)に分割(random_stateは0)
X_train, X_test, Y_train, Y_test = sklearn.model_selection.train_test_split(X, Y, test_size=0.2, random_state=0)
# 分割の確認
print('分割の確認:',X_train.shape, X_test.shape, Y_train.shape, Y_test.shape)

# 回帰分析実行
# インスタンスの作成
model = LinearRegression()
# モデルの作成
model.fit(X_train, Y_train)

# 回帰直線の確認
# 切片
print('切片の値 = ', model.intercept_)
# 係数
print('係数の値 = ', model.coef_)

# 学習データからの予測値
pred_train = model.predict(X_train)
# テストデータからの予測値
pred_test = model.predict(X_test)

# 結果確認
print('学習データの平均二乗誤差: ', np.mean((Y_train - pred_train) ** 2))
print('テストデータの平均二乗誤差: ', np.mean((Y_test - pred_test) ** 2))
print('決定係数:',model.score(X_test,Y_test))

# モデルを使った計算
Xs=35 # 部屋の広さ[m^2]
Xt=10 # 駅から建物までの所要時間[min]
Xo=5 # 築年数[year]
price=model.intercept_+model.coef_[0]*Xs+model.coef_[1]*Xt+model.coef_[2]*Xo
print('部屋の広さ',Xs,'m^2、徒歩',Xt,'分、築',Xo,'年の建物の部屋の家賃は約',round(price,1),'万円である。')

出力例

データセットのサイズ: (100, 4)
分割の確認: (80, 3) (20, 3) (80,) (20,)
切片の値 =  7.506892589329363
係数の値 =  [ 0.15930654 -0.10031788 -0.14080724]
学習データの平均二乗誤差:  0.0006406930013219009
テストデータの平均二乗誤差:  0.0009590840329186921
決定係数: 0.999959366829125
部屋の広さ 35 m^2、徒歩 10 分、築 5 年の建物の部屋の家賃は約 11.4 万円である。

 実際にプログラムを実行したい場合は、下記ボタンよりcsvファイル「apartment.csv」をダウンロードしてプログラムの保存先に保存すること。

環境は下記を想定。
OS:Windows10(64bit版)
Pythonインストール環境:Anaconda3
Pythonバージョン:3.7
エディタ:Jupyter Notebook


1. モジュールのインポート

 最初に書かれているのは、モジュールを読み込む(インポートする)ためのコードだ。

# モジュールのインポート
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
import sklearn
from sklearn.linear_model import LinearRegression

 モジュールとは、端的に言うとプログラムが書かれたファイルのことである。

 前回少し述べたように、Pythonコードでプログラムが書かれたファイルにはいくつか種類があるが、ここでは拡張子が「.py」のPythonファイル(pyファイル)をモジュールと呼ぶことにする。

 Pythonでは、プログラムが書かれたpyファイルを別のファイルに読み込むことで、そのプログラムを実行することができる。
 これは、プログラムそのものが冗長になることを防ぎ、バグの発見にも役立つ。

 

 モジュールには大きく

自作モジュール:自分が作ったモジュール。
標準モジュール:Pythonに標準搭載されているモジュール。いわゆる組み込み関数。
拡張モジュール:他言語で開発されたモジュール。いわゆるライブラリ。Anacondaインストールで使用可。

の3種類があり、今回の例でインポートしているのはすべて拡張モジュールだ。

 

 モジュールをインポートするコードは、例の上3行に書かれているように

import ○○ as △△

である。

 ○○にモジュール名が入り、△△にプログラム内でモジュールを使用する際の呼び出し名(大概は略名)が入る。
 この呼び出し名は自分で自由に決めてよい。

 

 また、あるモジュールから特定の関数だけをインポートしたい場合は、

from ○○ import □□

を使う。

 ○○にモジュール名、□□に関数名が入る。

 

 以上を踏まえて、例のコードを詳しく見ていくと次のようになる。

import numpy as np

⇒「NumPy」というライブラリをインポートし、「np」という名前で使うためのコード。
 「NumPy」はデータ分析に有効な関数を数多く揃えるライブラリである。

 

import pandas as pd 

⇒「pandas」というライブラリをインポートし、「pd」という名前で使うためのコード。
 「pandas」には大量のデータを効率よく扱うための関数が用意されている。

 

import matplotlib.pyplot as plt 
%matplotlib inline

⇒「matplotlib」というライブラリの「pyplot」というモジュールをインポートし、「plt」という名前で使うためのコード。
 「matplotlib」はグラフの描画に用いられるライブラリである。
 2行目の「%」以下はJupyter Notebook上に図表を表示させるためのコードである。

 

import sklearn
from sklearn.linear_model import LinearRegression

⇒ 「scikit-learn」というライブラリをインポートし、その中にある「LinearRegression」というクラスをインポートするためのコード。
 「scikit-learn」は機械学習の手法を簡単に扱える関数が揃ったライブラリである。
 「LinearRegression」はその中でも、線形回帰モデルのクラスである。
 「クラス」とは今のところは仕様書(設計図)のようなものと認識しておけばよい。
 つまり「LinearRegression」は線形回帰モデルの仕様書(設計図)である。

次回予告

 モジュールのインポートだけでかなりの分量になったのでここで一旦区切る。

 次回は「データセットのインポート」から「説明変数と目的変数」まで一気に進める予定だ。

 

 END

 

 ※追記
 データセットのインポートについて解説。


コメント

タイトルとURLをコピーしました