New to Nutbox?

24-3-27 scikit-learn 공부와 chatGPT

1 comment

steem-agora
84
last month3 min read

scikit learn을 공부하고 있다. 모르는 내용들을 하나 하나 찾아가다 보니 진도가 그리 빠르지 못하다
속도보다 방향이 중요한 것이라 믿고 천천히 가고 있다.

GridSearchCV()에 대해서 실습을 했는데 실습 코드는 아래와 같다.

from sklearn.model_selection import GridSearchCV
from sklearn.linear_model import Ridge
import pandas as pd

alpha = [0.001, 0.01, 0.1, 1, 10, 100, 1000]
param_grid = dict(alpha=alpha)

gs = GridSearchCV(estimator=Ridge(), param_grid=param_grid, cv=10)
result = gs.fit(diabetes.data, diabetes.target)

print('최적점수 : {}'.format(result.best_score_))
print('최적 파라미터 : {}'.format(result.best_params_))
print(gs.best_estimator_)
pd.DataFrame(result.cv_results_)

ChatGPT에게 물었더니 아래와 같이 답을 했다

위의 코드는 Python의 scikit-learn 라이브러리를 사용하여 Ridge 회귀 모델을 그리드 탐색을 통해 최적의 하이퍼파라미터를 찾는 예제입니다. 코드를 각 부분별로 설명하겠습니다.

from sklearn.model_selection import GridSearchCV: scikit-learn에서 그리드 탐색을 위한 GridSearchCV 클래스를 임포트합니다.

from sklearn.linear_model import Ridge: Ridge 회귀 모델을 임포트합니다.

import pandas as pd: pandas 라이브러리를 임포트합니다. 이는 그리드 탐색 결과를 보기 좋게 출력하기 위해 사용됩니다.

alpha = [0.001, 0.01, 0.1, 1, 10, 100, 1000]: Ridge 모델의 하이퍼파라미터인 alpha 값의 후보 리스트를 정의합니다.

param_grid = dict(alpha=alpha): 그리드 탐색을 위한 하이퍼파라미터 그리드를 정의합니다. 여기서는 alpha만을 튜닝하므로 alpha 값들로 이루어진 딕셔너리를 만듭니다.

gs = GridSearchCV(estimator=Ridge(), param_grid=param_grid, cv=10): GridSearchCV 객체를 생성합니다. 여기서 estimator는 사용할 모델을 지정하고, param_grid는 탐색할 하이퍼파라미터 그리드를 지정합니다. cv는 교차 검증의 폴드 수를 나타냅니다.

result = gs.fit(diabetes.data, diabetes.target): 그리드 탐색을 수행합니다. diabetes.data는 입력 특성 데이터를 나타내고, diabetes.target은 목표 변수(타겟)를 나타냅니다.

print('최적점수 : {}'.format(result.best_score_)): 그리드 탐색을 통해 얻은 최적의 교차 검증 점수를 출력합니다.

print('최적 파라미터 : {}'.format(result.best_params_)): 그리드 탐색을 통해 얻은 최적의 하이퍼파라미터를 출력합니다.

print(gs.best_estimator_): 최적의 모델을 출력합니다.

pd.DataFrame(result.cv_results_): 그리드 탐색의 결과를 pandas DataFrame으로 변환하여 출력합니다. 이는 교차 검증 결과와 관련된 여러 정보를 표시합니다.

설명에 대해 추가 질문을 했다

alpha는 어떤 의미와 기능을 하는가?

ChatGPT의 답변이다.
Ridge 회귀 모델에서의 alpha는 정규화(Regularization)의 강도를 조절하는 하이퍼파라미터입니다. 정규화는 모델의 복잡도를 제어하고, 과적합(Overfitting)을 방지하며 일반화 성능을 향상시키는 데 사용됩니다.

Ridge 회귀에서는 기본적으로 L2 정규화를 사용합니다. 이는 손실 함수에 추가되는 항으로, 가중치(w)의 크기를 제한하는 역할을 합니다. 따라서 alpha 값이 클수록 정규화의 강도가 강해지며, 가중치의 크기가 작아지게 됩니다. 이로써 모델이 훈련 데이터에 과적합되는 것을 방지할 수 있습니다.

그러나 alpha 값이 너무 크면 모델의 복잡도가 너무 많이 줄어들어서 과소적합(Underfitting)의 가능성이 있습니다. 적절한 alpha 값은 모델의 성능에 맞게 조정되어야 합니다. 그리드 탐색(Grid Search)과 같은 방법을 사용하여 최적의 alpha 값을 찾을 수 있습니다.

추가질문이다.
Ridge는 어떤 모델인가

ChatGPT의 답변이다.
Ridge 회귀는 선형 회귀(Linear Regression)의 한 종류로, 선형 모델의 일종입니다. 선형 회귀는 입력 변수들과 출력 변수 간의 선형 관계를 모델링하는 데 사용됩니다. Ridge 회귀는 이러한 선형 회귀 모델 중 하나이지만, 주요한 차이점은 L2 정규화를 적용한다는 점입니다.

일반적인 선형 회귀에서는 최소화하는 손실 함수는 잔차의 제곱합인 RSS(Residual Sum of Squares)를 최소화하는 것입니다. 하지만 이러한 방식은 데이터에 과적합되기 쉽습니다. Ridge 회귀는 이러한 과적합을 방지하기 위해 손실 함수에 가중치의 제곱합을 추가합니다.

<공식은 잘 옮겨지지 않는다.>

Ridge 회귀는 이러한 정규화를 통해 모델의 복잡도를 줄이고, 과적합을 방지하며, 일반화 성능을 향상시키는 데 사용됩니다.

이렇게 모르거나 추가로 알고 싶은 부분을 물어가면 된다
코드를 모두 외우지 않아도 개념만 이해하고 있으면 chatGPT를 이용해서 충분히 코딩을 할 수 있다.

요즘은 고등학생들 수학과외도 필요없을 것 같다. 인공지능을 이용하면 각자 이해하지 못하는 부분을 정확하게 알려주기 때문이다.

머신러닝에 쓰이는 클래스를 공부하는데 앞으로 시간이 많이 걸릴 것 같다.
그리고 어느정도 파악하고 나면 실습을 할 예정이다.
충분하게 숙달되면 스팀 블록체인에 대한 머신러닝이나 딥러닝도 가능하리라고 생각하고 공부하고 있다.

중요한 것은 중단하지 않고 계속하는 것이라 생각한다.

Posted using SteemPro

Comments

Sort byBest