5
5

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.

【Python演習】線形単回帰・線形重回帰

Last updated at Posted at 2019-10-01

データの読み込み

# URL によるリソースへのアクセスを提供するライブラリをインポートする。
import urllib.request 
# 図やグラフを図示するためのライブラリをインポートする。
import matplotlib.pyplot as plt
%matplotlib inline
# ウェブ上のリソースを指定する
url = 'https://raw.githubusercontent.com/maskot1977/Statistics2017/master/home.txt'
# 指定したURLからリソースをダウンロードし、名前をつける。
urllib.request.urlretrieve(url, 'home.txt') 
# ファイル読み込みと出力
for line in open("home.txt"):
  print(line)
Y = []
X = []
for line in open("home.txt"):
  c = line.split()
  print(c)
Y = []
X = []
for line in open("home.txt"):
  c = line.split()
  Y.append(c[0])
  X.append(c[1])
print(X)
print(Y)
Y = []
X = []
for index, line in enumerate(open("home.txt")):
  if index == 0:
    continue
  c = line.split()
  Y.append(float(c[0]))
  X.append(float(c[1]))
print(X)
print(Y)

データの図示

%matplotlib inline
plt.scatter(X, Y)
%matplotlib inline
plt.scatter(X, Y)
plt.xlabel("Walking distance (min)")
plt.ylabel("Rent (yen)")
plt.grid()
plt.show()

線形単回帰

平均値

# 平均値を求める関数を作ろう
def mean(list_):

print(mean(X))
print(mean(Y))

分散

# 分散を求める関数を作ろう
def variance(list_):

print(variance(X))
print(variance(Y))

標準偏差

# 標準偏差を求める関数を作ろう
import math
def standard_deviation(list_):

print(standard_deviation(X))
print(standard_deviation(Y))

共分散

# 共分散 = 偏差積の平均 (偏差値、ではありません。偏差積、です)を作ろう
def covariance(list1, list2): 

print(covariance(X, Y))

相関係数

# 相関係数 = 共分散を list1, list2 の標準偏差で割ったものを作ろう
def correlation(list1, list2):

print(correlation(X, Y))

回帰直線

# 回帰直線の傾き=相関係数*((yの標準偏差)/(xの標準偏差))を求める関数を作ろう
def a_fit(xlist, ylist):

print(a_fit(X, Y))
# y切片=yの平均-(傾き*xの平均)を求める関数を作ろう
def b_fit(xlist, ylist):

print(b_fit(X, Y))
# 回帰直線の式を表示
print("y = f(x) = {0} x + {1}".format(a_fit(X, Y), b_fit(X, Y)))

線形重回帰

線形単回帰では、「徒歩何分」から「家賃」を求めました。 線形重回帰では、「徒歩何分」と「広さ何m2」から「家賃」を求めてみましょう。

Y = []
X1 = []
X2 = []
for index, line in enumerate(open("home.txt")):
  if index == 0:
    continue
  c = line.split()
  Y.append(float(c[0]))
  X1.append(float(c[1]))
  X2.append(float(c[2]))
  • a の影響を除いた、b と y の 偏回帰係数 = (rby - (ray rab)) σy / ((1 - rab2) σb)
    • ただし r は相関係数、 σ は標準偏差とする。
# a の影響を除いた、b と y の偏回帰係数 partial regression coefficient を求める関数を作ろう
def partial_regression(A, B, Y):

# 定数 w1 = (x2 の影響を除いた、x1 と y の偏回帰係数)
w1 = partial_regression(X2, X1, Y)
# 定数 w2 = (x1 の影響を除いた、x2 と y の偏回帰係数)
w2 = partial_regression(X1, X2, Y)
# 定数 t = yの平均 - w1*「x1の平均」 - w2*「x2の平均」
# 回帰直線の式を表示
print("y = f(x) = {0} X1 + {1} X2 + {2}".format(w1, w2, t))
5
5
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
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?