자바 프로그램은 한 개 이상의 클래스(class)로 구성된다.이러한 클래스는 한 개 이상의 필드(field)나 메소드(method)로 구성된다. 간단한 자바 프로그램의 기본 구조는 위와 같다.
public 제어자를 쓰는 공용 클래스는 항상 이름이 파일명과 같아야 한다. 이는 JVM에 이것이 진입점임을 알리는 방법이기 때문이다.만약 그렇게 하지 않을 경우 JAVA소스 파일을 컴파일 한 후 자바 인터프리터가 해석해야하는 클래스와 진입점 포함하는 클래스를 쉽게 식별할수가 없다고 한다. public이 아닌 경우에만 다른 이름을 사용할 수 있다.

 

자바 프로그램이 실행되면 맨 먼저 main() 메소드를 찾아 그 안의 모든 명령문을 차례대로 실행한다.
따라서 하나의 자바 프로그램에는 main() 메소드를 가지는 클래스가 반드시 하나는 존재해야 한다.
자바에서 main() 메소드는 위와 같이 선언한다. main() 메소드는 반드시 public static void로 선언되어야 한다.
자바가 실행되었을 때 main메소드를 가장 먼저 찾아가는데 public이 아닌 다른 접근 제어인 default, private, protected 등 은닉 제어자를 사용할 경우 자바 프로그램이 접근할 수 없기 때문이다.

첫번째로 입력에 대해 알아보자면 일단 System.in.read()가 있다. System.in은 java.io.*에서 Import하는 클래스로, 값을 입력받는 클래스인데, 여기에 값을 읽어주는 read를 붙여서 사용한다. 값은 여러가지 방식으로 들어오기 때문에 만약 잘못된 값이 들어온 경우 에러가 나지 않도록 예외처리를 필수로 해줘야한다. 아스키 코드로 값을 받기 때문에 입력값을 그대로 출력받기 위해서는 숫자의 경우 48을 빼거나 문자의 경우 char로 형변환을 해주어야 한다. 또 read메서드는 한바이트씩 값을 읽기 때문에 바이트 배열을 이용해 빈 배열에 입력값을 저장 후 한번에 출력하는 방법이 있다.

System.in.read()로 숫자를 입력받을 때에는 한자리에 적합하고, 두자리 이상의 숫자를 입력받을때에는 부적합하다.
1 byte당 하나의 숫자만 입력받기 때문이다.
그러니 두자리 이상의 숫자를 입력받고 싶을때에는Scanner를 이용하는게 더 편리하다. scanner의 경우 예외처리를 할 필요가 없다. next, nextline은 문자열을 각각 공백과 줄바꿈 단위로, nextint는 정수를, nextflaot는 실수를 입력받는다.

참고

https://dinfree.com/lecture/language/112_java_2.html#m2ex2

 

자바 Part-1

자바 프로그램의 기본구조와 변수, 메서드, 연산자, 분기문등 기본 문법 요소를 배웁니다.

dinfree.com

https://www.saichoiblog.com/java_syntax/

 

자바 기본 문법 총정리Saichoiblog

오늘은 수업에서 배운 자바 기본 문법을 총정리한 글을 쓰려고 합니다. 데이터출력,변수, 연산자, 조건문, 반복문, 배열에 관한 내용을 알아보기 쉽게 간략하게 정리했습니다.

www.saichoiblog.com

https://ittrue.tistory.com/108#:~:text=%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D%EC%9D%84%20%ED%95%98%EB%A9%B4%EC%84%9C%20%EB%B3%80%EC%88%98%EC%9D%98,%EC%B6%9C%EB%A0%A5%EC%9D%84%20%ED%95%A0%20%EC%88%98%20%EC%9E%88%EB%8B%A4.

 

[Java] 자바 입출력 개념 정리 및 사용법 (print, println, printf, Scanner)

입출력 프로그래밍을 하면서 변수의 담긴 값이나 문자열을 확인하거나, 데이터를 입력받아 코드를 수행하도록 할 수 있다. 입력 메서드와 출력 메서드를 활용하여 콘솔 창에 입력 및 출력을 할

ittrue.tistory.com

https://beausty23.tistory.com/10

 

[Java] System.in , Scanner 입출력

[System.in] 1. System.in은 java.io.*; 를 import한다. 2. System.in을 이용해 값을 입력받을 때, 잘못된 값을 입력받은 경우를 대비해 항상 예외 처리를 해줘야 한다. 예외 처리 구문이 없으면 오류가 발생한다

beausty23.tistory.com

http://www.tcpschool.com/java/java_intro_systemout

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com

https://honeybuzz-bee.tistory.com/12#recentEntries

 

아래 책과 인강으로 스터디 진행

https://www.inflearn.com/course/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EA%B0%9C%EC%9D%B8%ED%99%94-%EC%B6%94%EC%B2%9C%EC%8B%9C%EC%8A%A4%ED%85%9C

1.1 주요 추천 알고리즘

추천 시스템에 사용될 수 있는 알고리즘의 종류는 자세히 분류해보면 수천 가지가 있지만 대체로 협업 필터링(Collaborative Filtering : CF), 내용 기반 필터링(Content-Based Filtering : CB), 지식 기반 필터링(Knowledge-Based Filtering : KB), 딥러닝(Deep Learning : DL) 추천 기술, 하이브리드(Hybrid) 기술 등 몇 가지 알고리즘의 변형이라고 할 수 있다.

 

1) 협업 필터링 (Collaborative Filtering : CF)

협업 필터링이란 구매, 소비한 제품에 대한 각 소비자의 평가를 받아서 평가 패턴이 비슷한 소비자를 한 집단으로 묶어 그 집단의 소비자들의 취향을 활용하는 기술이다. 즉, 평가 패턴이 비슷한 사람들이 공통적으로 좋아하는 제품 중 소비자가 아직 접하지 않은 제품을 골라 제시하는 기술이다. 영화나 음악 등 사람들의 취향이 뚜렷이 구분되는 제품을 추천할 때 더욱 정확하다. 한계점으로는 소비자들의 평가 정보를 구하기가 어렵다는 점이 있는데, 이를 극복하기 위해 간접적인 정보를 사용한다고 한다. (관심사 검색이나 장바구니 넣기 등 클릭스트림 형태로 수집되는 정보) 아마존의 제품 추천 시스템이나 넷플릭스 추천 시스템에서 사용된다.

 

2) 내용 기반 필터링 (Content-Based Filtering : CB)

내용 기반 필터링이란 제품의 내용을 분석해서 제품 간의 유사성을 이용해 추천하는 기술을 뜻한다. 뉴스나 책 등 텍스트 정보가 많은 제품을 분석하여 추천할 때 많이 이용되는 기술이다. 텍스트 중에서 형태소를 추려내고 분석해 핵심 키워드를 정리하여 소비자의 관심 사항에 대한 분석이 가능하다.

 

3) 지식 기반 필터링 (Knowledge-Based Filtering : KB)

내용 기반 필터링과 협업 필터링은 어떤 소비자가 어떤 제품을 좋아할지에 대한 분석은 가능하지만 왜 그 제품을 좋아할지 에 대한 답을 할 수 없다는 한계를 가지고 있다.

 지식 기반 필터링은 특정 분야(domain) 전문가의 도움을 받아서 그 분야에 대한 전체적인 지식 구조를 만들어서 이를 활용하는 방법이다. 전체적인 지식 구조는 다양한 형태로 표현될 수 있는데, 그 분야의 중요한 개념을 가지고 체계도를 만드는 것이 가장 일반적이다.(ex 컴퓨터 -> PC, 노트붇, 태블릿 등으로 하위 키워드로 분류) 전체적인 구조를 알 수 있기 때문에 소비자가 구매한, 혹은 관심 있는 제품과 관련이 있는 제품을 체계도에서 찾아볼 수 있으며, 지식이 중요한 분야(교육, 커피 등)에서 효과가 좋다. 다만 각 분야의 전문가가 필요하고, 전문가의 능력에는 한계가 있기 때문에 모든 세세한 분야에 적용할 수 없다는 단점이 있다.

 

4) 딥러닝 추천 기술 (Deep Learning : DL)

딥러닝 방법을 사용하는 방식으로 딥러닝의 입력값으로 다양한 사용자와 아이템의 특징값(feature)을 사용하고, 이를 통해 얻은 출력값은 각 아이템에 대한 사용자의 예상 선호도를 계산한 값이다. 예상 선호도가 높은 아이템을 추천해주며, 다양한 입력 변수 사용이 가능하다. 일반적으로 이미지 인식에서 성능이 좋으나, 연속값으로 표시되는 아이템에 대한 선호도 계산은 정확도가 크게 우월하지 않아 다른 알고리즘과 같이 사용된다.

 

5) 하이브리드 기술(Hybrid)

실제로 추천 시스템을 구축할 때는 기술을 한 가지만 사용하는 경우는 별로 없고 대부분 두 가지 이상의 기술을 혼합해서 사용하는 하이브리드 형태로 사용된다. 복수의 기술을 사용하는 경우에 정확도가 향상되고 결합되는 기술의 종류가 많아질수록 더 큰 향상이 이루어진다. (ex CF + CB = Reco)

 

1.2 추천 시스템 적용 사례

넷플릭스의 경우 협업 필터링 기술을 사용해서 고객을 위한 영화 추천 시스템을 사용한다. 각 고객의 취향에 따라 맞춤화와 개인화가 된다.

아마존의 경우 협업 시스템을 기반으로 다양한 추천 기술을 결합한 하이브리드 기술이 적용되어 있다. 사용자의 제품에 대한 평가 데이터를 다양한 방법으로 수집이 가능하다는 특징이 있다. 아마존은 취급하는 제품의 종류와 카테고리가 여러가지 이며 사용자 수도 훨씬 방대하며 선호 정보의 종류가 더 다양하기 때문에 아마존은 넷플릭스보다 더 복잡하고 어려운 시스템을 사용한다.

 

 

안녕하세요! 기획부 이소희입니다 :)

