Scikit-Learn(sklearn)은 파이썬에서 사용하는 머신러닝 라이브러리이다.
다양한 머신 러닝 알고리즘과 데이터 전처리 기능을 제공하며, 간단하고 일관된 API를 사용하여 사용자가 모델링 작업을 쉽게 수행할 수 있도록 지원한다.
기본적인 5단계
0. Data Preprocessing
1. Model Import
2. Model Declaration
3. Model Fitting(Training)
4. Model Predict
5. Model Evaluation
from sklearn.model_selection import train_test_split
# 꼭 이 순서대로 변수를 지정해야 한다.
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = testdata비율, random_state = 난수고정값)
## one hot encoding 적용
from sklearn.preprocessing import OneHotEncoder
oe = OneHotEncoder()
oe.fit(train_df['category칼럼명'])
train_encoded = oe.transform(train_df['category칼럼명'])
test_encoded = oe.transform(test_df['category칼럼명'])
## 원래 DataFrame과 concat
train_encoded_df = pd.DataFrame(train_encoded, columns = encoder.get_feature_names(['category칼럼명']))
test_encoded_df = pd.DataFrame(test_encoded, columns = encoder.get_feature_names(['category칼럼명']))
train_df = pd.concat([train_df, train_encoded_df], axis = 1)
test_df = pd.concat([test_df, test_encoded_df], axis = 1)
## scaler import
from sklearn.preprocessing import StandardScaler, MinMaxScaler
## scaler 선언
mm_scaler = MinMaxScaler()
sd_scaler = StandardScaler()
## scaler 학습
mm_scaler.fit(x_train)
sd_scaler.fit(x_train)
## scaler로 데이터에 적용
x_train_mm = mm_scaler.transform(x_train)
x_test_mm = mm_scaler.transform(x_test)
x_val_mm = mm_scaler.transform(x_val)
x_train_sd = sd_scaler.transform(x_train)
x_test_sd = sd_scaler.transform(x_test)
x_val_sd = sd_scaler.transform(x_val)
# model import
from sklearn.linear_model import LinearRegression
# model 선언
lr = LinearRegression()
# model fitting
x_train = df.iloc[:, :-1] # 임의로 x 정의
y_train = df.iloc[:, -1] # 임의로 y 정의
lr.fit(x_train, y_train)
# model predict
y_test_pred = lr.predict(x_test)
Underfitting이란? model이 데이터의 패턴을 덜 학습한 상태(추가 학습의 여지가 남아있는 상태), 즉 loss가 최저점에 도착하지 못한 상태를 의미한다.
Balanced(Ideal) Fitting이란? model이 이상적으로 데이터의 패턴을 학습한 상태, 신규 데이터가 들어오더라도 유연하게 받아줄 수 있는 상태. 즉, training data loss와 test data loss가 비슷한 상태를 의미한다.
Overfitting이란? 기존의 데이터 패턴들만 너무 딱 떨어지게 학습을 해버려서, 신규 데이터 패턴에는 유연하게 대응할 수 없는 상태. 즉, training data에 대한 loss는 최저일 수 있으나, test data에 대한 loss가 증가하거나 발산하는 상태를 의미한다.
# model import
from sklearn.tree import DecisionTreeClassifier
# model 선언
dtc = DecisionTreeClassifier() # dtc = DecisionTreeClassifier(max_depth=2)
# model fitting
x_train = df.iloc[:, :-1] # 임의로 x 정의
y_train = df.iloc[:, -1] # 임의로 y 정의
dtc.fit(x_train, y_train)
# model predict
y_val_pred = dtc.predict(x_test)
# 그래프를 그려보면 max_depth에 따른 성능을 볼 수 있다.
import matplotlib.pyplot as plt
import seaborn as sns
plt.figure()
sns.lineplot(x = range(1, 20), y = train_accuracy_list, color = 'blue')
sns.lineplot(x = range(1, 20), y = test_accuracy_list, color = 'red')
plt.grid(True)
plt.show()
예시로 아래의 그래프에서 max_depth가 18일 때 가장 높은 성능을 낼 수 있다는 것을 확인할 수 있다.
# model import
from sklearn.ensemble import RandomForestClassifier
# model 선언
rfc = RandomForestClassifier()
# model fitting
x_train = df.iloc[:, :-1] # 임의로 x 정의
y_train = df.iloc[:, -1] # 임의로 y 정의
rfc.fit(x_train, y_train)
# model predict
y_test_pred = rfc.predict(x_test)
# model import
from sklearn.ensemble import GradientBoostingClassifier
# model 선언
gbc = GradientBoostingClassifier()
# model fitting
x_train = df.iloc[:, :-1] # 임의로 x 정의
y_train = df.iloc[:, -1] # 임의로 y 정의
gbc.fit(x_train, y_train)
# model predict
y_test_pred = gbc.predict(x_test)
from sklearn.metrics import mean_absolute_error as mae
mae(y_test, y_pred)
from sklearn.metrics import mean_squared_error as mse
import numpy as np
# mean squared error 평가지표
mse(y_test, y_pred)
from sklearn.metrics import mean_squared_error as mse
import numpy as np
# mean squared error 평가지표
mse(y_test, y_pred)
# mse에 제곱근연산을 한 rmse 함수 정의
def rmse(y_test, y_pred):
return np.sqrt(mse(y_test, y_pred))
# rmse 평가지표
rmse(y_val, y_val_pred)
실제 데이터 중 맞게 예측한 데이터의 비율을 말한다.
from sklearn.metrics import accuracy_score
accuracy_score(y_test, y_test_pred)
from sklearn.metrics import classification_report, f1_score
print(classification_report(y_test, y_test_pred))
!pip uninstall scikit-learn --y
!pip install scikit-learn==1.2.2
데이터 가져오기
import pandas as pd
import numpy as np
df = pd.read_csv('breast-cancer.csv')
데이터 확인
df.head()
df.info()
df.describe()
df.shape
데이터 전처리 : Train Test Split
x = df.loc[:, 'radius_mean':]
y = df['diagnosis'].astype('int')
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size= 0.2, random_state= 2023)
데이터 전처리 : Scaling
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
scaler.fit(x_train)
x_train_sc = scaler.transform(x_train)
x_test_sc = scaler.transform(x_test)
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier
# 함수 형태로 변수에 저장
lr = LogisticRegression()
dtc = DecisionTreeClassifier()
rfc = RandomForestClassifier()
gbc = GradientBoostingClassifier()
for model in [lr, dtc, rfc, gbc]:
model.fit(x_train, y_train)
for model in [lr, dtc, rfc, gbc]:
y_test_pred = model.predict(x_test)
from sklearn.metrics import accuracy_score, f1_score, classification_report
for model in [lr, dtc, rfc, gbc]:
print(accuracy_score(y_test, y_test_pred))
print(f1_score(y_test, y_test_pred))
print(classification_report(y_test, y_test_pred))
https://mozenworld.tistory.com/entry/머신러닝-모델-소개-1-선형-회귀-모델-Linear-Regression
https://mozenworld.tistory.com/entry/머신러닝-모델-소개-4-랜덤-포레스트-Random-Forest
https://dacon.io/en/competitions/official/235946/codeshare/5623