목차
▶lambda 식으로 데이터 가공
판다스는 apply 함수에 lambda 식을 결합해 데이터를 가공하는 기능을 제공한다.
예제를 통해 lambda 식이 어떻게 사용되는지 알아보자.
Name 칼럼의 문자열 개수를 Name_len이라는 칼럼에 넣어보자.
titanic_df['Name_len']= titanic_df['Name'].apply(lambda x : len(x))
titanic_df[['Name','Name_len']].head(3)
잘 추가된 모습을 볼 수 있다.
lambda 식에 if else를 사용해서 복잡하게 가공할 수 있다.
나이가 15 이하면 child, 넘으면 adult로 구분하게 했다.
titanic_df['Child_Adult'] = titanic_df['Age'].apply(lambda x : 'Child' if x <=15 else 'Adult' )
titanic_df[['Age','Child_Adult']].head(8)
사이킷런으로 붓꽃 품종 예측하기
붓꽃 품종을 예측하는 것은 지도학습 방법 중 하나인 분류에 해당한다. 정답이 주어진 데이터를 학습하고 테스트 데이터 셋으로 정답을 예측한다.
# 붓꽃 데이터 세트를 로딩합니다.
iris = load_iris()
# iris.data는 Iris 데이터 세트에서 피처(feature)만으로 된 데이터를 numpy로 가지고 있습니다.
iris_data = iris.data
# iris.target은 붓꽃 데이터 세트에서 레이블(결정 값) 데이터를 numpy로 가지고 있습니다.
iris_label = iris.target
print('iris target값:', iris_label)
print('iris target명:', iris.target_names)
# 붓꽃 데이터 세트를 자세히 보기 위해 DataFrame으로 변환합니다.
iris_df = pd.DataFrame(data=iris_data, columns=iris.feature_names)
iris_df['label'] = iris.target
iris_df.head(3)
우선 붓꽃 데이터를 로딩하고 데이터를 확인하기 위해 dataFrame으로 변환한다.
출력값은 위와 같다.
특징은 sepal length, sepal width, petal length, petal width가 있는 것을 알 수 있다.
label은 0이 setosa, 1이 versicolor, 2가 virginica다.
본격적으로 모델을 학습시키기 전에 학습 데이터와 테스트 데이터를 분리해보자.
사이킷런에서 제공하는 train_test_split()을 사용해 분리할 수 있다.
X_train, X_test, y_train, y_test = train_test_split(iris_data, iris_label,
test_size=0.2, random_state=11)
함수의 첫번째 파라미터로는 피처 데이터셋, 두번째 파라미터는 레이블 데이터 셋이 들어간다.
test_size 파라미터는 테스트 데이터의 비율을 의미한다. 따라서 이 경우에는 테스트 데이터는 20%, 학습 데이터는 80%로 분할한다는 뜻이다.
random_state는 호출할 때마다 같은 학습/테스트 데이터 셋을 생성하기 위한 난수 발생 값이다.
만약 random_state를 지정하지 않으면 수행할 때마다 다른 학습/테스트 데이터 셋이 만들어진다.
이제 분리한 학습 데이터를 의사 결정 트리를 이용해 학습과 예측을 해보자.
우선 사이킷런의 의사 결정 트리 클래스인 DecisionTreeClassifier를 객체로 생성해야 한다.
그 다음에는 fit() 함수를 사용해 학습을 한다.
# DecisionTreeClassifier 객체 생성
dt_clf = DecisionTreeClassifier(random_state=11)
# 학습 수행
dt_clf.fit(X_train, y_train)
학습이 다 되면 학습 완료된 객체를 활용해서 예측을 하면 된다.
예측은 predict() 함수를 사용한다.
# 학습이 완료된 DecisionTreeClassifier 객체에서 테스트 데이터 세트로 예측 수행.
pred = dt_clf.predict(X_test)
예측 성능을 평가하기 위해 정확도를 측정해보자.
정확도 측정은 accuracy_score() 함수를 사용하면 된다.
from sklearn.metrics import accuracy_score
print('예측 정확도: {0:.4f}'.format(accuracy_score(y_test,pred)))
출처
책 - 파이썬 머신러닝 완벽 가이드
'Study > 머신러닝' 카테고리의 다른 글
[4] 머신러닝 - 판다스 기초(3) (0) | 2021.05.24 |
---|---|
[3] 머신러닝 - 판다스 기초(2) (0) | 2021.05.16 |
[2] 머신러닝 - 판다스 기초(1) (0) | 2021.05.11 |
[1] 머신러닝 - numpy 기초 (0) | 2021.05.04 |
[PyTorch] torchvision을 활용한 image transform (0) | 2021.01.31 |