이번 세션에서는 트리 알고리즘에 대해 학습했습니다.


위의 점들은 색깔 별로 한번에 분류할 수 없기 때문에 이걸 logistic 이나 softmax로 푼다면 계산량이 무척 늘어나고 비효율적입니다. 이런 데이터셋의 경우 트리를 사용하는 것이 효율적입니다.

결정 트리란, 데이터 사이에 존재하는 패턴을 찾고, 이 규칙들의 조합으로 예측 모델을 만드는 알고리즘입니다. 결정 트리는 분류와 회귀가 모두 가능한 지도학습 모델로, 스무고개 하듯이 예/아니오 질문을 이어가며 학습합니다. 하나의 기준, 즉 질문 하나마다 변수가 두개의 영역으로 구분되는데, 여기서 질문 또는 정답이 담긴 부분을 노드라고 합니다.

맨 위의 노드를 루트 노드, 구조 상의 마지막 노드를 리프 노드, 그 외의 모든 노드들을 중간 노드라고 합니다.

 

트리의 장점은 데이터의 전처리가 거의 필요 없으며, 직관적이고 이해가 쉬우며 변수의 중요성을 비교할 수 있다는 것입니다.

그러나 모든 데이터들의 상황을 만족하는 완벽한 규칙을 만들기 어려움에도 모델의 정확도만을 높이기 위해 분류조건을 계속해서 추가하다 보면 트리의 깊이가 깊어지고 과적합이 발생됩니다.

의사결정트리의 크기로 모델의 복잡도를 따질 수 있는데, 너무 작으면 과소적합, 너무 깊으면 과대 적합이 발생합니다. 이러한 과대 적합을 막기 위해 가지치기를 실시합니다. 가지치기란 과적합을 줄이고 일반화 가능성을 증대시키는 서브트리를 찾는 과정을 의미합니다.

쉽게 말해 불필요한 규칙, 즉 분류 오류를 크게 하거나 부적절한 규칙을 제거하는 과정입니다.

 

사전 가지치기 방법으로는 트리의 max_depth를 제한하거나 min_sample_split 파라미터를 조정하여 한 노드에 들어있는 최소 데이터 수를 정해줄 수 있습니다. (예를 들어, 한 노드에 10개의 데이터가 존재할 때 그 노드는 더이상 분기하지 않게 설정할 수 있습니다.)

 

사후 가지치기 방법으로는 트리를 만든 후 데이터 포인트가 적은

노드를 삭제하거나 병합하는 방법이 있습니다.

sklearn에서는 사전가지치기 방법만을 지원합니다.

 

그리디 알고리즘이란 여러 경우 중 하나를 결정해야 할 때마다 그 순간에 최적이라고 생각되는 것을 선택해 나가는 방식으로,

나중에 미칠 영향은 고려하지 않고 "지금"의 선택에만 집중하는

근시안적인 알고리즘입니다.

 
순간의 선택 때문에 최적의 트리를 만들 수 있는 가능성 자체를 배제합니다.

그러나 최적의 트리를 찾는다는 것은 매우 어려운 일이기 때문에

그리디 알고리즘이 항상 최적의 트리를 찾지 못하더라도

충분히 합리적인 방법이라고 할 수 있습니다.

CART(Classification and Regression Tree)라고 불리는 의사결정트리 알고리즘은 가장 널리 사용되는 의사결정나무 알고리즘으로,

분류와 회귀 나무에서 모두 사용 가능합니다.

불순도를 측정할 때 목표 변수(y)가 범주형인 경우 지니 지수를 사용하고, 연속형인 경우 분산을 사용하여 이진 분리합니다.

 

불순도란 불확실성, 즉 해당 범주 안에 서로 다른 데이터가 얼마나 섞여 있는지를 뜻합니다. 한 범주 안에 하나의 데이터만 있다면 불순도가

최소, 정확히 반반 섞여있다면 불순도는 최대입니다.

의사 결정 트리 알고리즘은 목표 변수인 y가 범주형일 경우 이러한 불순도를 가장 최소화 시키는 방향으로 학습을 진행합니다.

 

불순도를 측정하는 지표에는 엔트로피 지수, 지니 계수, 카이제곱 통계량이 있습니다. 지니 계수는 통계적 분산 정도를 정량화해서 표현한 값이고, 엔트로피는 확률분포가 가지는 정보의 확산도를 수치로

표현한 것으로, 둘 다 0과 1 사이의 값을 가지며 0에 가까울수록

불순도가 낮음을 의미합니다.

성능을 중요시 한다면 엔트로피를, 연산 속도를 중요시 한다면

지니 계수를 사용하는 것이 효율적입니다.

 

정보 이익이란 정보의 가치로, 사전 엔트로피에서 사후 엔트로피 값을 뺀 값입니다. 불확실성이 얼마나 줄어들었는지를 평가하는 지표입니다.

고정된 테스트 세트를 통해 모델의 성능을 검증하고 수정하는 과정을 반복하면 테스트 세트에 과적합 될 수 있습니다. 테스트 세트로 일반화 성능을 올바르게 예측하려면 모델을 만들고 난 뒤 마지막에 한 번만 사용하는 것이 좋습니다.

 

가장 기본적인 Holdout 검증은 전체 데이터셋에서 테스트 데이터를 분리하고 남의 학습 데이터의 일부를 검증 데이터 셋으로

분리하는 방법입니다.

즉, 전체의 데이터를 학습/검증/테스트 데이터로 나누게 됩니다.

학습 세트에서 모델을 훈련 하고 검증 세트로 모델을 검증하는데,

테스트하고 싶은 매개변수를 바꿔가며 가장 좋은 모델을 선택합니다.

선택된 매개변수를 사용해 검증세트와 학습세트를 합친 데이터 셋에서 모델을 학습시키고 마지막 테스트 세트에서 최종 점수를 평가합니다.

가장 간단한 방법이지만 학습 데이터에 손실이 있기 때문에 데이터가 적은 경우에는 사용이 힘들고, 검증을 한번 밖에 진행하지 못합니다.

이를 개선하기 위해 교차 검증 방법을 활용합니다.

교차 검증은 최소 2번 이상의 검증을 진행하므로 각 검증 결과치의 평균을 모델의 검증 결과로 사용하게 됩니다.

교차 검증의 대표적인 방법으로 K-fold 교차 검증이 있습니다.

이 방법은 학습 데이터를 k개로 나눈 뒤 차례대로 하나씩을 검증 데이터셋으로 활용하여 k번 검증을 진행하는 방식입니다.

이 방법도 학습 데이터의 손실은 발생하지만 결국 전체 데이터를 다 볼 수 있고 검증 횟수를 늘릴 수 있다는 장점이 존재합니다.

예를 들어 k=5일때 데이터를 5등분한 후 처음에는 1-4번째 등분을 학습 데이터로, 5번째 등분 하나를 검증 데이터셋으로 설정하고 평가를 수행합니다. 그 다음으로는 1-3,5 번째 등분을 학습데이터로, 4번째 등분을 검증 데이터로 설정 후 평가를 수행합니다. 끝까지 반복 후 5개의 예측 결과를 평균해 결과에 반영합니다.

 

Stratified K fold는 불균형한 분포도를 가진 레이블 데이터 집합을 위한 K fold 방식입니다. 위의 데이터 집합은 특정 레이블 값이 특이하게 많거나 매우 적어서 값의 분포가 한쪽으로 치우치는 것을 의히합니다.

예를 들어 대출 사기 데이터를 예측한다고 했을 때 전체 데이터 중 대출 사기를 당한 데이터의 비율은 매우 적을 것입니다.

이때 원본 데이터와 유사한 대출 사기 레이블 값의 분포를

학습/테스트 셋에서도 유지해야합니다.

Stratified K fold는 원본 데이터의 레이블 분포를 먼저 고려한 뒤

이 분포와 동일하게 학습과 검증 데이터 셋을 분배하여

학습 데이터와 검증 데이터셋이 가지는 레이블 분포도가

유사하도록 검증 데이터를 추출합니다.

우리가 일반적으로 알고 있는 파라미터는 매개변수입니다.

모델 내부에서 결정되며, 데이터로부터 학습되거나 예측되는 값으로

평균, 표준편차, 선형회귀 계수, 가중치, 편향 등이 있습니다.

즉, 직접 설정이 불가능한 변수들입니다.

그에 반해 하이퍼 파라미터는 초매개변수로,

모델 학습 과정에 반영되는 값입니다.

 

예시로 학습률, 손실함수 종류가 MSE 인지, RMSE 인지 결정하는 것, 배치 사이즈, 에폭 횟수, knn에서 k값 등이 있습니다.

하이퍼 파라미터 튜닝을 하는 이유는 모델을 최적화하기 위해서입니다.

하이퍼 파라미터를 어떻게 설정하느냐에 따라서

모델의 성능이 달라집니다.

 

예시 그래프를 보면 모델은 랜덤포레스트로 모두 동일한데 하이퍼 파라미터인 max features만 다른 것을 볼 수 있습니다. 모델은 다 같은데 하이퍼 파라미터 설정에 따라 에러값이 달라지게 됩니다.

가장 최적의 하이퍼 파라미터 조합을 찾기 위해서 하이퍼 파라미터

튜닝을 해줍니다. Manual search는 사용자가 꼽은 조합 내에서 최적의 조합을 찾는 것을 말합니다. 사용자의 직감 또는 경험에 의거하여 최적의 조합 후보들을 선출해내야 하기 때문에, 그것이 어려운 사용자에게는 무척 비효율적인 방법입니다. manual을 제외한 나머지 방법을 'automated hyperparameter selection'이라 부릅니다.

 

그리드 서치란 모델 하이퍼 파라미터에 넣을 수 있는 값들을 모두 입력하고, 모든 경우의 수에 대해 모델을 만들고 성능을 평가해 그 중 모델 성능을 가장 높게 만드는 파라미터 값을 찾아주는 방법입니다.

각 하이퍼 파라미터에 이용해볼 값들을 미리 정해두고,

모든 조합을 시행하여 최적의 조합을 찾는 방법입니다.

