관리 메뉴

NineTwo meet you

[빅분기 실기 타파 - 2] 만능코드 만들기 - Classification/Regression 🥊 본문

머신러닝

[빅분기 실기 타파 - 2] 만능코드 만들기 - Classification/Regression 🥊

NineTwo 2023. 6. 27. 00:28
반응형
  1. Drop
  2. Fillna
  3. Encoding & Scaling
  4. Splite Test, Train
  5. Modeling
  6. Submit result

0. 데이터 준비

[빅분기 실기 타파 - 1] Google Colaboratory에 Kaggle 데이터셋 가져오기 🥊

 

[빅분기 실기 타파 - 1] Google Colaboratory에 Kaggle 데이터셋 가져오기 🥊

🛠 참고 : https://github.com/Kaggle/kaggle-api GitHub - Kaggle/kaggle-api: Official Kaggle API Official Kaggle API. Contribute to Kaggle/kaggle-api development by creating an account on GitHub. github.com 1. install !pip install kaggle --upgrade 2. API

settembre.tistory.com

위의 글을 참고로 아래 데이터를 섞어서 설명할 예정입니다.

https://www.kaggle.com/competitions/titanic/data

https://www.kaggle.com/datasets/uciml/pima-indians-diabetes-database

https://www.kaggle.com/datasets/uciml/adult-census-income

https://www.kaggle.com/competitions/house-prices-advanced-regression-techniques

 

가져온 데이터를 살펴보기

test_data = pd.read_csv("test.csv")
train_data = pd.read_csv("train.csv")
train_data.info()
train_data.describe()
train_data.isnull().sum()

1. Drop

위에서 확인한 데이터 중 필요 없는 칼럼 & 로우를 삭제하자. 
아래 코드는 Y 값으로 사용되는 값인 'Glucose'가 0인 로우를 삭제하는 코드다.

d_ind = diabetes_data[diabetes_data['Glucose'] == 0].index

# d_ind
# Int64Index([75, 182, 342, 349, 502], dtype='int64')

diabetes_data.drop(index = d_ind)

2. Fillna

데이터 결측치 처리하기.

3. Encoding & Scaling

데이터의 형에 따라 범주형 데이터는 인코딩을 하거나 수치형 데이터는 스케일링을 통해 데이터를 갈고닦자.

adult_data.info()

cat_features = [
                 'workclass',
                 'education',
                 'marital.status',
                 'occupation',
                 'relationship',
                 'race',
                 'sex',
                 'native.country'
]

numeric_features = [
                    'age',
                    'fnlwgt',
                    'education.num',
                    'capital.gain',
                    'capital.loss',
                    'hours.per.week',
                   ]
from sklearn.preprocessing import LabelEncoder

le = LabelEncoder()
for i in cat_features :
  adult_data[i] = le.fit_transform(adult_data[i])

상황에 따라 값을 직접 조건에 맞는 값으로 대체할 수 도 있어야 한다.

더보기
adult_data['income'].value_counts()
adult_data['income'] = np.where(adult_data['income'] == '<=50K', 0, 1)
adult_data['income'].value_counts()
# 데이터가 -1과 1 사이에 위치하도록 스케일링

from sklearn.preprocessing import MinMaxScaler

mms = MinMaxScaler()
adult_data[numeric_features] = scaler.fit_transform(adult_data[numeric_features])
# 데이터의 평균 = 0, 분산 = 1이 되도록 스케일링

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()

cols = ['Pregnancies','Glucose','BloodPressure','SkinThickness','Insulin','BMI','DiabetesPedigreeFunction','Age']
diabetes_data[cols] = scaler.fit_transform(diabetes_data[cols])


4. Splite Test, Train

모델링을 위해 위에서 지지고 볶은 데이터 나눠주기 전에 X와 Y가 하나의 데이터로 되어 있다면 우선 X와 Y를 나눠야 한다.

diabetes_data.describe()

Outcome이 Y 나머지 컬럼이 X들이라고 한다면, 다음과 같이 나눌 수 있다.

feature_cols = list(diabetes_data.columns.difference(['Outcome']))
X = diabetes_data[feature_cols]
Y = diabetes_data['Outcome']

# print(X.shape) 
# (768, 8)
# print(Y.shape) 
# (768,)

Train set 70%와 Test set 30%를 이용해 모델링을 진행해 보자.

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, Y, train_size = 0.7, random_state= 1234)

5. Modeling

실제 시험에서 모델링이 잘됐는지 r2 score 라던지,  Accuracy score 라던지 확인할 수 있지만 건너뛰고,,
classifier 이면 냅다 RandomForestClassifier , Regression 면 RandomForestRegressor 돌렸습니다.

저는 혹시 몰라 from xgboost import XGBClassifier 도 외워갔습니다. 

!pip install sklearn
from sklearn.ensemble import RandomForestClassifier

model = RandomForestClassifier()
model.fit(X_train, y_train)
pred = model.predict(X_test)

print(model.score(X_train, y_train))
from sklearn.ensemble import RandomForestRegressor

model = RandomForestClassifier()
model.fit(X_train, y_train)
pred = model.predict(X_test)

print(model.score(X_train, y_train))
from sklearn.linear_model import LogisticRegression

model1 = LogisticRegression()
model1.fit(X_train, y_train)
pred = model1.predict(X_test)

print(model1.score(X_train, y_train))

6. Submit result

시험에서 제출한 csv를 통해 채점을 진행한다고 하니 잘 제출하기.

output.to_csv('titanic.csv', index = False)

 

반응형
Comments