'Python' 카테고리의 다른 글
Python 강좌7 클래스 (0) | 2018.03.27 |
---|---|
Python 강좌6 tuple, set, dictionary (0) | 2018.03.21 |
Python 강좌4 정규식 regular expression (0) | 2018.03.19 |
Python 강좌3 자료형. 수/문자열 (1) | 2018.03.16 |
Python 강좌2 if/for/while/function (0) | 2018.03.15 |
Python 강좌7 클래스 (0) | 2018.03.27 |
---|---|
Python 강좌6 tuple, set, dictionary (0) | 2018.03.21 |
Python 강좌4 정규식 regular expression (0) | 2018.03.19 |
Python 강좌3 자료형. 수/문자열 (1) | 2018.03.16 |
Python 강좌2 if/for/while/function (0) | 2018.03.15 |
Python 강좌6 tuple, set, dictionary (0) | 2018.03.21 |
---|---|
Python 강좌5 List (0) | 2018.03.20 |
Python 강좌3 자료형. 수/문자열 (1) | 2018.03.16 |
Python 강좌2 if/for/while/function (0) | 2018.03.15 |
Python 강좌1. 산술연산, range (0) | 2018.03.14 |
Python 강좌5 List (0) | 2018.03.20 |
---|---|
Python 강좌4 정규식 regular expression (0) | 2018.03.19 |
Python 강좌2 if/for/while/function (0) | 2018.03.15 |
Python 강좌1. 산술연산, range (0) | 2018.03.14 |
Linear regression (0) | 2018.03.13 |
Python 강좌4 정규식 regular expression (0) | 2018.03.19 |
---|---|
Python 강좌3 자료형. 수/문자열 (1) | 2018.03.16 |
Python 강좌1. 산술연산, range (0) | 2018.03.14 |
Linear regression (0) | 2018.03.13 |
[python] 보간법 interpolate 사용하기 (0) | 2017.05.25 |
Python 강좌4 정규식 regular expression (0) | 2018.03.19 |
---|---|
Python 강좌3 자료형. 수/문자열 (1) | 2018.03.16 |
Python 강좌2 if/for/while/function (0) | 2018.03.15 |
Linear regression (0) | 2018.03.13 |
[python] 보간법 interpolate 사용하기 (0) | 2017.05.25 |
두 쌍 x,y 데이터 리스트로 데이터에 가장 근접한 하나의 직선 그리기.
위키에 나오는 선형 회귀
통계학에서, 선형 회귀(線型回歸, 영어: linear regression)는 종속 변수 y와 한 개 이상의 독립 변수 (또는 설명 변수) X와의 선형 상관 관계를 모델링하는 회귀분석 기법이다. 한 개의 설명 변수에 기반한 경우에는 단순 선형 회귀, 둘 이상의 설명 변수에 기반한 경우에는 다중 선형 회귀라고 한다.[참고 1]
선형 회귀는 선형 예측 함수를 사용해 회귀식을 모델링하며, 알려지지 않은 파라미터는 데이터로부터 추정한다. 이렇게 만들어진 회귀식을 선형 모델이라고 한다.
아래 예에서는 data1의 x, y를 list1의 5열, 7열로 보고,
data2의 x, y를 list의 6열, 7열로 보았음.
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
list1 = [['2012', '1', '3', '1', '832.0', '261.0', '100.00'],
['2012', '1', '5', '1', '507.0', '193.0', '92.50'],
['2012', '2', '3', '1', '412.0', '200.0', '95.00'],
['2012', '2', '5', '1', '560.0', '335.0', '90.00'],
['2012', '3', '3', '1', '584.0', '205.0', '100.00'],
['2012', '3', '5', '1', '595.0', '162.0', '92.50'],
['2012', '4', '3', '1', '504.0', '227.0', '100.00'],
['2012', '4', '5', '1', '591.0', '264.0', '92.50'],
['2012', '5', '3', '1', '489.0', '234.0', '100.00'],
['2012', '5', '5', '1', '561.0', '292.0', '95.00'],
['2012', '6', '3', '1', '622.0', '221.0', '100.00'],
['2012', '6', '5', '1', '478.0', '204.0', '92.50'],
['2012', '7', '3', '1', '974.0', '290.0', '100.00'],
['2012', '7', '5', '1', '553.0', '269.0', '95.00'],
['2012', '8', '3', '1', '473.0', '158.0', '100.00'],
['2012', '8', '5', '1', '526.0', '174.0', '92.50'],
['2012', '9', '3', '1', '701.0', '189.0', '95.00'],
['2012', '9', '5', '1', '502.0', '179.0', '97.50'],
['2012', '10', '3', '1', '470.0', '184.0', '100.00'],
['2012', '10', '5', '1', '579.0', '218.0', '92.50']]
def drawabline(xy):
slope, intercept = np.polyfit(xy[:,0], xy[:,1], 1)
print(slope, intercept)
# or this
# slope, intercept, r_value, p_value, stderr = stats.linregress(data2)
# print(slope, intercept)
abline_values = [slope * i + intercept for i in xy[:,0]]
plt.figure()
plt.scatter(xy[:,0], xy[:,1])
plt.plot(xy[:,0], abline_values, 'b')
plt.show()
data = np.asarray(list1, dtype=np.float)
data1 = np.array( data[:,(4,6)])
print( 'data1=', data1 )
drawabline(data1)
data2 = np.array( data[:,(5,6)])
print( 'data2=', data2 )drawabline(data2)
직선의 방정식으로 기울기, y절편값이 나왔으니, 임의의 x값에 대해서 y값 추정이 가능.
y = slope * x + intercept
출력 결과
Python 강좌4 정규식 regular expression (0) | 2018.03.19 |
---|---|
Python 강좌3 자료형. 수/문자열 (1) | 2018.03.16 |
Python 강좌2 if/for/while/function (0) | 2018.03.15 |
Python 강좌1. 산술연산, range (0) | 2018.03.14 |
[python] 보간법 interpolate 사용하기 (0) | 2017.05.25 |
보간법. interpolate
몇 개의 샘플 포인트들로 추정하여 인접한 점들 사이를 다항식 함수로 완만한 곡선으로 이어준 것을 스플라인 곡선이라고 한다.
보간법은 이러한 미싱 포인트(추정)들을 계산/추정하는 방법이다.
간단하게는 linear 방식(1차)이 있고, 2차, 3차, 4차 곡선등으로 확장하면서 보다 다양하게 추정할 수 있다.
위 그림은 파란색 점의 샘플 좌표들만을 가지고, 스플라인 곡선을 만들어 그린 추정 그래프이다.
python에서 scipy 라이브러리의 interpolate를 사용하여 구현하였다.
아래 코드에서 splrep에 별다른 옵션이 없으면 3차 스플라인 곡선으로 추정하게 된다. (k=1(선형보간), k=2, k=3(default), k=4 이런식으로 옵션을 준다. )
[python code]
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Thu May 25 2017
@author: crazyj
"""
# interpolation test
import numpy as np
import scipy.interpolate as ip
from scipy.interpolate import splrep, splev
import matplotlib.pyplot as plt
# 0~10까지 15개로 나누어 점을 찍음.
x0 = np.linspace(0, 10, 15)
print('x0=', x0)
# cosine 값을 계산
y0 = np.cos(x0)
# x, y (샘플)값을 주고 추정하는 스플라인 곡선을 만든다.
spl = splrep(x0, y0)
# 0~10까지 50구간에 대한 모든 점들을 위 스플라인 곡선으로 추정한 y값을 구한다.
x1 = np.linspace(0, 10, 50)
y1 = splev(x1, spl)
# 그린다.
plt.figure(figsize=(16, 5))
plt.subplot(121)
plt.plot(x0, y0, 'o')
plt.plot(x1, y1, 'r')
plt.grid()
# 이번에는 sine 곡선으로 추정해 본다.
plt.subplot(122)
y2=np.sin(x0)
spl2=splrep(x0, y2)
y3=splev(x1, spl2)
plt.plot(x0, y2, 'o')
plt.plot(x1, y3, 'b')
plt.grid()
plt.show()
Python 강좌4 정규식 regular expression (0) | 2018.03.19 |
---|---|
Python 강좌3 자료형. 수/문자열 (1) | 2018.03.16 |
Python 강좌2 if/for/while/function (0) | 2018.03.15 |
Python 강좌1. 산술연산, range (0) | 2018.03.14 |
Linear regression (0) | 2018.03.13 |