위 그래프에서 찾는 하이퍼 파라미터의 조합은 x1 x2이고, 0과 1 사이에서 존재할 수 있는 모든 조합을 다 찾아보고 성능을 계산해서 그 중에서 가장 좋은 파라미터 값을 고릅니다. 파란 경계선이 높은 성능, 빨간 경계선이 낮은 성능을 보인 조합입니다.

 

그리드 서치는 다양한 모델의 훈련 과정을 자동화하고 최적의 값을 제공하는 효율적인 도구이지만 모든 조합을 다 고려하기 때문에 최적의 조합을 찾을 때까지 매우 오래 걸린다는 단점이 있습니다. 또한 성능의 최고점을 찾지 못할 가능성이 높습니다. 여러 개를 비교분석해서 최고를 찾아내는 검색 기법이지 탐색 기법이 아니기 때문입니다.

 

랜덤 서치는 경계 내에서(최솟값, 최댓값) 임의의 조합을 추출하여 최적의 조합을 찾는 방법으로, 그리드 서치처럼 모든 경우의 수를 따지지 않기 때문에 그리드 서치에 비해 비해 시간 대비 성능이 좋습니다.

또한 성능의 최고점을 찾아낼 가능성이 높은데, Grid search는 사용자가 꼽은 선택지 중에서만 고르지만, Random search는 훨씬 다양한 조합들을 시험하여 예상치 못한 결과들을 얻을 수 있기 때문입니다.

특히 적은 수의 하이퍼파라미터가 모델 성능의 영향을 미치는 경우에 좋은 결과를 냅니다.

그래프를 보면 그리드 서치와 동일하게 x1 과 x2의 최적의 조합을 찾고 있는데, 모든 경우의 수를 다 따지지 않고 특정 값이 정해지지 않은

범위 내에서 100개의 조합을 무작위로 추출하게 됩니다.

때문에 x가 산발적으로 분포하게 됩니다. 초록색 선을 보면 무작위로 선택되었음을 알 수 있습니다.

 

그리드 서치의 경우와 결과는 비슷합니다. X1은 0.4 근처, x2는 0.6 근처에서 많이 추출되었고 성능이 높은 푸른 경계선 부분의 위치도 비슷합니다.

 

 

 

 

이번 세션에서는 확률적 경사하강법에 대해 학습했습니다.


머신러닝이나 딥러닝에서 모델을 설계할 때 좋은 성능을 보여주기 위해서는 하이퍼 파라미터를 최적화 시켜야 합니다. 이때 조정하는 파라미터는 에포크, 내부 노드 등 여러 파라미터가 있지만 그 중에 가장 드라마틱하게 성능을 바꿔주는 파라미터를 optimizer라고 합니다.

optimizer는 train 데이터셋을 이용하여 모델을 학습할 때 데이터의 실제 결과와 모델이 예측한 결과를 기반으로 잘 줄일 수 있게 만들어주는 역할을 합니다. 예를 들어 네비게이션에서 최적의 경로를 고르는 방식 중 큰 길 위주의 경로, 최단거리, 무료 길 등 여러 알고리즘이 optimizer 종류와 비슷한 역할을 한다고 볼 수 있습니다.

optimizer의 종류는 경사 하강법(Gradient Descent), 확률적 경사 하강법(Stochastic Gradient Descent, SGD), Momentum, Nesterov Accelerated Gradient (NAG), Adam, AdaGrad, RMSProp, AdaMax, Nadam 등

여러 종류가 있으나 이번 세션에서는 경사하강법을 중점적으로

알아보았습니다.

좌표하강법(Coordinate descent)란 i번째 원소만을 변수로 보고 나머지 변수는 고정값으로 본 뒤 f(x)를 최소화하는 xi를 찾는 방식입니다.

