sklearnによる回帰問題(線形回帰と多項式回帰)
udemyのdata science A-Zの回帰の問題が終わりましたのでその進捗と学んだことを応用して回帰してみたいと思います。
たぶんですが、この講義は原理を理解している人がやるとスムーズなのでしょうね。 原理を知った上で、じゃあプログラミングはどうやろうか知りたい人だとスムーズに進むと思います。 僕はいまいち理解していないことが多かったため、プラスαでなにをしているのか調べることに結構時間かかりました。
regression
回帰というのは従属変数と独立変数の間にモデルを当てはめるということ。 とがあたえられたとき、 と表すことができるような、を探しだす。
が未知のパラメータ、求めたいパラメータでスカラもしくはベクトルになります。
線形回帰
今回はLinearRegression 線形回帰のみ考えたいと思います。
のようなモデルは単回帰を表します。
このように で表されるモデルにはあるパターンがあります。 xが2次元以上のものは重回帰と呼ぶようです。
xが多項式となる場合は多項式回帰となります。 このモデルをフィットさせると直線にはならないのですが、に関してはLinearなためLinear Regressionだそうです。
どのモデルがうまくフィットするのか考えることが重要です。
近似方法
さてモデルを考えたら係数を求めていくわけですが、その際に使用する手法は最小2乗近似という方法をとります。
実際にやってみた
UCIのMachine Learning Repositoryからデータセットを取ってきて回帰問題を考えてみます。 今回はcomputer hardwareというデータセットを使います。
http://archive.ics.uci.edu/ml/datasets/Computer+Hardware
まずは
X:maximum main memory in kilobytes (integer)
y:estimated relative performance from the original article (integer)
として線形回帰を行っていきます。
まずライブラリとデータセットを読み込みます。
# Importing the libraries import numpy as np import matplotlib.pyplot as plt import pandas as pd # Importing the dataset dataset = pd.read_csv('dataset.csv') # Simple Linear Regression X = dataset.loc[:, ['ERP']].values y = dataset.loc[:, ['MMAX']].values
最初は単回帰を行ってみます。
# importing the Linear Model from sklearn.linear_model import LinearRegression reg = LinearRegression() reg.fit(X, y) #visualising the result y_pred = reg.predict(X) plt.scatter(X,y, color='red') plt.plot(X, y_pred, color='blue') plt.title("MMAX(maximum main memory in kilobytes) vs \n ERP(estimated relative performance)\n(Linear Regression)") plt.xlabel("MMAX") plt.ylabel("ERP") plt.show()
こんな感じになりました。
青線が今回作ったモデルを使ってyを予測した値になります。
よくフィットしているとはいえないですね。
次は多項式を用いて回帰してみようと思います。 3次の多項式で近似してみます。
# Polynomial Regression from sklearn.preprocessing import PolynomialFeatures polynomial_features = PolynomialFeatures(degree = 3) X_poly = polynomial_features.fit_transform(X) poly_reg = LinearRegression() poly_reg.fit(X_poly, y) # Visualising the Polynomial Regression results plt.scatter(X, y, color = 'red') plt.plot(X_grid, poly_reg.predict(polynomial_features.fit_transform(X)), color = 'blue') plt.title("MMAX(maximum main memory in kilobytes) vs \n ERP(estimated relative performance)\n(Polinomial Regression)") plt.xlabel('MMAX') plt.ylabel('ERP') plt.show()
結構いい感じ。
最後に6次の多項式で回帰してみます。
うまくいきませんね。
これはオーバーフィッティングしている状態ですね。
とりあえず単回帰と多項式回帰はできました。 本当は最小2乗近似の誤差を確認したいのですがやり方がわかりません。。。 分かり次第追記します。
今回重回帰をやらなかったのと、Rを使ってないのでRで重回帰をやってみます。。
また次のコンテンツは決定木の回帰ということなのでそちらもまとめていきたいと思います。
ではまた。