심화 프로젝트 첫날.
학습이 선행이 되어야 프로젝트를 할 수 있는데 너무 놀았나보다.
데이터와 주제까지 주니까 플젝인지 과제인지 헷갈리더라.
분석 프로세스 중 데이터 전처리, EDA, 모델링(M/L)을 배운거고,
ML 공부했다고 프로세스를 놓치면 안된다는 걸 잊어버렸다.
<범주형 데이터 전처리 - 인코딩(Encoding)>
인코딩 : 숫자가 아닌 데이터를 숫자로 바꿈
<수치형 데이터 전처리 - 스케일링(Scaling)>
스케일링 : 수치형 자료에 대한 전처리
머신러닝의 학습에 사용되는 데이터들은 서로 단위 값이 다르기 때문에 이를 보정
표준화(Standardization)
sklearn.preprocessing.StandardScaler
정규화(Normalization)
sklearn.preprocessing.MinMaxScaler
로버스트 스케일링(Robust Scaling)
sklearn.preprocessing.RobustScaler
<과적합>
과대적합(Overfitting) : 데이터를 너무 과도하게 학습한 나머지 해당 문제만 잘 맞추고 새로운 데이터를 제대로 예측 혹은 분류하지 못하는 현상
과적합 해결 - 테스트 데이터의 분리
fit
)하기 위한 데이터sklearn.model_selection.train_test_split
test_size
: 테스트 데이터 세트 크기train_size
: 학습 데이터 세트 크기shuffle
: 데이터 분리 시 섞기(랜덤성 추가)random_state
: 호출할 때마다 동일한 학습/테스트 데이터를 생성하기 위한 난수 값. 수행할 때 마다 동일한 데이터 세트로 분리하기 위해 숫자를 고정 시켜야 함X_train
, X_test
, y_train
, y_test
인코딩
titanic_df.head(3)
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
le = LabelEncoder()
oe = OneHotEncoder()
le.fit(titanic_df[['Sex']])
le.classes_
titanic_df['Sex_le'] = le.transform(titanic_df[['Sex']])
titanic_df.head(3)
oe.fit(titanic_df[['Embarked']])
oe.categories_
oe.transform(titanic_df[['Embarked']])
#sparse matrix : 데이터가 희박함 (CSR)
embarked_csr = oe.transform(titanic_df[['Embarked']])
embarked_csr_df = pd.DataFrame(embarked_csr.toarray(), columns = oe.get_feature_names_out())
embarked_csr_df.head(3)
#concat으로 합치기
pd.concat([titanic_df, embarked_csr_df], axis = 1)
스케일링
sns.pairplot(titanic_df[['Age', 'Fare']])
titanic_df[['Age', 'Fare']].describe()
#Age : MinMaxScaler, Fare : StandardScaler
from sklearn.preprocessing import MinMaxScaler, StandardScaler
mm_sc = MinMaxScaler()
sd_sc = StandardScaler()
titanic_df['Age_mean_mm_sc'] = mm_sc.fit_transform(titanic_df[['Age_si_mean']])
titanic_df.head(3)
titanic_df['Fare_sd_sc'] = sd_sc.fit_transform(titanic_df[['Fare']])
titanic_df.head(3)
sns.histplot(titanic_df['Age_mean_mm_sc'])
sns.histplot(titanic_df['Fare_sd_sc'])
titanic_df.head(3)
데이터 분리
- train_test_split
- X 변수 : Fare, Sex
- Y 변수 : Survived
- stratify : 층화 추출, 현재 비율 보존하면서 추출 가능
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(titanic_df[['Fare', 'Sex']], titanic_df[['Survived']],
test_size=0.3, shuffle= True, random_state=42,
stratify=titanic_df[['Survived']])
print(X_train.shape, X_test.shape, y_train.shape, y_test.shape)
#원자료 891개 Y값의 분포
sns.countplot(titanic_df, x = 'Survived')
sns.countplot(y_train, x = 'Survived')
sns.countplot(y_test, x = 'Survived')
내일은 오전에 회의(분석 프로세스, EDA 정리)하고 심화 나머지 들어야겠다.
잘못되어간다는 건 아는데,,, 할 줄 아는 게 없어서 손 놓고 있는 찝찝함을 반복할 순 없5,,,
선택과 집중
당장 선택하기 곤란
선택 모대서 집중도 모담
집중 안하다가 오만가지 와장창
선택 햇스면 까불지 말구 집중 🥱