경사하강법 (Gradient descent)이 어떤 함수의 최솟값을 향한 방향을 계산하는데 1차 미분을 사용하는 반면 뉴턴 방법 (Nexton's method)은 2차 미분을 사용합니다. 따라서 뉴턴 방법이 경사하강법 보다는 성능이 훨씬 좋습니다.

뉴턴 방법은 최적화 변수의 시작값 x에서 목적 함수 f(x)를 테일러 시리즈로 전개 후 2차 함수로 근사화하고, 이 근사함수의 최솟값을 구하기 위해 미분해주는 방식으로 진행됩니다.

해당 점에서 접하는 2차 함수의 최소 화원으로 가중치를 업데이트하는 뉴턴 방법

경사하강법 (Gradient descent)은 접선의 기울기인 미분값을 이용하여 극소값을 구하는 방법입니다.

함수의 최솟값 위치를 찾기 위해 정의한 step size만큼 움직이며 최적의 파라미터를 찾을 때까지 밑의 식을 반복합니다.

경사하강법에서 learning rate란 학습률로, 하강하는 보폭을 결정하는

하이퍼 파라미터 입니다. (위 식에서 a)

학습률이 너무 작으면 수렴하는데 시간이 오래 걸리고,

너무 크면 극점을 건너뛰어 수렴하지 못할 수 있습니다.

보통 0.01로 설정 후 학습해보고 학습 결과가 발산하면 값을 줄이고,

학습 시간이 너무 오래 걸리면 큰 값으로 설정합니다.

 

Learning Rate Scheduling 이란 미리 정의된 Schedule 방식에 따라 학습 중에 learning rate를 조절하는 것으로 Constant Learning Rate, Time-Based Decay, Step Decay, Exponential Decay, Adaptive Learning Rate Methods 등이 있습니다.

시작점이 어디 있느냐에 따라 전역 최솟값에 수렴하는 것이 아닌 지역 최솟값이나 안장점에 갇히는 문제가 발생할 수 있는데, 이를 방지하기 위해 기울기에 관성을 부여하여 작은 기울기는 쉽게 넘어갈 수 있게 해주는 Momentum 개념을 이용한 방식이 제안되었습니다.

첫 위치를 잘 정해서 좋은 학습을 하기 위해 시작 지점의 가중치를 잘 정해주려면 상황에 맞는 가중치 초기화 방법을 사용하게 됩니다. 가중치를 초기화하는 방시에는 첫째로 모든 파라미터 값을 0으로 놓고 시작하는 Zero initialization이 있습니다. 그러나 신경망의 파라마터 값이 모두 같다면 갱신을 하더라도 모두 같은 값으로 변하게 되므로 여러개의 노드로 신경망을 구성하는 의미가 사라집니다. 그렇기 때문에 초기값은 무작위로 설정해야 합니다.

이렇게 무작위로 설정해주는 방법을 Random initialization이라고 합니다.

그러나 이 경우에도 모든 노드의 활성화 함수의 출력값이 비슷하면 노드를 여러 개로 구성하는 의미가 사라지게 됩니다.

이러한 문제를 해결하기 위해 고안된 초기화 방식이 Xavier initialization입니다.

사비에르 초기화에서는 고정된 표준편차를 사용하지 않고, 이전 은닉층의 노드 수에 맞추어 변화시킵니다. 이러한 방식을 사용하면 층마다 노드 개수를 다르게 설정하더라도 이에 맞게 가중치가 초기화되기 때문에 고정된 표준편차를 사용하는 것보다 훨씬 더 강건합니다.

He initialization이란 ReLu 함수를 활성화 함수로 사용할 때 추천되는 초기화 방법으로, 활성화 함수에 따라 적절한 초기화 방법이 달라집니다.

에포크란 훈련 데이터셋에 포함된 모든 데이터들이 한번씩 모델을 통과한 횟수로, 전체 학습 데이터셋을 학습하는 횟수입니다.

에포크를 높일수록 손실값이 감소하여 적절한 학습률에서 적합한 파라미터를 찾을 확률이 올라갑니다. 그러나 에포크를 지나치게 높이게 되면 훈련 데이터셋에 과적합되는 문제가 발생하므로 이 경우에는 최적점의 에포크로 다시 훈련하거나 학습 진행에 따라 조기 종료하는 방식을 사용합니다.

머신러닝을 위한 데이터셋을 정제할 때, 특성별로 데이터의 스케일이 다른 경우 머신러닝 과정에서 문제가 발생할 수 있기 때문에 스케일링 작업을 통해 모든 특성의 범위 또는 분포를 같게 만들어 주어야 합니다.

경사하강법은 전체 데이터셋을 모두 사용하여 기울기를 계산하기 때문에 데이터셋의 크기가 큰 경우 학습 시간이 오래 걸려 매우 비효율적입니다.

이 방식을 Batch Gradient Descent라고 하는데, 데이터가 많을 경우 계산 비용이 과다해집니다. 그래서 사용하는 방식은 모든 데이터셋이 아닌 한개의 무작위 데이터셋을 이용하여 경사하강을 진행하는 Stochastic Gradient Descent로, Batch 방식에서 발생하는 계산 비용 문제를 해결하기 좋습니다.

위의 수도코드에 나와있듯 모든 샘플이 theta의 최적화에 영향을 미치는 것이 Batch Gradient Descent 방법이며, 위 그림과 같이 매 iteration마다 최적의 파라미터를 찾아가며 global minimum을 향합니다.

그에 반해 확률적 경사하강법은 하나의 데이터셋에 대한 Cost를 계산한 후 경사하강을 진행합니다.

이 경우 아래와 같이Noise가 발생하지만 최적의 파라미터에 매우 근접하게 됩니다.

확률적 경사하강법은 연식 시간이 비교적 빨라 수렴속도가 빠르고 계산 시 메모리 비용이 절약된다는 장점이 있으나, 샘플의 선택이 확률적이며 심한 Noise 때문에 global minimum을 찾지 못할 가능성이 존재합니다.

이 경우 사용하는 방식이 b개의 데이터셋에 대한 Cost를 계산하는 Mini-batch 방식입니다. b가 10이라면, i~i+9번째 example에 대한 미분항을 계산 후 모든 m에 대해 Parameter를 최적화합니다.

일반적으로 b = 10이나, 2~100사이에서 선택 가능하며 Stochastic보다 병렬처리에 유리하기 때문에 성능 향상을 기대할 수 있습니다.

세 방식을 비교해보면 모두 minimum 값 근처에 도달했으며, batch 방식은 정확히 도달한 것을 볼 수 있습니다. Stochastic과 mini-batch는 최솟값 근처에서 맴도나, 적절한 학습 스케쥴을 사용하면 최솟값에 도달합니다.


이상으로 9기 7주차 정규세션을 복습해보았습니다!

다음 시간에는 Decision Tree, 교차검증, 하이퍼파라미터 튜닝에 대해 공부할 예정입니다🥰

 

이번 세션에서는 로지스틱 회귀에 대해 학습했습니다.


 

지금까지 배운 선형 회귀 분석은 다중회귀, 다항 회귀 모두 종속변수 Y가 연속형 변수였습니다. 로지스틱 회귀 종속변수가 범주형인, 회귀를 사용하여 데이터가 어떤 범주에 속할 확률을 0에서 1 사이의 값으로 예측하고 그 확률에 따라 더 가능성이 높은 범주에 속하는 것으로 분류해주는 지도학습 알고리즘입니다.

예를 들어 사망/생존, 실패/성공과 같은 예측은 시그모이드 함수를 사용해 예측값을 0과 1 사이로 제한해야 합니다.

시그모이드 함수란 로지스틱 회귀 모델에서 사용하는 활성화 함수로 기존 선형함수로 fitting하기 힘든 경우 사용됩니다.

예를 들어 위와 같이 사건 발생 유무의 데이터를 선형 회귀로 fitting할 경우 x값 5를 기준으로 사건 발생 여부가 갈립니다. 그러나 (9,0)이라는 새로운 데이터가 추가될 경우 5를 넘는데 사건이 발생하지 않으니 예측 모델에 문제가 생기게 됩니다.

또 선형 함수이기 때문에 특정 x값에선 사건 발생 확률이 음수가 되기 때문에 이러한 문제를 해결하기 위해 시그모이드 함수를 사용합니다.

 

시그모이드 함수

로지스틱 회귀는 종속변수로 1이 나올 확률 Μ, 0이 나올 확률 1- Μ 의 비율인 승산비(odds ratio)를 구해주어야 하는데, 이 확률값은 계수들에 대해 비선형이므로 선형으로 변환하기 위해 자연로그를 취해줍니다.

(이 과정을 logit transformation 이라고 합니다.)

최종 목적인 확률을 구해주기 위해 M(또는 p)에 대해 정리해주면

로지스틱 회귀 함수가 도출됩니다.

logit transformation을 통해 도출
x가 2개 이상인 경우

선형 회귀에서 B1의 해석이 입력값이 1단위 증가할 때 출력값의 변화량이라면

로지스틱 회귀에선 log(odds)의 변화량을 의미합니다.

선형회귀분석과 동일한 레벨의 직관성을 띄지는 않지만 이전의 로지스틱 함수에 비해서는 직관적이므로 유용하게 활용이 가능합니다.

위와 같이 xj가 1단위 증가하면 exp(Bj) 만큼 변화합니다.

로지스틱 회귀 알고리즘은 Training data 특성과 분포를 나타내는 최적의 직선을 찾고(linear regression) 그 직선을 기준으로 데이터를 분류해주는 알고리즘이라고 할 수 있습니다.

선형 결합이란 회귀 계수들이 A*x=Y의 꼴로 표현될 수 있는 것을 말하는데, 로지스틱 회귀모델의 경우 비선형함수인 시그모이드 함수를 사용하기 때문에 회귀계수인 가중치들이 선형결합을 이루고 있지 않습니다. (종속변수 Y가 시그모이드 함수에 의해 논리적으로 1 또는 0의 값을 가자기 때문에, 연속값을 갖는 선형회귀 때와는 다른 손실함수가 필요합니다.)

 

또한 손실함수란 알고리즘이 얼마나 잘못하고 있는지 평가하는 지표로, 선형회귀에서는 주로 경사하강법을 이용해 MSE로 평가합니다.

그러나 로지스틱 회귀의 회귀계수는 선형결합을 이루고 있지 않고, 비볼록함수이며 최소지점이 여러개 있을 수 있기 때문에 경사하강법을 적용할 경우 local minimum을 global minimum으로 착각하는 문제가 발생할 수 있습니다.

그렇게 되면 알고리즘의 예측 성능이 떨어지기 때문에 로지스틱 회귀분석은 cross entopy 개념을 사용합니다.

 

엔트로피 불확실성에 대한 척도로, 이 값이 높으면 정보가 많고 확률이 낮다는 것을 의미합니다. (어떤 데이터가 나올지 예측이 어려운 경우 높아집니다.)

엔트로피 구하는 공식

모델링을 통해 실제 모형인 q를 예측하는 p 분포를 만들었을 때, cross entopy는 아래와 같이 정의됩니다. cross entropy는 실제값과 예측값의 차이를 계산하는데 이용됩니다.

cross entropy 공식
유도 과정

1. 입력값 x에 대해 출력값이 1일 확률을 y로 정의하면 y는 1 또는 0 이므로 y=sigmoid(Wx+b)로 나타낼 수 있습니다.

2. 입력 x에 대해 출력값이 0 일 확률은 1-y 입니다.

3. 확률 변수 C는 0 또는 1 밖에 값을 가질 수 없으므로 t = 1 또는 0 입니다.

4. 가중치 W와 편향 b를 최우추정하기 위해 우도함수를 활용하며 이 우도 함수 값이 최대가 되도록 W와 b를 업데이트 해나가면 머신러닝에서 학습이 잘되었음을 의미합니다. (우도함수란 입력 x에 대해 정답 t가 발생될 확률을 나타낸 함수이고, 확률은 독립적이므로 각 입력 데이터의 발생 확률을 곱해서 우도함수를 나타내게 됩니다.)

5. 함수가 최대값이 되는 것을 알기 위해서는 W와 b에 대해 편미분을 해야하는데, 곱하기는 미분이 불편하므로 양변에 로그를 취해 덧셈 형태로 바꾼 후 함수의 부호를 바꿔주면 함수의 최대화 문제는 최소화 문제로 바꿀 수 있습니다.

최적의 가중치인 W와 편향 b를 계산하는 프로세스는 위와 같이 진행됩니다.

훈련 데이터를 입력 후 학습을 시켜서 손실함수를 계산하고,

그 손실 함수의 값이 최소값이라면 학습을 종료하고,

아니라면 W와 b를 업데이트 한 후 입력과정부터 반복합니다.

이중분류란 class의 개수가 2개인 경우를 말하는데, 대표적 예시로 동전 뒤집기가 있습니다. 이 경우 시그모이드 함수를 이용해주는데, 만약 class의 개수가 3개 이상이라면 다중분류라고 정의하며 시그모이드 함수를 활용할 수 없습니다.

예시로는 주사위의 눈 맞추기가 있으며 이 경우는 소프트맥스 함수를 사용합니다.

 

로지스틱 회귀모델은 여러개의 이진분류기를 훈련시켜 연결하지 않고 직접 다중 클래스를 지원할 수 있도록 하는데, 이를 소프트맥스 회귀 또는 다항 로지스틱 회귀라고 합니다. 소프트맥스 회귀 분류기는 한 번에 하나의 클래스만 예측하기 때문에

상호 배타적인 클래스에서만 사용해야 합니다.

(하나의 사진에서 여러 사람의 얼굴을 분류해내는데에는 사용할 수 없습니다.)

 

소프트맥스 함수 공식

샘플 X가 주어지면 각 클래스 k에 대한 점수 sk(X)를 계산합니다.

소프트맥스 함수 공식

이후 샘플 X에 대해 각 클래스들의 점수가 계산되면 소프트맥스 함수를 통과시켜 클래스 k에 속할 확률 phatk를 추정합니다. (총합이 1입니다.)

마지막으로 추정 확률이 최대인 k값을 반환합니다.

 

iris data를 이용한 다중 클래스 분류 모델을 만드는 예시입니다.

iris data는 4개의 독립변수를 가지는데 이는 모델이 4차원 벡터를 입력으로 받음을 의미합니다. 그러나 출력 클래스의 개수는 3개이므로 4차원 벡터는 3차원으로 변환되어야 합니다.

소프트맥스 함수의 입력 벡터 z의 차원수만큼 결과값이 나오도록 가중치 곱을 진행합니다. 그림에서 화살표는 (4*3 = 12) 12개이며, 전부 다른 가중치를 가지고, 학습 과정에서 오차를 최소화하는 가중치로 업데이트 됩니다.

소프트맥스 함수의 출력은 분류하고자 하는 클래스의 개수만큼 차원을 가지는

벡터이고 각 원소는 0과 1 사이의 값을 지니며 특정 클래스가 정답일 확률을

나타냅니다.

데이터의 실제값이 setosa라면, setosa의 원-핫 벡터는 [0,1,0]이다 이 경우, 예측값과 실제값의 오차가 0이 되는 경우는 소프트맥스 함수의 결과 [0 1 0]이 되는 것입니다. 이 두 벡터 [0.26 0.70 0.04] [0 1 0]의 오차를 계산하기 위해서

소프트맥스 회귀는 손실함수로 cross entropy 함수를 사용합니다.

규제의 경우 기본적으로 선형회귀와 동일한 방식을 적용하는데, 기본값으로는 L2 규제를 사용합니다. 그러나 alpha 대신 C를 사용한다는 차이점이 있습니다.

Alpha가 커지면 C가 작아지며 규제가 강화되고,

Alpha가 작아지면 C가 커지며 규제가 감소합니다.

 

정확도는 가장 일반적으로 알려진 평가지표로, 전체 데이터 중 옳게 예측한 것의 비율을 뜻합니다. 그러나 불균형 데이터에 대해서 한계가 존재하기 때문에 정밀도 재현율을 활용합니다.

이때 실제 클래스와 예측 클래스에 따라 4개의 유형으로 구분한 오차 행렬을 활용하는데, 어떤 유형의 오류가 발생하는지 쉽게 알 수 있습니다.

예측값에 따라 Positive/Negative, 일치 여부에 따라 True/False

 

 

정확도
 

정밀도는 Positive로 예측한 것 중 실제 Positive의 비율이고, 재현율은 실제 Positive 중 Positive로 예측한 것의 비율을 의미합니다.

 

False Positive가 많아질수록 정밀도의 분모가 커지고 False Negative가 많아질수록 재현율의 분모가 커지므로 경우에 따라 이를 적절하게 활용해주어야 합니다.

예를 들어 스팸 메일의 경우 일반 메일(Negative)을 스팸(Positive)으로 분류하는 것이 더 큰 사고이므로 정밀도가 더 중요시 되고

암진단을 할 때 암 환자(Positive)를 음성(Negative)으로 분류하는 경우가 더 큰 사고이므로 이 경우 재현율이 강조됩니다.

정밀도와 재현율은 트레이드 오프 관계로 하나가 높아지면 하나가 낮아지게 되는데, 분류 임계값을 조정하면서 수치를 높이거나 낮출 수 있습니다.

임계값을 조정하면서 어디까지 Positive로 분류할지 결정할 수 있는데, 임계값이 높아지면 Positive로 인정해주는 정도가 커지며 정밀도가 상승하고

임계값이 낮아지면 Positive로 인정해주는 정도가 낮아지며 재현율이 상승합니다.

F1 Score는 정밀도와 재현율의 조화평균을 의미하는데, 둘이 균형을 이루어야 높은 값을 가집니다.

ROC Curve는 다양한 임계값에서 모델의 분류 성능에 대한 측정 그래프입니다.

x축은 FPR (1- 특이도), y축은 TPR(민감도)로 그려지는데 여기서 FPR은 False Positive Rate, 즉 negative 중 positive로 예측한 확률, TPR은 True Positive Rate로 positive 중 positive으로 예측한 확률을 의미합니다.

AUC ROC Curve 아래의 면적을 의미하는데 최대값인 1에 가까워질수록, 즉 그래프가 많이 휘어있을수록 모델이 클래스를 분류하는 성능이 뛰어남을 의미합니다.

AUC의 최솟값은 0.5이고, 이 경우 모델은 분류모델의 성능이 최악이며 랜덤 이진 모델입니다.

ROC Curve 와 AUC
임계값에 따른 TPR과 FPR

 


이상으로 9기 6주차 정규세션을 복습해보았습니다!

다음 시간에는 확률적 경사하강법에 대해 공부할 예정입니다🥰

 

 

안녕하세요! 기획부 이소희입니다 :)

 

