#일차함수 관계식 찾기
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.linear_model import LinearRegression
import numpy as np
x = [-3,31,-11,4,0,22,-2,-5,-25,-14] #주어진 데이터(입력 데이터)
y = [-2,32,-10,5,1,23,-1,-4,-24,-13] #주어진 데이터(목표 데이터)
df = pd.DataFrame({'X':x,'Y':y}) #pandas의 DataFrame 함수를 이용해서 변환
train_features = ['X'] # ==X
target_cols =['Y'] # ==Y
x_train = df.loc[:,train_features] #변수에 train_features의 요소를 전부 입력
y_train = df.loc[:,target_cols] #변수에 traget_cols의 요소를 전부 입력
lr = LinearRegression() #선형회귀함수
lr.fit(x_train, y_train) #x와 y데이터로 선형 관계식 찾기
lr.coef_, #x변수의 회계계수(기울기)
lr.intercept_ #상수항(y절편)
X_new = np.array(11).reshape(1,1) #새로운 값 11을 입력 2차원 배열이므로 reshpae으로 2차원으로로 만들어줌
lr.predict(X_new) #입력 받은 x를 학습을 마친 모델을 통해 값 예측
X_test = np.arange(11,16,1).reshape(-1,1) #-1은 n을 의미, 따라서 n행 1열로 만든다
y_pred = lr.predict(X_test) #입력 받은 x를 학습을 마친 모델을 통해 값 예측
print(y_pred)
정리를 한번 해보겠다.
x | y
1 -> 2
3 -> 4
6 -> 7
19 -> 20
위 식을 보면 사람들은 대부분 규칙을 찾으려 할 것이다.
y = x+1이라는 규칙을 찾을 수 있다.
(물론 다른 규칙이 존재할 수도 있다. 그러나 내가 의도하고 찾고자 하는 규칙은 y = x+1이다.)
사람은 여기서 35를 준다고 하면 결과가 36 일 것이라고 '예측' 할 수 있다.
나는 컴퓨터에게도 같은 일을 시키고 싶다.
컴퓨터가 위 표본들의 규칙을 학습을 통해서 찾아내고 75라는 값을 줬을 때 76을 출력해주면 좋겠다는 것이다.
위에 주석에도 달아놨지만 간단하게 정리 겸 다시 한번 생각을 해보겠다.
=========================데이터 입력 및 확인========================
1. x와 y의 데이터를 입력한다.
2. x를 가로축으로 y를 세로축으로 선 그래프를 만들어 볼 수 있다.
3. matplotlib(맷 플롯 립) 패키지의 plot()을 통해서 입력값으로 x, y 변수의 데이터를 전달할 수 있다.
4. show()를 사용하면 입력받은 x, y의 데이터를 통해서 그래프를 보여준다.
5. 머신러닝에 사용될 데이터를 정리하기 위해서 판 다스를 사용한다.
6. DataFrame()을 사용하여 딕셔너리 형태로 입력하면 데이터 프레임이 만들어진다.
7. 이렇게 만들어진 데이터는 위의 코드 블록의 부분을 예로 들면 10행 2열 즉 10x2 행렬로 만들어진다. 이는 shape()로 확인 가능하다.
8. head()와 tail() 함수를 통해서 앞 뒤 5개의 행을 확인할 수 있다.
============================모델 학습===========================
9. 모델 학습을 위해 x, y 값과 같은 설명변수(train_features)와 목표 변수(target_cols)에 넣는다.
10. loc함수를 통해서 x_train과 y_train에 위 변수들을 넣는다.
11. 사이킷런(sklearn) 패키지의 linear_model 모듈에서 LinearRegression(선형 회귀) 클래스 함수를 불러온다.
11. 해당 클래스를 만든 뒤 클래스명. fit(x_train, y_train)을 통해서 학습을 실행한다.
12. coef_ 로 회계 계수(기울기)를 얻을 수 있고 intercept_ 로 상수항(y절편)을 얻는 것이 가능하다.(입력 데이터가 2차원 구조이므로 회계 계수도 2차원 구조로 반환된다. 즉 입력 데이터의 구조 == 회계 계수의 구조이다.)
==============================예측=============================
13. 이때 array 혹은 aragne를 통해서 데이터를 입력하면 예측값을 확인 가능하다.
14. 주의해야 할 점은 reshpae() 함수를 통해서 기존 학습 데이터와 맞는 차원의 구조로 바꿔주어야 한다는 것이다.
15. x_test = np.arrange(11,16,1).reshape(-1,1) 의 경우 x_test = np.arange(11,16,1) 부분만 보자 이는 x_test라는 변수명에 11부터 15까지 1 간격으로 넣는 것이다. 따라서 x_test = [11,12,13,14,15]가 될 것이다. 근데 이는 1차원 배열이다. 기존 학습 데이터와 맞는 동일한 차원의 구조로 즉 2차원 배열로 넣어 주어야 한다. 따라서 reshape(-1,1)이 필요하다.
여기서 -1은 특정값이 정해지지 않은 n을 의미한다.
즉 n*1 행렬 구조로 바꾼다는 것이다. 여기서는 원소의 개수가 5개 이므로 5*1이 될 것이다. 아래의 그림을 참고하면 좋을 것 같다.
16. y_pred = lr.predict(x_test) 즉 predict 함수를 사용해서 결과 예측을 하면 결과가 나올 것이다.
17. 12 13 14 15 16 우리가 원하고 예측하고자 하는 값이 나오는 것을 볼 수 있다.
'AI & Data Science' 카테고리의 다른 글
BoostCourse AI Pre-Course) Python Module and Project (0) | 2022.07.24 |
---|---|
인공지능 시험 정리 (0) | 2022.06.11 |
파이썬 딥러닝 머신러닝 입문 - 분류 (0) | 2022.01.21 |
파이썬 딥러닝 머신러닝 입문 - pandas (0) | 2022.01.21 |
Logistic Regression(로지스틱 회귀) (0) | 2022.01.14 |