CSV 파일을 읽어 데이터프레임으로 변환하는 데 사용된다.
데이터프레임의 형식, 행과 열의 개수, 데이터 타입 등의 요약 정보를 텍스트로 보여준다.
number_courses: 수강 과목 수
time_study: 공부 시간
Marks: 성적
데이터프레임의 기초 통계를 출력한다.
st_df.corr(): 데이터프레임 st_df의 열 간의 상관계수를 계산한다.
sns.heatmap(corr, annot=True): 상관계수 행렬 corr을 히트맵으로 시각화한다. annot=True는 각 셀에 상관계수 값을 표시한다.
히트맵은 변수 간의 상관관계를 직관적으로 이해하는 데 유용하다. 색상이 짙을수록 상관관계가 강하다는 것을 의미한다.
number_courses와 time_study 간의 상관계수는 0.2로 약한 양의 상관관계를 나타낸다.
number_courses와 Marks 간의 상관계수는 0.42로 중간 정도의 양의 상관관계를 나타낸다.
time_study와 Marks 간의 상관계수는 0.94로 매우 강한 양의 상관관계를 나타낸다.
subplots 함수는 matplotlib 라이브러리에서 여러 개의 서브플롯을 하나의 그림에 생성하기 위해 사용된다. 이 함수는 다양한 인자를 통해 플롯의 배치와 크기를 조절할 수 있다.
주요 인자
nrows: 서브플롯의 행(row) 수를 지정한다.
ncols: 서브플롯의 열(column) 수를 지정한다.
figsize: 그림의 크기를 (가로, 세로) 인치 단위로 지정한다.
sharex: 모든 서브플롯이 x축을 공유할지 여부를 지정한다. (기본값: False)
sharey: 모든 서브플롯이 y축을 공유할지 여부를 지정한다. (기본값: False)
squeeze: 서브플롯이 하나일 때 축 배열을 1차원 배열로 반환할지 여부를 지정한다. (기본값: True)
서브플롯 생성: plt.subplots(ncols=2, figsize=(12, 6))는 두 개의 열을 가진 서브플롯을 생성한다. figsize=(12, 6)는 전체 그림의 크기를 지정한다.
첫 번째 서브플롯: sns.scatterplot(data=st_df, x='number_courses', y='Marks', ax=ax[0])는 number_courses와 Marks 간의 산점도를 첫 번째 서브플롯(ax[0])에 그린다.
두 번째 서브플롯: sns.scatterplot(data=st_df, x='time_study', y='Marks', ax=ax[1])는 time_study와 Marks 간의 산점도를 두 번째 서브플롯(ax[1])에 그린다.
플롯 표시: plt.show()는 생성된 모든 플롯을 화면에 표시한다.
이 산점도는 두 변수 간의 관계를 시각적으로 이해하는 데 유용하다. 첫 번째 서브플롯에서는 number_courses와 Marks 간의 관계를, 두 번째 서브플롯에서는 time_study와 Marks 간의 관계를 보여준다. 이 경우, time_study와 Marks 간의 관계가 더 강한 양의 상관관계를 나타내는 것을 볼 수 있다.
독립 변수 (X): 예측 모델에 입력으로 사용될 특성들로 구성된 데이터. 각 행은 하나의 샘플을 나타내며, 각 열은 하나의 특성을 나타낸다.
종속 변수 (Y): 예측 모델의 목표 값으로 사용될 데이터. 각 행은 독립 변수에 해당하는 샘플의 성별을 나타낸다.
x = st_df[['number_courses', 'time_study']]:
데이터프레임 st_df에서 number_courses와 time_study 두 개의 열을 선택해 새로운 데이터프레임 x를 만든다.
이 데이터프레임 x는 모델의 독립 변수(특징 변수)로 사용된다.
number_courses: 학생이 수강하는 과목 수.
time_study: 학생이 공부에 투자한 시간.
y = st_df['Marks']:
데이터프레임 st_df에서 Marks 열을 선택해 시리즈 y를 만든다.
이 시리즈 y는 모델의 종속 변수(목표 변수)로 사용된다.
Marks: 학생의 성적.
이 코드는 전체 데이터를 학습 데이터와 테스트 데이터로 분할하여 모델 학습 및 평가에 사용할 수 있도록 한다.
train_test_split 함수를 사용하기 위해 sklearn.model_selection 모듈에서 임포트한다. 이 함수는 데이터를 학습 데이터와 테스트 데이터로 나누는 데 사용된다.
train_test_split(x, y, test_size=0.2, random_state=42): x와 y 데이터를 학습 데이터와 테스트 데이터로 분할한다.
여기서 test_size=0.2은 전체 데이터의 20%를 테스트 데이터로 사용하고, 나머지 80%를 학습 데이터로 사용함을 의미한다.
random_state=42는 데이터 분할 시 무작위성을 제어하기 위해 사용된다. 동일한 random_state 값을 사용하면 항상 같은 방식으로 데이터를 나눌 수 있다.
X_train: 학습 데이터의 독립 변수
X_test: 테스트 데이터의 독립 변수
Y_train: 학습 데이터의 종속 변수
Y_test: 테스트 데이터의 종속 변수
train_test_split 함수는 데이터를 무작위로 섞은 후 지정된 비율에 따라 학습 데이터와 테스트 데이터로 나눈다. 이 과정을 통해 모델의 성능을 보다 정확하게 평가할 수 있다.
학습 데이터(X_train, Y_train)는 모델을 학습시키는 데 사용되며, 테스트 데이터(X_test, Y_test)는 모델의 성능을 검증하는 데 사용된다.
출력된 Y_test는 테스트 데이터의 실제 레이블을 보여준다. 이를 통해 모델의 예측 결과와 비교하여 모델의 정확도를 평가할 수 있다.
이 코드는 사이킷런의 linear_model 모듈에서 LinearRegression 클래스를 임포트한다.
이 클래스는 선형 회귀 모델을 구현한 것이다.
LinearRegression() 클래스를 사용하여 선형 회귀 모델 객체를 생성하고, 이를 Lin_model 변수에 저장한다. 이 객체를 사용하여 모델을 학습하고 예측할 수 있다.
fit 메소드를 사용하여 모델을 훈련시킨다.
X_train.values는 훈련 데이터의 독립 변수(특성)들이다.
Y_train.values는 훈련 데이터의 종속 변수(타겟)이다.
predict 메소드를 사용하여 테스트 데이터에 대한 예측을 수행한다.
X_test.values는 테스트 데이터의 독립 변수(특성)들이다.
predict_result 변수에 예측 결과를 저장한다.
R²는 회귀 모델의 성능을 평가하는 지표로, 모델이 실제 데이터의 변동성을 얼마나 잘 설명하는지를 나타낸다.
R² 값은 0과 1 사이의 값을 가지며, 1에 가까울수록 모델의 설명력이 높음을 의미한다.
계산 방법:
여기서 SSres는 잔차 제곱합(sum of squares of residuals), SStot는 총 제곱합(total sum of squares)이다.
장점:
직관적으로 모델의 설명력을 평가할 수 있다.
비교적 쉽게 해석할 수 있다.
단점:
R² 값은 설명 변수가 추가될수록 증가하기 때문에, 과적합(overfitting)을 발생시킬 수 있다.
변수 선택에 민감하다.
예시:
R² = 0.92인 경우, 모델이 데이터 변동성의 92%를 설명한다는 의미이다.
MSE는 회귀 모델의 예측값과 실제값 간의 차이를 제곱하여 평균을 구한 값이다.
MSE 값이 작을수록 모델의 예측이 실제값에 가깝다는 의미이다.
계산 방법:
여기서 y_i 는 실제값, y_hat_i 는 예측값, n 은 데이터 포인트의 수이다.
장점:
모델의 예측 오차를 정량적으로 평가할 수 있다.
단위가 원 데이터의 단위와 같아 해석이 용이하다.
단점:
이상치(outliers)에 민감하다. 큰 오차가 제곱되므로 MSE 값에 큰 영향을 미친다.
절대적인 크기만을 평가하기 때문에 비교가 어려울 수 있다.
예시:
MSE = 14.20인 경우, 예측값과 실제값 간의 평균적인 제곱 오차가 14.20이라는 의미이다.
R²와 MSE는 회귀 모델의 성능을 평가하는 데 중요한 지표이다.
R²는 모델이 얼마나 데이터를 잘 설명하는지를, MSE는 예측값이 실제값과 얼마나 가까운지를 평가한다.
모델 평가 시 두 지표를 함께 사용하면 더 정확한 성능 평가가 가능하다.
사진 속 코드는 선형 회귀 모델의 성능을 평가하기 위해 r2_score와 mean_squared_error를 계산하는 과정을 보여준다.
r2_score와 mean_squared_error 함수는 사이킷런의 metrics 모듈에서 불러온다.
이 함수들은 모델의 성능을 평가하는 데 사용된다.
r2_score 함수는 예측값(lr_pred)과 실제값(Y_test)을 사용하여 결정 계수를 계산한다.
%.2f는 소수점 두 자리까지의 값을 출력하도록 포맷을 지정한다.
R² 값은 0.92로, 이는 모델이 실제 데이터의 92%를 설명할 수 있음을 의미한다.
mean_squared_error 함수는 예측값(lr_pred)과 실제값(Y_test)을 사용하여 평균 제곱 오차를 계산한다.
%.2f는 소수점 두 자리까지의 값을 출력하도록 포맷을 지정한다.
MSE 값은 14.20으로, 이는 예측값과 실제값 간의 평균적인 제곱 오차를 나타낸다.
KNN 모델은 새로운 데이터 포인트의 값을 예측할 때 가장 가까운 K개의 이웃 데이터 포인트를 기반으로 예측을 수행하는 비모수적 방법이다. KNN은 회귀와 분류에 모두 사용할 수 있다.
기본 개념:
주어진 데이터 포인트의 값을 예측하기 위해 가장 가까운 K개의 이웃 데이터 포인트를 찾는다.
이 이웃들의 값을 평균 내거나 다수결 투표를 통해 예측값을 결정한다.
장점:
이해하고 구현하기 쉽다.
훈련 단계가 빠르다. (모델을 저장할 필요 없이 데이터를 저장)
특성 공간이 균일한 경우 잘 작동한다.
단점:
계산 비용이 많이 든다. (특히 데이터가 큰 경우)
차원의 저주(curse of dimensionality, 데이터의 차원이 증가할수록 데이터 분석, 머신러닝 모델 훈련 및 예측의 어려움이 기하급수적으로 증가하는 현상)에 취약하다.
이웃의 수(K)의 선택이 결과에 크게 영향을 미친다.
하이퍼파라미터:
n_neighbors: 참조할 이웃의 수. 일반적으로 홀수로 설정해 다수결 투표 시 동점을 피한다.
weights: 이웃의 가중치를 설정하는 방법. 'uniform' (모든 이웃 동일 가중치), 'distance' (거리의 역수로 가중치 부여) 등이 있다.
algorithm: 최근접 이웃 검색을 수행하는 알고리즘 ('auto', 'ball_tree', 'kd_tree', 'brute').
사용 사례:
KNN은 소규모 데이터셋에서 효과적이며, 비교적 단순한 문제에 적합하다. 큰 데이터셋이나 고차원 데이터셋에는 비효율적일 수 있다.
sklearn.neighbors 모듈에서 KNeighborsRegressor 클래스를 임포트한다. KNeighborsRegressor는 K-최근접 이웃 회귀 모델을 제공하는 클래스다.
KNeighborsRegressor 클래스의 인스턴스를 생성한다. 기본적으로 n_neighbors=5가 설정되어 있다. 즉, 가장 가까운 5개의 이웃을 기준으로 예측값을 계산한다.
fit 메서드를 사용해 훈련 데이터(X_train 및 Y_train)로 모델을 학습시킨다.
predict 메서드를 사용해 테스트 데이터(X_test)에 대한 예측값을 생성한다.
예측값(knn_pred)과 실제값(Y_test)을 비교해 R^2 스코어와 평균 제곱 오차(MSE)를 계산하고 출력한다.
R^2 스코어는 모델이 데이터를 얼마나 잘 설명하는지를 나타내며, 1에 가까울수록 좋다.
평균 제곱 오차(MSE)는 예측값과 실제값 사이의 오차를 제곱하여 평균을 낸 값으로, 작을수록 좋다.
RandomForestRegressor는 랜덤 포레스트 알고리즘을 사용하여 회귀 문제를 해결하는 데 사용된다. 랜덤 포레스트는 앙상블 학습 기법의 하나로, 여러 개의 결정 트리(decision trees)를 학습한 후 그 예측을 종합하여 최종 예측을 만드는 방식이다. 이를 통해 모델의 과적합을 방지하고 예측 성능을 향상시킬 수 있다.
주요 특징
앙상블 학습:
여러 개의 결정 트리를 학습하여 각각의 예측을 평균화하거나 투표하여 최종 예측을 결정한다.
부트스트래핑(bootstrap sampling):
학습 데이터를 여러 개의 부트스트랩 샘플로 나누어 각 결정 트리가 서로 다른 데이터를 학습하도록 한다. 이는 모델의 다변성과 강건성을 높인다.
무작위성:
각 노드를 분할할 때 무작위로 선택된 특징 집합을 사용하여 트리의 다양성을 증가시킨다. 이는 과적합을 방지하고 모델의 일반화 성능을 향상시킨다.
RandomForestRegressor를 사이킷런에서 임포트한다. 회귀 문제에 사용되는 RandomForest 모델이다.
RandomForestRegressor 객체를 생성한다.
fit 메소드를 사용해 학습 데이터를 통해 모델을 학습시킨다.
X_train은 독립 변수, Y_train은 종속 변수이다.
학습된 모델을 사용해 테스트 데이터를 예측한다.
X_test는 테스트 데이터의 독립 변수이다.
r2_score와 mean_squared_error 함수를 사용해 모델의 성능을 평가한다.
R² 점수는 모델의 예측력이 얼마나 좋은지를 나타내는 지표로, 1에 가까울수록 좋다.
MSE(Mean Squared Error)는 평균 제곱 오차로, 낮을수록 예측이 실제 값에 가깝다는 의미이다.