scikit-learn (일반적으로 sklearn으로 줄여서 표기됨)은 파이썬에서 사용할 수 있는 머신러닝 라이브러리입니다. scikit-learn은 다양한 머신러닝 알고리즘, 데이터 전처리 기능, 모델 평가 도구 등을 제공하여 머신러닝 모델을 개발하고 평가하는 데 도움을 줍니다.
빅데이터 분석에서 다른 모듈과 함께 빠른 전처리를 할 수 있게 도와줍니다.
Sklearn이란?
Sklearn(scikit-learn)은 오픈 소스로 개발되었으며, 파이썬의 다른 데이터 분석 및 과학 관련 라이브러리인 NumPy, SciPy, Matplotlib와 통합하여 사용할 수 있습니다. 이를 통해 데이터의 로딩, 전처리, 모델 학습, 예측, 평가 등을 포괄적으로 수행할 수 있습니다.
scikit-learn은 지도 학습(Supervised Learning)과 비지도 학습(Unsupervised Learning) 알고리즘을 모두 지원합니다. 지도 학습의 경우 회귀(Regression), 분류(Classification)와 같은 작업을 수행할 수 있으며, 비지도 학습의 경우 군집화(Clustering), 차원 축소(Dimensionality Reduction) 등의 작업을 지원합니다. 또한, 사용하기 쉬운 API를 제공하고 있으며, 다양한 예제와 튜토리얼을 통해 사용 방법을 익힐 수 있습니다. 또한, scikit-learn은 머신러닝 커뮤니티에서 널리 사용되고 있는 라이브러리이기 때문에 다양한 지원 자료와 커뮤니티 지원을 받을 수 있습니다.
SKlearn 사용 방법
설치방법
cikit-learn은 일반적으로 파이썬 패키지 관리자인 pip를 통해 설치할 수 있습니다. 기본적으로 scikit-learn은 파이썬 패키지로 제공되지 않기 때문에, 별도로 설치해야 합니다. 다음 명령을 사용하여 scikit-learn을 설치할 수 있습니다
pip install scikit-learn
위 명령을 실행하면, pip가 인터넷에서 scikit-learn 패키지를 다운로드하고 설치합니다. 만약 파이썬 환경이 Anaconda와 같은 패키지 관리자를 사용하고 있다면, 다음 명령을 통해 scikit-learn을 설치할 수 있습니다
conda install scikit-learn
설치가 완료되면, scikit-learn을 사용할 수 있습니다. 다음과 같이 import 문을 사용하여 라이브러리를 가져올 수 있습니다
import sklearn
sklern 활용 방법
데이터 전처리
Min-Max 스케일링: 데이터의 특성을 0과 1 사이의 값으로 조정합니다. sklearn.preprocessing.MinMaxScaler를 사용합니다.
from sklearn.preprocessing import MinMaxScaler
# 예시 데이터
data = [[10], [5], [3], [2]]
# Min-Max 스케일링을 위한 scaler 객체 생성
scaler = MinMaxScaler()
# 데이터 스케일링
scaled_data = scaler.fit_transform(data)
print(scaled_data)
표준화(Standardization): 데이터의 평균을 0으로, 표준 편차를 1로 만들어 데이터의 분포를 조정합니다. sklearn.preprocessing.StandardScaler를 사용합니다.
from sklearn.preprocessing import StandardScaler
# 예시 데이터
data = [[10], [5], [3], [2]]
# 표준화를 위한 scaler 객체 생성
scaler = StandardScaler()
# 데이터 표준화
standardized_data = scaler.fit_transform(data)
print(standardized_data)
지도 학습
분류(Classification): 레이블이 있는 데이터를 사용하여 학습하고, 새로운 데이터의 클래스를 예측합니다. sklearn.linear_model.LogisticRegression, sklearn.ensemble.RandomForestClassifier 등의 분류 알고리즘을 사용합니다.
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 붓꽃 데이터 로드
iris = load_iris()
# 특성과 타겟 데이터
X = iris.data
y = iris.target
# 훈련 데이터와 테스트 데이터 분리
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 로지스틱 회귀 모델 생성 및 학습
model = LogisticRegression()
model.fit(X_train, y_train)
# 예측
y_pred = model.predict(X_test)
# 정확도 평가
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)
회귀(Regression): 입력 데이터와 연속적인 출력 값 사이의 관계를 모델링합니다. sklearn.linear_model.LinearRegression, sklearn.ensemble.GradientBoostingRegressor 등의 회귀 알고리즘을 사용합니다.
from sklearn.linear_model import LinearRegression
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
# 보스턴 주택가격 데이터 로드
boston = load_boston()
# 특성과 타겟 데이터
X = boston.data
y = boston.target
# 훈련 데이터와 테스트 데이터 분리
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 선형 회귀 모델 생성 및 학습
model = LinearRegression()
model.fit(X_train, y_train)
# 예측
y_pred = model.predict(X_test)
# 평균 제곱 오차 계산
mse = mean_squared_error(y_test, y_pred)
print("Mean Squared Error:", mse)
모델 평가
교차 검증(Cross-validation): 데이터를 여러 개의 부분 집합으로 나누어 모델을 평가합니다. sklearn.model_selection.cross_val_score 함수를 사용합니다.
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris
# 붓꽃 데이터 로드
iris = load_iris()
# 특성과 타겟 데이터
X = iris.data
y = iris.target
# 로지스틱 회귀 모델 생성
model = LogisticRegression()
# 교차 검증 수행
scores = cross_val_score(model, X, y, cv=5) # 5-fold 교차 검증
print("Cross-validation scores:", scores)
print("Mean accuracy:", scores.mean())
성능 평가 지표: 정확도(Accuracy), 정밀도(Precision), 재현율(Recall), F1 점수(F1-score) 등 다양한 평가 지표를 계산합니다. sklearn.metrics 모듈에서 제공되는 함수들을 사용합니다.
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
# 붓꽃 데이터 로드
iris = load_iris()
# 특성과 타겟 데이터
X = iris.data
y = iris.target
# 훈련 데이터와 테스트 데이터 분리
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 로지스틱 회귀 모델 생성 및 학습
model = LogisticRegression()
model.fit(X_train, y_train)
# 예측
y_pred = model.predict(X_test)
# 정확도 평가
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)
# 정밀도 평가
precision = precision_score(y_test, y_pred, average='macro')
print("Precision:", precision)
# 재현율 평가
recall = recall_score(y_test, y_pred, average='macro')
print("Recall:", recall)
# F1 점수 평가
f1 = f1_score(y_test, y_pred, average='macro')
print("F1-score:", f1)
sklern 사용 규칙
pandas는 한번 import 한 뒤 부터 변수 뒤에 pd.read 이런식으로 사용하는데, sklearn.metricsd은 왜 from으로 시작할까요?
pandas의 경우, 일반적으로 import pandas as pd와 같이 pd라는 짧은 별칭으로 import하며, 판다스의 모듈과 함수를 사용할 때는 pd.function_name()과 같은 형식으로 호출합니다. 이는 판다스를 사용하는 개발자들 간에 일관성을 유지하고 코드의 가독성을 높이기 위한 관례입니다.
scikit-learn의 경우, 모듈과 함수의 이름을 보다 명확하고 직관적으로 사용할 수 있도록 설계되었습니다. 예를 들어, sklearn.metrics 모듈의 accuracy_score 함수는 이름 그대로 정확도를 계산하는 함수입니다. 이러한 구조는 scikit-learn의 다양한 모듈과 함수를 사용할 때 코드를 더 직관적이고 명확하게 만들어 줍니다. 따라서 scikit-learn에서는 from sklearn.metrics import accuracy_score와 같이 from을 사용하여 필요한 함수를 직접 import하는 형태를 많이 사용합니다.
이러한 라이브러리마다의 작명 규칙은 개발자 커뮤니티에서의 합의와 관례에 따라 결정되며, 라이브러리의 사용성과 가독성을 고려하여 설계됩니다.