이번 세션에서는 회귀 알고리즘 개념 복습 및 관련 실습에 대해 학습했습니다.

 

 


 

KNN Regression은 K개의 다변량 이웃 샘플로부터 연속변수를 예측하기 위해 사용됩니다.

관측치 사이의 최단 직선 거리를 의미하는 유클리드 거리,

각 좌표축 방향으로만 이동할 경우에 계산되는 맨해튼 거리,

두 개의 이진 데이터 문자열을 비교하기 위한 지표인 해밍 거리 거리함수로 존재합니다.

또한 회귀 모델의 평가 지표로 결정계수, MSE, RMSE, MAE, MAPE, MPE 등이 있습니다.

회귀 모형은 두 개 이상의 변수 사이에 유의미한 관계가 존재하는지 여부 확인 및 구체적인 정보를 제공하며 회귀 분석을 사용하면 여러 척도로 측정된 변수의 효과를 검정할 수 있습니다.

 

회귀 모형의 구조는 모회귀 모형과 표본회귀 모형으로 이루어져 있는데,

이중 모회귀 모형은 X의 고정값이 주어진 상황에서 X의 기댓값을 산출합니다.

표본 회귀선은 추출된 표본마다 각각 하나씩 산출되며, 표본 회귀선과

예측값과의 실제 관측치와 차이인 잔차를 이용해 표본 회귀모형을

생성할 수 있습니다.

 

선형 회귀란 독립변수 X에 대응하는 종속변수 Y의 값과 가장 유사한 값을

가지는 함수 F(x)를 찾는 과정으로 오차의 평균을 최소화하는 최적의 기울기와 절편을 찾는 것이 목표입니다.

이때 파라미터를 임의로 정한 뒤 조금씩 변화시키며 손실을 줄여서 최적의 파라미터를 찾는 경사하강법을 이용합니다.

이때 학습률이 가장 중요한데, 학습률이 너무 낮으면 이동거리가 점점 짧아지므로 학습해야하는 데이터의 양이 늘어나 학습 시간이 길어지게 됩니다. 학습률이 너무 높다면 한번에 너무 크게 이동하므로 전역 최소값이 있는 영역을 건너뛰고 지역 최소값에 수렴할 수 있습니다.

 

독립 변수의 개수가 많아지는 다중회귀분석은 회귀 계수를 추정하는 방법이 최소자승법(Least Square Method)과 최대우도법(Maximum Likelihood Estimation)두가지가 있는데, 최소자승법은 회귀직선과 Y 관측치 간의 편차를 최소화하는 방법이고, 최대우도법은 모수적인 데이터 밀더 추정 방법으로 가능도 함수의 최댓값을 찾는 방법입니다.

 

예를 들어 주황색 점으로 이루어진 데이터는 (추출된 분포가 정규분포이고, 분포의 특성 중 평균을 추정하려고 할 때) 파란색 후보 분포보다 주황색 후보 분포를 따를 가능성이 더 높습니다.

이를 알기 위해서는 liklihood 기여도를 계산해볼 수 있는데,

여기서 점선으로 표시된 각 데이터 샘플에서 후보 분포에 대한 높이를 계산해 모두 곱한 것을 의미합니다.

그렇게 해서 계산된 가능도를 모든 후보군에 대해 계산해보고 비교하면 지금 얻은 데이터를 가장 잘 설명할 수 있는 분포를 얻게 됩니다.

다중 회귀 분석은 선형성, 독립성, 정규분포성, 등분산성, 다중공선성 없음을 전제로 합니다.

등분산성 가정을 위반할 경우 표준화된 잔차의 분포에 유의미한 패턴이 존재한다는 뜻이므로 종속변수의 로그를 변환해 최종 모형을 주정해야합니다.

 

회귀식에 사용할 독립 변수를 고르는 기준 상관계수 행렬을 보고 상관관계가 적은 변수를 고르거나, 상관 관계가 높은 변수를 삭제하는 차원축소 방법 등이 있습니다. 이를 위한 전략에는 전진선택법, 후진소거법, 단계적 방법이 있습니다.

 

다중공선성 없음의 전제를 위반하는 경우는 변수 간 상관관계가 높다는 것을 의미하는데, 이때 회귀계수가 매우 크게 나타나 불안정해질 수 있고, 회귀 계수의 변동성이 커지면 통계량과 모수가 반대부호를 가질 수 있습니다.

이를 해결하기 위해 두가지 방법을 사용할 수 있는데, 특정변수만 포함하는 모델을 선택해서 차원을 축소하는 변수 선택법과 변수는 모두 사용하되 계수의 변동을 줄이는 OLS 추정치의 대안이 있습니다.

 

회귀분석은 모든 변수가 연속형 변수일때만 가능하기 때문에 범주형 변수가 존재하는 경우에는 0 또는 1의 값만을 가지는 더미변수로 변환해주어야 합니다.

전진선택법은 위와 같이 AIC를 계산해서 감소하던 AIC가 증가하기 전의 모델을 선택하기까지 변수를 추가해가며 성능 지표를 비교하는 방법입니다.

이때 절편만 있는 상수모형에서 시작해서 중요하다고 생각되는

설명변수부터 차례로 모형에 추가해줍니다.

이해가 쉽고 변수의 개수가 많은 경우에도 사용이 가능하나 변수값의 작은 변동에도 그 결과가 크게 달라져 안정성이 부족하다는 단점이 있습니다.

 

이때 쓰이는 AIC란 모델의 성능 지표로서 MSE에 변수 수만큼 패널티를 주는 지표입니다. 주로 회귀분석에서 model selection시 사용되며 다음과 같이 구합니다.

후진 소거법은 AIC가 증가하기 전 단계에서 모델을 선택하며 그 전까지

변수를 제거해나가면서 성능 지표를 비교하는 방법입니다. 이때 독립변수를 모두 포함한 모형에서 출발해 가장 적은 영향을 주는 변수부터 차례로

제거해줍니다. 전체 변수들의 정보를 이용한다는 장점이 있으나 변수의

개수가 많은 경우 사용이 어렵습니다.

 

단계적 방법이란 전진선택법과 후진소거법을 모두 이용해주는 방식으로,

일단 변수 입력/제거를 위해 임계치인 p value를 정해주고 전진선택법을

통해 변수를 선택해줍니다. 이때 새로운 변수가 추가되며 이전에 있던 변수 중 중요도가 떨어지는 변수가 있을 수 있으니 다시 중요도를 계산

후진소거법으로 유의미한 변수를 제외하고 삭제해줍니다. 변수가

추가되거나 삭제될 케이스가 없는 경우 종료되며, 일반적으로 가장 널리

쓰이는 방법입니다.

릿지 회귀는 불가피하게 독립 변수들 사이 높은 상관관계가 있는 경우의

접근방식으로 정규화 또는 규제화 기법입니다. 모델의 복잡성을 줄여주기 위해 사용하며 bias(릿지 회귀 패널티로 알려져 있습니다.)를 사용하여 모델이 과대 적합에 덜 취약하게 만들어줍니다. 원점을 기준의 일정 지역에 회귀 계수 벡터가 존재하지 않도록 제한하며 회귀 계수의 추정치들이 0에 가깝도록 억제하므로 분산 축소의 효과가 있습니다.

 

라쏘 회귀의 경우 회귀 계수의 절대 사이즈를 금지함으로써 복잡도를 줄입니다. 릿지와는 다르게 회귀 계수가 0이 될 수 있기 때문에 필요한 요소들만 사용해서 과대적합을 방지합니다.

 

