해결된 질문
작성
·
81
0
9분 09초
영상과 노트북의 코드가 다른데요
# 풀이 코드
# X_train, y_train, X_test 3개 파일이 주어졌을 때
from sklearn.datasets import load_wine
wine = load_wine()
df = pd.DataFrame(wine.data, columns=wine.feature_names)
df['target'] = wine.target
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, _ = train_test_split(df.drop('target',axis=1),
df['target'],
test_size=0.2,
random_state=2022)
# 만약 'proline'컬럼의 값이 1500 일때 이상치라고 판단해 삭제 했다면?
print("1500이상인 데이터 수:", sum(X_train['proline'] >= 1500))
# 삭제할 데이터의 인덱스 값을 구하고 drop함수를 통해 삭제
ind = X_train[X_train['proline'] >= 1500].index
print("삭제할 index:", ind)
X_train = X_train.drop(ind) # 기본값 axis = 0
y_train = y_train.drop(ind)
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier()
model.fit(X_train, y_train)
(질문1 )X_train에 y_train를 합친뒤 이상치를 삭제하는 것보다 각각 개별로 삭제하는게 더 간단해서 수정한건가요?
(질문2)
df 에서 이상치를 제거한 후에 train_test_split 으로 데이터를 나눠도 되는건가요?
답변 1
1
X와 y따로 진행해도 되고, 합쳐서 진행해도 됩니다 🙂
아니요. # X_train, y_train, X_test 3개 파일이 주어졌을 때 의 상황이
1개의 데이터를 X_train, X_test, y_train로 만든 상황까지가 데이터 불러오기라고 봐주세요! (시험환경에서도 복사-붙여넣기로 동작하게 만들려고 하다보니 이렇게 작성하였는데 train_test_split이 나와서 조금 헷갈릴 수 있겟네요! )
데이터 전처리시 train에 적용한 모든 작업은 test에도 동일하게 작업하나
test 데이터는 절대로 행을 삭제하면 안됩니다. 따라서 합쳐서 제거 하면 안됩니다. 100개를 물었는데 test에서 1~2개가 사라지면 0점 처리됩니다.
from sklearn.datasets import load_wine
wine = load_wine()
df = pd.DataFrame(wine.data, columns=wine.feature_names)
df['target'] = wine.target
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, _ = train_test_split(df.drop('target',axis=1),
df['target'],
test_size=0.2,
random_state=2022)
더불어
이상치가 나올 것으로 만든 영상인데 아직 작업형2가 결측치도 나온적이 없어요. 작업형2는 난이도가 낮게 나왔습니다.
문제에서 이상치라고 말하지 않는다면 이상치 관련해서는 작업하지 않는 것을 추천드립니다.