파이썬에서 처음으로 단일 회귀 분석
9399 단어 기계 학습 입문파이썬scikit-learn
일단 단회귀 분석에 대한 설명으로는 다음과 같은 예가 있습니다.
1. 하나의 목적 변수(y)를 하나의 설명 변수(x)로 예측하는 것.
2. 그 관계를 y = ax + b 라는 1차 방정식의 형태로 나타낸다.
※ a 는 기울기, b 는 절편
테스트 환경은 언제 설치했는지 기억하지 않는 Jupyter Notebook을 사용합니다.
사용한 버전은 다음과 같습니다.
The version of the notebook server is: 6.0.0
Python 3.7.3 (default, Mar 27 2019, 22:11:17)
[GCC 7.3.0]
pandas
pandas (판다스, 팬더 또는 팬더)는 데이터를 변환하고 분석하는 라이브러리입니다.
이것을 사용해, 데이터를 읽어 갑니다.
사용한 버전은 다음과 같습니다.
import pandas as pd
print(pd.__version__)
# 0.24.2
데이터 로드
이번에는 48명분의 신장(x)과 체중(y)의 데이터(sample.csv)를 사용해 보겠습니다.
sample.csv
x,y
152,57
173,78
172,83
178,58
166,63
175,66
158,66
163,74
157,64
165,68
176,68
165,60
147,63
153,63
146,47
156,49
145,59
181,66
160,74
140,55
152,55
165,56
170,65
159,51
151,52
167,51
177,82
155,63
159,45
170,66
154,56
163,60
161,70
165,70
150,57
158,53
163,67
186,69
168,68
170,74
155,60
159,49
170,87
163,50
166,58
161,69
159,60
171,71
sample.csv 파일을 읽고 처음 세 줄을 출력해 봅니다.
다음과 같이 읽는 것 같습니다.
df = pd.read_csv('sample.csv')
df.head(3)
x y
0 152 57
1 173 78
2 172 83
pandas.read_csv로 데이터를 읽으면 DataFrame이라는 형식으로 데이터가 만들어지는 것 같습니다.
pandas.read_csv
DataFrame
각 열 데이터를 변수 x, y에 저장합니다.
x = df.x
y = df.y
matplotlib
matplotlib (매트 플롯 리브)는 그래프 그리기 라이브러리.
사용한 버전은 다음과 같습니다.
import matplotlib
matplotlib.__version__
# '3.1.0'
그래프 그리기
import matplotlib.pyplot as plt
plt.plot(x, y)
plt.show()
모든 점이 선으로 연결된 그래프가 표시되었습니다.
기대하고 있던 것은 점만이 표시되고 있는 그래프이었으므로, 이하와 같이 수정합니다.
import matplotlib.pyplot as plt
plt.plot(x, y, 'o')
plt.show()
scikit-learn
scikit-learn(사이킷 런)은 과학기술 계산을 실시하기 위한 Python 패키지 NumPy(남파이 또는 남파이)와 SciPy(사이파이) 위에 구축된 기계 학습용 라이브러리.
사용한 버전은 다음과 같습니다.
import sklearn
print(sklearn.__version__)
# 0.21.2
scikit-learn을 사용하면 쉽게 단회귀 분석할 수 있을 것 같습니다.
LinearRegression
데이터 학습
선형 회귀 모델(LinearRegression)의 인스턴스를 생성하고 데이터를 학습(fit)시킵니다.
from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(x, y)
# ValueError: Expected 2D array, got 1D array instead:
라고 생각하면, 에러가 나 버렸습니다. 2차원 배열이 필요한 곳에 1차원 배열을 제공하는 것 같습니다.
x, y 의 격납 방법을 변경해, 다시 학습해 봅니다.
x = df[['x']]
y = df[['y']]
from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(x, y)
# LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False)
이번에는 가져온 것 같습니다.
여기의 부분은, 원래의 x 와 y 그대로도 다음과 같이 정의하면 움직여 줄 것입니다.
# values で numpy.ndarray 型に変換し、np.reshape(-1, 1)でn行1列に変換する
model.fit(x.values.reshape(-1,1), y.values.reshape(-1,1))
데이터 예측
그러면 예측(predict)시켜 보겠습니다.
plt.plot(x, y, 'o')
plt.plot(x, model.predict(x), linestyle="solid")
plt.show()
설명 변수(x)에서 목적 변수(y)를 예측한 결과 오른쪽 어깨 상승(신장이 늘어날수록 체중이 늘어난다)의 선이 그려졌습니다.
이 직선의 "기울기"와 "절편"에 대해서는, 각각 coef_ 와 intercept_ 속성이 보관 유지하고 있는 것 같기 때문에, 그것들을 출력해 보면, 직선의 방정식을 얻을 수 있습니다.
print('y = %.2fx + %.2f' % (model.coef_ , model.intercept_))
# y = 0.52x + -20.94
이상으로부터, a(기울기)와 b(절편)를 알 수 있어, x(신장)로부터 y(체중)를 예측할 수 있는, 즉 "단회귀 분석"을 실현할 수 있었다고 하게 됩니다 .
Reference
이 문제에 관하여(파이썬에서 처음으로 단일 회귀 분석), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/blueskyarea/items/223aadf3cd5253bfecd4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)