그리고 릿지와 라쏘를 동시에 사용하는 방법이 엘라스틱 넷 방법입니다. Group Selection이 불가능한 라쏘의 단점 극복하는 동시에 라쏘와 같이 변수선택이 가능합니다. Elastic Net은 Group Selection과 Variable Selection을 동시에 추구하는 방법이라고 할 수 있습니다.

 

다중공선성이 높으면 예측값의 신뢰구간이 넓게 형성되는데, 이는 잘못된 변수 해석, 예측 정확도 하락 등을 야기합니다. 이때 주의할 점은 변수 간

다중공선성이 존재하면 상관관계가 높음을 의미하지만 변수 간 상관관계가 높다고 다중공선성이 있는 것은 아니라는 점입니다. 변수의 개수가 적을

경우 변수 간 상관관계는 높지만 다중공선성이 존재하지 않을 수 있습니다.

이런 경우 다중공선성이 존재합니다.

 

다중공선성을 진단하는 방법에는 상관행렬 및 산점도를 확인하는 방법이 있습니다. 상관관계는 -1에서 1까지의 분포를 가지는데 이때 변수 간 상관관계가 0.5를 넘으면 다중공선성을 의심해볼 수 있습니다.

또한 VIF를 통해 알 수 있는데, VIF는 다른 변수의 선형결합으로 특정 변수를 설명할 수 있는 정도를 의미합니다. 이때 VIF가 10을 넘는 경우 다중공선성이 있는 변수라고 판단합니다.

변수간 상관관계를 확인하기 위해 사이킷런의 당뇨병 데이터를 호출한 후에

heatmap을 그려보면 높은 상관관계가 나타나는 진한 색깔 부분을

확인할 수 있습니다.

다중공선성을 확인하기 위해 VIF를 구하는 코드입니다.

VIF가 10을 넘는 변수들의 다중공선성을 해결하기 위해 s1 변수는 drop

해주고 s2와 s3는 합쳐서 new_lipo 라는 새로운 컬럼을 생성해줍니다.

이후 VIF을 다시 확인해보면 다중공선성이 사라짐을 알 수 있습니다.

새롭게 정의한 데이터 new_diabetes를 릿지 모델에 적합하는 코드입니다.

릿지 모델 적합

 

하나의 콘텐츠를 선택했을 때 선택된 콘텐츠와 연관된 추천 콘텐츠가

얼마나 사용자의 관심을 끌고 개인에게맞춘 콘텐츠를 추천했는지는 그

사이트의 평판을 좌우하는 매우 중요한 요소입니다. 추천시스템은 사용자

자신도 몰랐던 취향을 시스템이 발견하고 그에 맞춘 콘텐츠를 추천해주며,

사용자는 해당 사이트를 더 강하게 신뢰하게되어 더 많은 추천 콘텐츠를

선택하게 됩니다.

협업 필터링이란 추천 시스템의 일종으로 많은 사용자로부터 얻은 기호

정보들을 기반으로 사용자들의 관심사를 자동으로 예측해주는 기술

말합니다. 협업 필터링은 다른 유저들의 정보를 이용할 수 있다는 장점이

있으며 최근접 이웃 협업 필터링(KNN) 잠재 요인 협업 필터링 두가지가 있습니다.

최근접 이웃 협업 필터링(KNN)은 가장 유사한 k명의 neighbors를 통해서

예측하는 방법입니다.

이때 유사도는 코사인 유사도를 이용해 측정합니다.

사용자 기반 협업 필터링은 나와 비슷한 성향을 지닌 사용자를 기반으로 그 사람이 구매한 상품을 추천하는 방식이고, 아이템 기반 협업 필터링은 내가 이전에 구매했던 아이템을 기반으로 그 상품과 유사한 다른 상품을

추천하는 방식입니다. 이때 상품 간 유사도는 같이 구매되는 빈도를

분석하여 측정합니다.

 

사용자 기반 / 아이템 기반 협업 필터링

 

 

 

 

속성2개 / 3개의 svm 결정 경계

만약 데이터에 2개의 속성만이 있다면 결정경계는 위과 같이 직선으로

나타나고, 만약 속성이 3개로 늘어난다면 결정경계는 위과 같이 평면으로 나타나게 됩니다.

SVM이란 (서포트 벡터 머신) 분류를 위한 기준선, 즉 결정경계를 정의하는 모델로, 여백(margin)을 최대화 하는 초평면을 찾는 지도 학습 알고리즘을 의미합니다. 이때 여백이란 아래 그림에서 그려진 실선 (결정 경계)에서부터 점선까지의 거리이고, 주어진 데이터가 오류를 발생시키지 않고 움직일 수 있는 최대 거리를 의미합니다.

 

여백의 개념은 문제에 따라 달라지는데, 분류 문제에서는 결정경계와 가장 가까운 데이터(서포트 샘플)를 기준으로 수직 거리, 회귀 문제에서는

ε 범위, 즉 양쪽 점선 사이 거리로 정의됩니다. 두 경우 모두 데이터가

여백을 넘어가면 오류가 발생할 가능성이 높아집니다.

데이터 안에서 결정 경계를 정의한 후 폭이 넓은 여백을 정하고자 하면

분류 문제, 여백 안 가능한 많은 샘플이 들어가도록 학습한다면 회귀 문제로 정의됩니다. SVM은 선형이나 비선형분류, 회귀, 이상치 탐색 등 다양하게 사용 가능합니다.

선형 SVM 분류에서 하드 마진이란 초평면을 기준으로 오류를 허용하지 않고 완벽하게 분류하는 것을 의미합니다. 그러나 이는 데이터들이 완벽하게 선형함수로 분리될때만 사용 가능하므로 margin을 최대화하다 어느정도의 오류를 허용해주는 소프트 마진을 사용하는 경우가 일반적입니다.

선형 SVM 회귀에서 하드 마진이란 데이터가 모두 ε 범위 안에 포함되도록 만들고, 어느 정도 오차를 허용해주는 것을 소프트 마진이라고 합니다.

비선형 데이터의 경우 소프트 마진이나 커널 기법을 사용합니다.

커널 기법은 데이터를 특정 다른 공간에 옮긴 후 선형회귀분석을 적용하는 형태이며 데이터를 저차원에서 고차원으로 보내버리는 함수를 커널 함수라고 합니다.

커널 기법을 이용하면 SVM에서 선형 라인으로 잘라서 데이터를 구분할 수 있습니다.

대표적인 커널 함수에는 곡선형태의 결정경계와 이미지 처리에 자주

사용되는 polynomial, 원형 형태를 포함한 다양한 형태가 섞인 복잡한

결정경계학습인 RBF, 그리고 sigmoid 가 있습니다.

위의 그래프에서 왼쪽 그래프는 규제가 거의 없고 오른쪽 그래프는 규제가 많습니다. (C는 규제 강도를 조절하는 하이퍼 파라미터)

이렇게 비선형 회귀 작업을 처리하기 위해서는 커널 SVM을 사용합니다.

다항 선형 회귀와 SVM 회귀 비교

SVR은 완화 변수가 없다면 LR보다 이상치에 민감하게 반응하지만 안쪽 데이터 포인트에는 덜 민감하며

계산 효율성이 더 좋습니다.

 

위에서 정의했던 new_diabetes를 SVR에 적용해봅시다.

train/test 분류

이때 하이퍼 파라미터의 종류에는 제약조건의 강도인 C, kernel의 종류("linear", "poly", "rbf", "sigmoid"), polynomial kernal에 대해 차수를 지정하는 degree (default =3), 가중치 부여 방법인 gamma("scale","auto"), 오차 허용 범위인 epsilon 등이 있습니다.

warning 없애는 코드

만약 사이킷 런의 모든 회귀 모델과 가장 표준화하기 좋은 scale까지 알고 싶다면 다음 코드를 사용해서 불러와줍니다.

모든 회귀 모델 불러오기

가장 좋은 scale 알아보기

 


 

이상으로 9기 5주차 정규세션을 복습해보았습니다!

다음 시간에는 로지스틱 회귀에 대해 공부할 예정입니다🥰

 

 

 

 

이번 세션에서는 '특성 공학과 규제'에 대해서 학습했습니다!

 


종속 변수를 설명하는 독립 변수가 2개일 때 단순회귀모형을 활용하게 되면 모형 설정이 부정확하고, 종속 변수에 대한 중요한 설명변수가 누락될 수 있는 위험이 있습니다. 즉, 계수추정량에 대해 bias가 발생하게 됩니다.

 

편향이 높다는 것은 한쪽으로 데이터가 많이 치우쳐 있다는 것이고, 모델이 너무 간단할 때 발생합니다. 그러므로 독립 변수를 추가하여 다중 선형 회귀 분석을 사용하면 제거가 가능해집니다.

 

분산이 높다는 것은 데이터가 골고루 퍼져있다는 것을 의미하는데, 편향과는 트레이드오프 관계를 갖고 있습니다. 편향이 낮고 분산이 작으면 가장 이상적이지만 현실적으로 불가능하므로 둘 다 고려하여 최적의 복잡도를 찾아서 모델에 적용해야 합니다.

 

다중 선형 회귀란 2개 이상의 설명 변수로 종속 변수를 추정하는 회귀분석으로, 여러 원인 x를 사용하여 하나의 결과 y를 설명하는 방식입니다.

ex) 회사 생활 만족도(Y)에 인간관계(X1), 출퇴근 거리(X2), 연봉(X3)이 미치는 영향

 

다중 선형 회귀 분석을 할때는 5개의 가정이 필요한데,

종속 변수와 독립변수 사이에는 선형 관계가 존재한다는 선형성,

독립 변수는 서로 linearly independent 하다는 독립성,

residual이 정규 분포를 따른다는 정규분포성,

분석하는 집단의 분석이 같다는 등분산성,

독립 변수 간에 존재하는 상관관계가 없다는 다중공선성 없음이 있습니다.

 

