Random state (Pseudo-random number) in Scikit learn

위 그림에서 말하는 polynomial linear regression은 실제 x의 2차 n차이므로 엄밀히 말하면 linear 가 아니지만 coefficient의 형태를 중점으로 보면 linear combination과 흡사하므로 그냥 polynomial linear regression이라고 부른다.

## Preprocessing

이 강의 예시에서는 하나의 x feature칼럼만 필요하고 하나의 실제값만 존재한다. 그리고 첫번째 칼럼은 의미가 없는 칼럼이므로 X matrix를 만들때 인덱스1을 사용했다. 다만 이때 칼럼 갯수가 하나이므로 결과가 벡터로 나오는 문제가 생겼다. 하단 그림 (10, ) 가 벡터라는 것을 보여준다.  모든 features는 matrix형태로 관리하는 것이 좋다. 그래서 약간의 수정 작업을 아래와 같이 한다.

이 강의에서는 linear regression과 polynomial linear regression과 비교하기 위해 두가 지 regression을 구현한다. preprocessing의 PolynomialFeatures class를 이용해 polynomial features를 추가로 만들어주낟. degree는 차수를 나타낸다. 그 결과 matrix를 poly_reg matrix에 저장한다. 이를 확인하면 1로 채워져 있는 첫번째 칼럼을 볼수 있는데 이는 constant이며 이는 feature가 하나인 simple linear regression과 달리 multiple regression에서는 필요하며 라이브러리 사용시에 요구된다.

하단의 코드는 각각 두개의 그래프를 그린다. 최하단은 polynomial regression을 보여준다. plt.plot() 안에 들어가는 X 와 수식을 주의한다.

정확히 이해하지 못했으므로 나중에 다시 확인 요망

PolynomialFeatures 의 degree를 4 로 증가하는 경우. 기존의 코드에서 단지 이부분만 수정한다. 차수를 4차까지 올려 조정하는 경우이다. 좀더 세밀한 알고리즘이 된다.

위의 그래프를 보면 선으로 딱딱하다. 그 이유는 그래프의 스텝이 x feature step 과 같은 1이기 때문이다. 좀더 부드러운 그래프를 얻기 위해 스텝을 0.1로 조정할수 있다.그 과정은 아래와 같다.

label encoder와 one hot encoder의 역할 비교

linear regression은 기본적으로 위의 조건을 만족한다고 가정하고 시작한다. 즉 위의 성질을 가지는 경우에 linear regression 알고리즘을 사용할수 있다.

## DUMMY VARIABLES

category를 나누는 variable이 있는 경우 각 category value별로 칼럼을 추가해 준다. 이강의경우는 두개의 category values가 있는데 이중하나만 d1으로 사용해주고 다른 하나는 constant b0에서 처리하게 했다.

## DUMMY VARIABLE TRAP

dummy variable의 갯수( 하나의 category내 존재하는 값의 종류 갯수 )에서 1을 뺀 갯수만큼만 추가해준다. 예를 들어 50개주의 이름이라면 49개만 만든다. 또 다른 종류의 카테고리가 존재한다면 여기에도 똑같은 규칙을 적용한다.

## BUILDING A MODEL

( 어떤 방법으로 model을 만들지에 대한 방법론 또한 어떻게 중요하지 않는 feature를 알고리즘에서 제거하는지에 대한 방법로 )

때때로 bidirectional elimination만을 stepwise regression이라고 말하기도 한다.

모든 주어진 feature들을 이용해서 만드는 경우. 주어진 상황이 그렇게 해야만 하거나 이미 알고있는 정보에 따르면 모든 feature가 중요하게 작용한다는 판단이 있는경우, 또 backward elimination작업의 전단계 준비작업으로서 사용되기도 한다.

아래그림들에서 fit이라는 용어가 나오는데 거칠게 이해하면 training이라고 이해 할수 있다. 참조) https://stackoverflow.com/questions/45704226/what-does-fit-method-in-scikit-learn-do

참고사항)

p value 가 커지면 그 항목은 결과값에 별 영향을 끼치지 않는다고( not significant ) 보고 feature에서 제외한다.

https://youtu.be/128yz0OCG-I?t=190

처음 시작은 feature 하나로 시작한다. 그리고 가장 낮은 p value를 가지는 feature를 선택한다. 그리고 여기에 다른 feature를 하나더 덧붙인다. 또 가장 낮은 p value를 가지는 알고리즘을 택하고 여기하 하나 더 feature를 덧붙인다.

모든 경우의 수에 해당하는 알고리즘을 테스트해서 결정하는 방법이다.

## 실제 CODING 예시 – multiple linear regression

Dummy variable trap을 방지하기 위한 작업. 이 강의 예시에서 dummy variable 3개가 데이터셑 앞에 생기는데 맨 앞 칼럼은 제거하고 2개만 인정하는 과정이다. 보통 이렇게 하지 않아도 라이브러리가 알아서 dummy variable trap방지를 위한 작업을 하는데 여기서는 교육목적으로 다시 보여주고 있다.

multiple linear regression도 single linear regression과 과정은 대부분 똑같다. 라이브러리가 차이나는 부분을 스스로 많이 커버한다.

test set 의 예상결과를 얻는 과정이다. multiple linear regression도 single linear regression과 과정은 똑같다. 다만 multiple linear regression의 경우 다차원의 데이터이므로 시각적으로 그래프로 보여주기는 힘들다.

## Backward elimination

사전준비 작업

backward elimination을 위한 라이브러리를 import한다.

기존 데이터셑에는 없던 x0 feature값은 데이터 셑 맨 앞에 추가하는 작업이다. x0 는 1 이며 이는 예상값을 계산하는데 constant와 곱해져서 더해진다. append를 통해 칼럼을 더한다. 맨앞에 x0의 값이 오게끔하기 위해 1로만 이루어진 1열 칼럼을 만들고 여기에 기존 데이터셑을 더한다. ones method는 1만 들어있는 50줄 1칼럼 matrix를 만든다.

step2 를 위한 작업은 아래와 같다.

이전까지 사용했던 sklearn의 LinearRegression 대신 OLS를 사용했다. OLS는 ordinary least squares 이며 linear regression과 같은 의미로 사용되곤한다.

X[: , [0, 1, 2, 3, 4, 5]] 는 모든행, 0 1 2 3 4 5 칼럼을 가지는 matrix가 된다. 나중에 p value가 특정값보다 큰경우 해당 칼럼을 제거할 것이다.

OLS obj의 summary()를 이용 추가정보를 출력 한다. 그중 아래와 같이 p value를 확인 가장 높은 p value ( 연관성이 떨어지는 )를 가지는 칼럼을 확인한다. 그 칼럼을 삭제할 것이다.

기존 코드에서 연관성이 떨어지는 칼럼을 삭제하고 새로 model을 만든다.