여기서 다중 선형 회귀 분석에서만 가정되는 다중공선성 없음은 독립 변수가 서로 영향을 끼치지 않음을 의미하며 다중공선성이 높으면 회귀 계수의 표준 오차가 비정상적으로 커지게 되어 추정치의 정확도가 낮아지게 됩니다.

VIF를 구했을 때 10 이상인 경우 다중공선성이 높다고 판단하며, Scatter Plot을 이용해서도 확인이 가능합니다.

PCA를 적용해 독립 변수를 줄이거나 데이터를 많이 수집하거나, 다중공선성을 발생시키는 변수를 제거하며 해결할 수 있습니다. (이때 변수 선택법을 활용합니다.)

 

다항 회귀 분석이란 1개의 독립 변수로 여러 개의 변수를 회귀 모델에 투여하는 방식으로, 단순 회귀 분석과 동일하게 하나의 독립 변수만을 이용하지만 n차 다항식을 모델링을 한다는 차이점이 있습니다.

다중 회귀 분석은 이와 다르게 여러 개의 독립 변수로 하나의 종속 변수를 예측하는 방식으로 고차원의 선형 회귀 모델입니다.

 

특성 공학에 대해 알아보겠습니다. 특성 공학이란 모델의 정확도를 높이기 위해서 주어진 데이터를 예측 모델의 문제를 잘 표현할 수 있는 features로 변형시키는 과정을 의미합니다.

 

간단히 말해 머신러닝 알고리즘을 작동하기 위해 데이터의 도메인 지식을 활용해 feature를 만드는 과정이라 할 수 있습니다.

 

Python에서는 PolynomialFeatures()에 feature를 추가해 모델을 만들 수 있습니다.

 

규제란 모델이 지나치게 복잡하여 주어진 데이터가 아닌 새로운 데이터에 대해서 정확한 예측을 하지 못하는 과적합 현상을 해결하기 위해 사용하며, 모델의 각 변수의 가중치에 제약 조건을 추가하여 계수의 크기를 제한하는 방식으로 사용됩니다.

training accuracy를 낮춤으로써 perfect fit을 포기하고 testing accuracy를 높여 potential fit을 증가시키는 것을 목표로 합니다.

 

보통 선형회귀 모델에서는 모델의 가중치를 제한함으로써 규제를 가하는데, 가중치가 낮은 항은 정규화 방법에 따라 0으로 수렴하여 사용하지 않게되거나 0에 가까운 수가 되어 모델에 미치는 영향이 덜해지게 됩니다.

 

그 중 릿지 회귀 L2 norm을 사용한 회귀 방법으로, 거의 영향을 미치지 않는 특성에 대하여 거의 0에 가까운 가중치를 주게 됩니다. 미분 가능하며 제약에 따라 계수들이 작아지기 때문에 모델의 변동이 크지 않다는 특징이 있습니다.

알파값은 사용자가 지정하는 매개 변수로, 규제의 강도를 조절합니다. 알파값이 커지면 계수를 0에 가깝게 만들어 규제의 효과가 커져서 성능은 낮아지지만 일반화 하기는 쉬워집니다. 알파값이 작아지면 계수에 대한 제약이 풀리면서 LinearRegression으로 만들 모델과 거의 같아지며 규제의 효과가 작아지고 과적합되는 것을 볼 수 있습니다.

 

릿지 회귀는 예측의 측면에서는 문제가 되지 않지만, 패널티 변수들이 0의 값을 가지지는 못하기 때문에 회귀 모형에서 남아있게 되어 해석의 측면에서 약점을 갖게 됩니다.

라쏘 회귀 릿지 회귀처럼 비용함수에 규제항을 더하지만 L1 norm을 사용한다는 차이가 있습니다. L2 규제를 적용한 릿지 회귀처럼 회귀 계수를 감소시키는 방법이 아닌 불필요한 회귀 계수를 0으로 만들어 제거하기 때문에 변수 선택이 가능하다는 점이 특징입니다.

미분 불가능하며 높은 다중공선성을 보이는 데이터에 낮은 성능을 보인다는 특징이 있습니다.

또한 모든 데이터 셋을 훈련과 평가에 활용할 수 있지만 반복횟수가 많기 때문에 시간이 오래 걸린다는 특징이 있습니다.

앞서 살펴본 라쏘 회귀의 경우 L1 규제를 이용해 중요 피처를 선택하고 그 외의 피처들은 회귀 계수를 0으로 만들어 회귀 식에서 제외하기 때문에 alhpa 값에 따라 회귀 계수의 변동이 심할 수 있다는 단점이 존재합니다.

엘라스틱넷 회귀는 이를 보완해 L1 규제와 L2 규제를 결합한 회귀를 의미합니다. 두 회귀의 장점을 모두 갖고 있기 때문에 회귀 계수를 0으로 추정할 수 있으며 상관이 높은 예측 변수들이 모두 선택되도록 할 수 있습니다.

 

K-최근접 이웃 알고리즘은 주변의 가장 가까운 K개의 데이터를 보고 새로운 데이터를 판단하는 알고리즘을 말한다.

N개의 특성(feature)을 가진 데이터는 n차원의 공간에 점으로 표현되는데, 유사한 데이터끼리는 거리가 가깝다.

이때, 다양한 거리함수를 통해 데이터 간의 거리를 구할 수 있다.

이 알고리즘은 모델의 효과를 높이기 위해 파라미터인 K를 조정한다.

 

K-최근접 이웃 알고리즘은 KNN 분류와 KNN 회귀에 모두 적용 가능한데, KNN 회귀에는 다음과 같이 적용된다.

 

1. 다양한 거리 함수를 이용해 가까운 k개의 이웃을 찾는다. (유클리드 거리, 맨해튼 거리, 해밍 거리 등)

2. 이웃 샘플의 타깃값을 평균하여 예측하고자 하는 데이터의 예측값으로 사용한다.

3. 다양한 회귀 모델의 평가지표를 이용해 모델의 성능을 측정한다. (결정계수 R^2, MSE, RMSE, MAE, MAPE, MPE 등)

4. 훈련 세트, 테스트 세트에 대한 평가 점수를 통해 과대적합/과소적합/적정 을 판단한다.

* 훈련세트 점수 < 테스트 세트 점수이면 과소적합

훈련세트 점수 > 테스트 세트 점수이면 과대적합이다.

 

이 알고리즘은 학습 데이터의 노이즈에 크게 영향을 받지 않고, 훈련 단계가 빠르며 이상치의 영향을 덜 받아서 데이터의 분산까지 고려하면 상당히 로버스트하다는 장점이 있다. 그러나 모델을 생성하지 않아서 특징과 클래스 간 관계를 이해하는데 제한적이며 최적 이웃의 수와 사용할 거리 척도를 데이터 각각의 특성에 맞게 연구자가 임의로 설정해야한다는 단점이 있다. (*주로 최적 이웃 수는 홀수이다)

거리함수의 종류에는 유클리드 거리함수, 맨해튼 거리함수, 해밍 거리함수가 있다.

이중 유클리드 거리함수는 

각 차원의 차를 제곱해서 모두 더한 값의 제곱근으로, 2차원에서는 피타고라스 정리와 같다.

이때, k값을 정해야 하기 때문에 x와 y 벡터를 정규화 후 거리함수를 계산해준다.

 

맨해튼 거리함수는 

다음과 같이 각 차원의 차의 절댓값을 바로 합산해준다.

 

해밍 거리함수는 각 차원마다 차이를 찾는게 아닌 '정확히 같은지'의 여부만 고려하기 때문에 주로 두개의 이진 데이터

문자열을 비교하기 위한 지표로 사용된다. (*비트 하나가 다를 때마다 해밍거리가 증가한다)

 

 

최적의 k값은 데이터에 의존적이며 다양한 발견적 기법으로 선택된다. -> Trial & Error (python 반복문 사용)

에러율이 가장 작은 k를 선택하게 되는데, K가 너무 작으면 과대적합되어 데이터의 지역적 특성을 지나치게 반영하게 되고, K가 너무 크면 과소적합되어 모델이 과하게 정규화된다.

종속 변수가 연속형인 경우 거리가 가까운 관측치들에게 가중치(weight)를 부과해 가중평균으로 구하는 것을 의미하며 Inverse distance weighted average가 고려 가능하다.

종속 변수가 범주형일 경우 Tie 문제를 막기 위해 k는 홀수가 권장된다.

비용함수라고도 불리는 회귀 모델의 평가 지표는 원래의 값과 가장 오차가 작은 가설함수 를 도출하기 위해 사용되는 함수이다. 

가장 흔히 쓰이는 결정계수 R^2은 통계학 회귀 분석에서 자주 쓰이며 모델이 데이터를

얼마나 잘 예측하는지에 대한 지표이다.

평균으로 예측했을 때보다 모델을 사용했을 때

얼마나 더 좋은 성능을 내는지에 대한 비율로 나타낸 값을 의미한다.

실제 값계의 분산 대비 예측값의 분산 비율

 

 

 

오차 제곱 평균인 MSE (Mean Squared Error)는 예측값과 실제값의 차이에 대한 제곱에 대하여 평균을 낸 값으로,

가장 많이 사용되며 이상치에 민감하다. 오차가 작으면 작을수록 좋지만 과대적합이 될 수 있다.

0~무한대의 값을 가진다.

평균 제곱근 오차인 RMSE(Root Mean Squared Error)는 MSE에 루트를 씌운 값으로, 

MSE의 장단점을 거의 따라가지만 제곱오차에 대한 왜곡을 줄여주며 로버스트하다는 장점이 있다.

오류 지표를 루트를 통해 실제값과 유사한 다위로 변환하기 때문에 해석이 쉬우나 실생활에서 쓰는 계산법을 벗어났다고 할 수 있다. 그럼에도 큰 오류값 차이에 대한 큰 패널티를 주는 이점이 있어 많이 쓰인다.

분모가 작아져서 총 결과는&nbsp; MSE보다 크다.
파이썬

평균 절대 오차인 MAE(Mean Absolute Error)는 절댓값을 취하기 때문에 가작 직관적으로 알 수 있는 지표이다.

MSE보다 특이치에 robust하다.(*제곱하지 않기 때문에 이상치에 덜 민감)

그러나 절댓값을 취하기 때문에 모델이 실제보다 실제보다 높은 값으로 예측되었는지(overperformance), 

낮은 값으로 예측되었는지(underperformance) 알 수 없다.

평균 절대비 오차인 MAPE(Mean Absolute Percentage Error)는 MAE와 마찬가지로 MSE보다 특이치에 robust하며

MAE와 같은 단점을 가진다. 퍼센트 값을 가지며 0에 가까울수록 회귀 모형의 성능이 좋다고 해석할 수 있으며, 

모델에 대한 편향이 존재한다.

0~100% 사이의 값을 가져 성능 비교 해석이 가능하다.
파이썬

 

MPE(Mean Percentage Error)는 MAPE에서 절댓값을 제외한 지표로, 과소평가인지 과대평가인지 알 수 있어서 편리하다.

MAE, MSE와 같은 절대오차 측정이 아닌 MAPE, MPE와 같은 상대오차 측정이다.

sklearn에 없어서 직접 정의

 

 

 

<KNN 회귀 구현>

클래스 구조

 

 

n이 커질수록 모델이 단순해진다.

*과대적합이란 모델이 훈련 세트에서는 좋은 성능을 내지만 검증 세트에서는 낮은 성능을 내는 경우를 말하며, 

분산이 크다. -> 훈련 세트에 충분히 다양한 샘플이 포함되지 않아서 일어난다.

훈련 세트에 다양한 샘플을 포함시키거나, 훈련 샘플을 더 모을 수 없는 경우 모델이 훈련 세트에 집착하지 않게

가중치를 제한해 모델의 복잡도를 낮추거나, outlier나 error를 제거해 잡음을 줄여서 해결할 수 있다.

*과소 적합이란 훈련 세트와 검증 세트의 성능에는 차이가 크지 않으나 모두 낮은 성능을 내는 경우를 말하며, 

편향이 크다고 할 수 있다. -> 복잡도가 더 높은, 파라미터가 더 많은 모델을 사용하거나 가중치 규제를 완화해 해결할 수 있다. 

과소적합 해결 예시

 

파란선이 선형회귀 직선

회귀 분석 : 독립변수 x에 대응하는 종속변수 y와 가장 비슷한 값을 가지는 함수 f(x)를 찾는 과정 -> 함수 f(x)를 통해 미래 사건을 예측

선형 회귀 모형 : 회귀 분석을 통해 구한 함수 f(x)가 선형 함수일 때 f(x) = 회귀 직선 

선형 회귀 분석 : 선형 회귀 모형을 사용하는 회귀분석 : 특성과 타깃 사이의 관계를 잘 나타내는 선형 회귀 모형을 찾고 이들의 상관 관계는 가중치/계수(m), 편향(b)에 저장된다.

yhat = W*x + b (W = 가중치, b = 편향)

비용함수(= 손실 함수) : 선형 모델의 예측과 훈련 데이터 사이의 거리를 재는 함수 -> 비용 함수의 결과값이 작을수록 선형 모델의 예측이 정확함을 나타낸다. 

*선형 회귀는 선형 모델이라는 가설을 세워 데이터를 선형 모델 위에 있다고 가정하는 방식이므로
실제 데이터(훈련 데이터)와 선형 모델의 예측 사이의 차이가 존재한다.

&there4; 실제 데이터와 선형 모델의 예측 사이의 차이를 평가하는 함수는 비용 함수를 사용하여 정확도를 계산한다

산점도로 선형회귀가 잘 이루어졌는지 확인해볼 수 있는데, 

위의 경우 과소 적합되었으므로 다항회귀를 사용하여 모델의 복잡도를 높여주면 해결 가능하다.

다항 회귀란 다항식을 사용한 선형 회귀로 비선형성을 띄는 데이터도 선형 모델을 사용하여 최적의 곡선을 찾을 수 있다.

 

<경사하강법>

경사하강법이란 머신러닝, 딥러닝 알고리즘을 학습시킬 때 사용하는 방법으로 비용함수의 기울기를 계속 낮은 쪽으로 이동시켜 극값(최적값)에 이를 때까지 반복하는 것을 말한다.

 

경사하강법을 이용하여 비용함수에서 기울기가 "0"일때 비용값(오차)을 구할 수 있으며 비용함수의 최소값을 구하면

이때 회귀함수를 최적화할 수 있게 된다.

파이썬으로 구현 후 Y = mx + b 함수를 그려보면

실측값, 예측값 산점도를 그리는 함수 생성

여기서 Learning rate학습률로, 선형회귀에서 가중치와 편향을 경사하강법에서 반복학습 시킬 때, 한번 반복학습 시킬 때마다 포인트를 얼만큼씩 이동시킬 것인지 정하는 상수이다. 학습률이 너무 작을 경우 local minimum에 빠질 수 있고, 너무 큰 경우 수렴이 일어나지 않으므로 적당한 학습률을 찾는 것이 중요하다.

파랑 : 실제값, 주황 : 추정값

앞의 파이썬 코드를 실행하면 반복문이 실행되면서 오차가 점점 작아짐을 알 수 있다. 

최종적으로 오차가 줄어들며 실제값을 정확히 추정할 수 있다.

 

실습

Credit.csv 출처

1-1

구글 드라이브에 csv 파일이 저장되어 있어야 한다.
Credit.csv

1.2

필요없는 열을 제거해서 credit_c에 저장해줍니다.

데이터 분포 확인하기

Rating 과 Limit을 변수에 저장 후 데이터의 분포를 확인해줍니다.

 

1.3

독립변수는 rating, 종속변수는 limit이 되도록 하여 train_input, test_input, train_target, test_target을 분리해줍니다.

이때, train_input 와 test_input의 비율은 7:3이고, random_state는 5로 설정해서 random 값을 고정해줍니다.

 

1.4

KNeighborRegressor에 넣어주려면 배열의 크기를 2차원으로 바꿔줘야 하기 때문에 train_input과 test_input을 2차원의 열벡터로 변경해 각각 저장해줍니다.

*이렇게 np.newaxis를 사용해주면 1 역할을 하며 필요한 차원을 채워줍니다.

 

test set의 20%를 validation set으로 따로 분리해서 최적의 n값을 구하는 데 사용해줍니다.

1.5

train_input과 train_target을 활용해 k-최근접 이웃 회귀 모델을 훈련시키고, train set과 test set에 관한 결정계수를 각각 출력해줍니다.

각각의 결정계수

2. 선형회귀

2.1

Credit 전체에서 Rating이 700 미만인 행만 credit_r 변수에 저장해줍니다.

 

2.2

credit_r에서 Balance 와 Rating 변수를 따로 저장해준 후 scatterplot으로 분포를 확인해봅니다.

 

2.3

StandardScaler 매서드를 활용해 balance와 rating을 정규화해준 후 정규화 한 값을 따로 저장해주어야 합니다.

이때 두 변수의 평균과 분산을 각각 출력해보면 0과 1에 매우 가까워졌음을 확인할 수 있습니다.

 

2.4

위에서 저장해준 변수들의 열 이름을 Balance와 Rating으로 지정해준 후 Dataframe에 저장해줍니다.

 

2.5

DBSCAN을 활용해서 입실론이 0.25, min_samples를 5로 설정해준 후 data를 fit_predict 해서 strange 변수에 저장합니다.

이때, -1의 값을 갖는 데이터들은 이상치로 분류됩니다.

이때 DBSCAN에서는 군집화를 하는 기준으로 유클리디안 거리를 활용해 각 데이터별로 거리를 구한 뒤, 설정한 eps 값 이내에 해당하는 데이터끼리 군집화를 합니다. 이때 데이터가 정규화되지 않아서 해당 데이터를 나타내는 지표들의 스케일이 다르다면 데이터 간의 실질적인 거리를 측정하기 어렵기 때문에 정규화 후에 DBSCAN을 활용합니다.

 

2.6

1) credit_r에서 strange가 -1인 행들만 추출해 credit_removed 변수에 저장합니다.
2) credit_removed에서 Balance열과 Rating열을 각각 balance_r과 rating_r변수에 저장합니다.
 
그 후 strange를 제거하기 전후 scatterplot을 비교합니다. 이상치 제거 이후 방향성이 더 뚜렷해진 것을 볼 수 있습니다.
 

2.7

x를 독립변수, y를 종속변수로 두고 훈련세트와 테스트세트로 나눠줍니다. 

train_input와 test_input은 2차원 배열로 바꾸어 저장해줍니다.

 

2.8

선형회귀 모델 lr1을 만들어 train set을 활용해 학습시킨 다음, train set의 스코어는 train_score1에, test set의 스코어는 test_socre1에 저장해서 출력해보면 스코어가 1에 가깝게 나온 것을 확인할 수 있습니다.

2.9

 train_input^2을 첫번째 열로, train_input을 두번째 열로 갖는 2d array인 train_poly를 만들고
 test_input^2을 첫번째 열로, test_input을 두번째 열로 갖는 2d array인 test_poly를 만들어줍니다.

 

2.10

선형회귀모델 l2를 만들어 위에서 만든 train_poly 와 test_poly로 학습시킨 후, score을 출력해주고 scatterplot도 그려줍니다. scrore가 더 높아졌음을 확인할 수 있습니다.

2.11

실제 x값과 y값의 scatterplot을 그린 후 train_input을 활용해 학습한 l1에 np.arrange(0,1,0.01)를 독립변수로 사용하여 도출한 예측값을 종속변수로 하는 plot과 train_poly를 활용해 학습한 l2에 np.arrange(0,1,0.01)를 독립변수로 사용하여 도출한 예측값을 종속변수로 하는 plot을 그려줍니다. (l1이 파란선, l2가 빨간선)
lr1을 사용했을 때의 train/test score 와 lr2를 사용했을 때의 train/test score를 비교해보았을 때 둘다 다항선형회귀를 사용한 것이 더 점수가 높다는 것을 알 수 있습니다.

+ Recent posts